// Copyright 2017 JanusGraph Authors // // Licensed 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.janusgraph.graphdb.berkeleyje; import org.janusgraph.core.JanusGraphException; import org.janusgraph.core.util.JanusGraphCleanup; import org.janusgraph.diskstorage.configuration.ConfigOption; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Preconditions; import org.janusgraph.BerkeleyStorageSetup; import org.janusgraph.diskstorage.berkeleyje.BerkeleyJEStoreManager; import org.janusgraph.diskstorage.berkeleyje.BerkeleyJEStoreManager.IsolationLevel; import org.janusgraph.diskstorage.configuration.ConfigElement; import org.janusgraph.diskstorage.configuration.ModifiableConfiguration; import org.janusgraph.diskstorage.configuration.WriteConfiguration; import org.janusgraph.graphdb.JanusGraphTest; import java.time.Duration; import java.time.temporal.ChronoUnit; import static org.junit.Assert.*; public class BerkeleyGraphTest extends JanusGraphTest { @Rule public TestName methodNameRule = new TestName(); private static final Logger log = LoggerFactory.getLogger(BerkeleyGraphTest.class); @Override public WriteConfiguration getConfiguration() { ModifiableConfiguration mcfg = BerkeleyStorageSetup.getBerkeleyJEConfiguration(); String methodName = methodNameRule.getMethodName(); if (methodName.equals("testConsistencyEnforcement")) { IsolationLevel iso = IsolationLevel.SERIALIZABLE; log.debug("Forcing isolation level {} for test method {}", iso, methodName); mcfg.set(BerkeleyJEStoreManager.ISOLATION_LEVEL, iso.toString()); } else { IsolationLevel iso = null; if (mcfg.has(BerkeleyJEStoreManager.ISOLATION_LEVEL)) { iso = ConfigOption.getEnumValue(mcfg.get(BerkeleyJEStoreManager.ISOLATION_LEVEL),IsolationLevel.class); } log.debug("Using isolation level {} (null means adapter default) for test method {}", iso, methodName); } return mcfg.getConfiguration(); } @Override public void testConsistencyEnforcement() { // Check that getConfiguration() explicitly set serializable isolation // This could be enforced with a JUnit assertion instead of a Precondition, // but a failure here indicates a problem in the test itself rather than the // system-under-test, so a Precondition seems more appropriate IsolationLevel effective = ConfigOption.getEnumValue(config.get(ConfigElement.getPath(BerkeleyJEStoreManager.ISOLATION_LEVEL), String.class),IsolationLevel.class); Preconditions.checkState(IsolationLevel.SERIALIZABLE.equals(effective)); super.testConsistencyEnforcement(); } @Override public void testConcurrentConsistencyEnforcement() { //Do nothing TODO: Figure out why this is failing in BerkeleyDB!! } @Test public void testIDBlockAllocationTimeout() { config.set("ids.authority.wait-time", Duration.of(0L, ChronoUnit.NANOS)); config.set("ids.renew-timeout", Duration.of(1L, ChronoUnit.MILLIS)); close(); JanusGraphCleanup.clear(graph); open(config); try { graph.addVertex(); fail(); } catch (JanusGraphException e) { } assertTrue(graph.isOpen()); close(); // must be able to close cleanly // Must be able to reopen open(config); assertEquals(0L, (long)graph.traversal().V().count().next()); } }