/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.tdb.setup; import static org.apache.jena.tdb.setup.StoreParamsConst.TDB_CONFIG_FILE ; import java.nio.file.Files ; import java.nio.file.Path ; import java.nio.file.Paths ; import org.apache.jena.atlas.json.JSON ; import org.apache.jena.atlas.json.JsonObject ; import org.apache.jena.atlas.junit.BaseTest ; import org.apache.jena.atlas.lib.FileOps ; import org.apache.jena.tdb.ConfigTest ; import org.apache.jena.tdb.StoreConnection ; import org.apache.jena.tdb.base.file.Location ; import org.apache.jena.tdb.setup.StoreParams ; import org.apache.jena.tdb.setup.StoreParamsCodec ; import org.junit.After ; import org.junit.Before ; import org.junit.Test ; /** * This test suite uses on-disk structures, does a lot of clean/create/sync * calls and can be noticably slow. */ public class TestStoreParamsCreate extends BaseTest { private final String DB_DIR = ConfigTest.getCleanDir() ; private final Path db = Paths.get(DB_DIR) ; private final Path cfg = Paths.get(DB_DIR, TDB_CONFIG_FILE) ; private final Location loc = Location.create(DB_DIR) ; static final StoreParams pApp = StoreParams.getSmallStoreParams() ; static final StoreParams pDft = StoreParams.getDftStoreParams() ; static final StoreParams pSpecial = StoreParams.builder(pApp) .blockSize(1024) .blockReadCacheSize(4) .build(); @Before public void clearupTest() { // Flush and clean. StoreConnection.expel(loc, true) ; FileOps.clearAll(DB_DIR); } @After public void expelDatabase() { StoreConnection.expel(loc, true) ; } @Test public void params_create_01() { StoreConnection.make(loc, null) ; // Check. Default setup, no params. assertTrue("DB directory", Files.exists(db)) ; assertFalse("Config file unexpectedly found", Files.exists(cfg)) ; } @Test public void params_create_02() { StoreConnection.make(loc, pApp) ; // Check. Custom setup. assertTrue("DB directory", Files.exists(db)) ; assertTrue("Config file not found", Files.exists(cfg)) ; StoreParams pLoc = StoreParamsCodec.read(loc) ; assertTrue(StoreParams.sameValues(pLoc, pApp)) ; } // Defaults @Test public void params_reconnect_01() { // Create. StoreConnection.make(loc, null) ; // Drop. StoreConnection.expel(loc, true) ; // Reconnect StoreConnection.make(loc, null) ; StoreParams pLoc = StoreParamsCodec.read(loc) ; assertNull(pLoc) ; StoreParams pDB = StoreConnection.getExisting(loc).getBaseDataset().getConfig().params ; assertNotNull(pDB) ; // Should be the default setup. assertTrue(StoreParams.sameValues(pDft, pDB)) ; } // Defaults, then reconnect with app modified. @Test public void params_reconnect_02() { // Create. StoreConnection.make(loc, null) ; // Drop. StoreConnection.expel(loc, true) ; // Reconnect StoreConnection.make(loc, pSpecial) ; //StoreParams pLoc = StoreParamsCodec.read(loc) ; //assertNotNull(pLoc) ; StoreParams pDB = StoreConnection.getExisting(loc).getBaseDataset().getConfig().params ; assertNotNull(pDB) ; // Should be the default setup, modified by pApp for cache sizes. assertFalse(StoreParams.sameValues(pDft, pDB)) ; assertFalse(StoreParams.sameValues(pSpecial, pDB)) ; // Check it's default-modified-by-special. assertEquals(pSpecial.getBlockReadCacheSize(), pDB.getBlockReadCacheSize()) ; assertNotEquals(pDft.getBlockReadCacheSize(), pDB.getBlockReadCacheSize()) ; assertNotEquals(pSpecial.getBlockSize(), pDB.getBlockSize()) ; assertEquals(pDft.getBlockSize(), pDB.getBlockSize()) ; } // Custom, then reconnect with some special settings. @Test public void params_reconnect_03() { // Create. StoreConnection.make(loc, pApp) ; // Drop. StoreConnection.expel(loc, true) ; // Reconnect StoreConnection.make(loc, pSpecial) ; //StoreParams pLoc = StoreParamsCodec.read(loc) ; //assertNotNull(pLoc) ; StoreParams pDB = StoreConnection.getExisting(loc).getBaseDataset().getConfig().params ; assertNotNull(pDB) ; // Should be the default setup, modified by pApp for cache sizes. assertFalse(StoreParams.sameValues(pApp, pDB)) ; assertFalse(StoreParams.sameValues(pSpecial, pDB)) ; // Check it's default-modified-by-special. assertEquals(pSpecial.getBlockReadCacheSize(), pDB.getBlockReadCacheSize()) ; assertNotEquals(pApp.getBlockReadCacheSize(), pDB.getBlockReadCacheSize()) ; assertNotEquals(pSpecial.getBlockSize(), pDB.getBlockSize()) ; assertEquals(pApp.getBlockSize(), pDB.getBlockSize()) ; } // // Custom then modified. // @Test public void params_reconnect_03() { // // Create. // StoreConnection.make(loc, pLoc) ; // // Drop. // StoreConnection.expel(loc, true) ; // // Reconnect // StoreConnection.make(loc, pApp) ; // StoreParams pLoc = StoreParamsCodec.read(loc) ; // assertFalse(StoreParams.sameValues(pApp, pLoc)) ; // assertFalse(StoreParams.sameValues(pApp, pLoc)) ; // } // Dataset tests static StoreParams read(Location location) { String fn = location.getPath(TDB_CONFIG_FILE) ; JsonObject obj = JSON.read(fn) ; return StoreParamsCodec.decode(obj) ; } }