/*
* 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 org.apache.jena.atlas.json.JSON ;
import org.apache.jena.atlas.json.JsonObject ;
import org.apache.jena.atlas.junit.BaseTest ;
import org.apache.jena.tdb.TDBException ;
import org.apache.jena.tdb.base.block.FileMode ;
import org.apache.jena.tdb.setup.StoreParams ;
import org.apache.jena.tdb.setup.StoreParamsBuilder ;
import org.apache.jena.tdb.setup.StoreParamsCodec ;
import org.junit.Test ;
public class TestStoreParams extends BaseTest {
@Test public void store_params_01() {
assertEqualsStoreParams(StoreParams.getDftStoreParams(), StoreParams.getDftStoreParams()) ;
}
@Test public void store_params_02() {
StoreParams input = StoreParams.getDftStoreParams() ;
StoreParams sp = StoreParams.builder(input).build() ;
assertEqualsStoreParams(StoreParams.getDftStoreParams(), sp) ;
}
@Test public void store_params_03() {
StoreParams sp = StoreParams.builder().build() ;
assertEqualsStoreParams(StoreParams.getDftStoreParams(), sp) ;
}
@Test public void store_params_04() {
StoreParams params = StoreParams.builder().build() ;
StoreParams params2 = roundTrip(params) ;
assertEqualsStoreParams(params,params2) ;
}
// ----
@Test public void store_params_10() {
StoreParams params = StoreParams.builder().fileMode(FileMode.direct).blockSize(1024).build() ;
StoreParams params2 = roundTrip(params) ;
assertEqualsStoreParams(params,params2) ;
assertEquals(params.getFileMode(), params2.getFileMode()) ;
assertEquals(params.getBlockSize(), params2.getBlockSize()) ;
}
@Test public void store_params_11() {
String xs = "{ \"tdb.block_size\": 2048 }" ;
JsonObject x = JSON.parse(xs) ;
StoreParams paramsExpected = StoreParams.builder().blockSize(2048).build() ;
StoreParams paramsActual = StoreParamsCodec.decode(x) ;
assertEqualsStoreParams(paramsExpected,paramsActual) ;
}
@Test public void store_params_12() {
String xs = "{ \"tdb.file_mode\": \"direct\" , \"tdb.block_size\": 2048 }" ;
JsonObject x = JSON.parse(xs) ;
StoreParams paramsExpected = StoreParams.builder().blockSize(2048).fileMode(FileMode.direct).build() ;
StoreParams paramsActual = StoreParamsCodec.decode(x) ;
assertEqualsStoreParams(paramsExpected,paramsActual) ;
}
@Test public void store_params_13() {
String xs = "{ \"tdb.triple_indexes\" : [ \"POS\" , \"PSO\"] } " ;
JsonObject x = JSON.parse(xs) ;
StoreParams params = StoreParamsCodec.decode(x) ;
String[] expected = { "POS" , "PSO" } ;
assertArrayEquals(expected, params.getTripleIndexes()) ;
}
@Test(expected=TDBException.class)
public void store_params_14() {
String xs = "{ \"tdb.triples_indexes\" : [ \"POS\" , \"PSO\"] } " ; // Misspelt.
JsonObject x = JSON.parse(xs) ;
StoreParams params = StoreParamsCodec.decode(x) ;
String[] expected = { "POS" , "PSO" } ;
assertArrayEquals(expected, params.getTripleIndexes()) ;
}
// Check that setting gets recorded and propagated.
@Test public void store_params_20() {
StoreParams params = StoreParams.builder().blockReadCacheSize(0).build();
assertTrue(params.isSetBlockReadCacheSize()) ;
assertFalse(params.isSetBlockWriteCacheSize()) ;
}
@Test public void store_params_21() {
StoreParams params1 = StoreParams.builder().blockReadCacheSize(0).build();
assertTrue(params1.isSetBlockReadCacheSize()) ;
assertFalse(params1.isSetBlockWriteCacheSize()) ;
StoreParams params2 = StoreParams.builder(params1).blockWriteCacheSize(0).build();
assertTrue(params2.isSetBlockReadCacheSize()) ;
assertTrue(params2.isSetBlockWriteCacheSize()) ;
assertFalse(params2.isSetNodeMissCacheSize()) ;
}
// Modify
@Test public void store_params_22() {
StoreParams params1 = StoreParams.builder()
.blockReadCacheSize(0)
.blockWriteCacheSize(1)
.build();
StoreParams params2 = StoreParams.builder()
.blockReadCacheSize(5)
.build();
StoreParams params3 = StoreParamsBuilder.modify(params1, params2) ;
assertFalse(params2.isSetBlockWriteCacheSize()) ;
assertTrue(params3.isSetBlockReadCacheSize()) ;
assertTrue(params3.isSetBlockWriteCacheSize()) ;
assertEquals(5, params3.getBlockReadCacheSize().intValue()) ; // From params2
assertEquals(1, params3.getBlockWriteCacheSize().intValue()) ; // From params1, not params2(unset)
}
// --------
private static StoreParams roundTrip(StoreParams params) {
JsonObject obj = StoreParamsCodec.encodeToJson(params) ;
StoreParams params2 = StoreParamsCodec.decode(obj) ;
return params2 ;
}
private static void assertEqualsStoreParams(StoreParams params1, StoreParams params2) {
assertTrue(StoreParams.sameValues(params1, params2)) ;
}
}