You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2017/10/03 19:34:08 UTC
[22/65] [abbrv] jena git commit: JENA-1397: Rename java packages
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTransactionLifecycle.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTransactionLifecycle.java b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTransactionLifecycle.java
new file mode 100644
index 0000000..ba73fa8
--- /dev/null
+++ b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTransactionLifecycle.java
@@ -0,0 +1,261 @@
+/*
+ * 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.dboe.transaction;
+
+import static org.junit.Assert.fail ;
+import org.junit.Test ;
+import org.apache.jena.dboe.transaction.txn.TransactionException;
+import org.apache.jena.query.ReadWrite ;
+
+/**
+ * Tests of transaction lifecycle in one JVM.
+ * Journal independent.
+ * Not testing recovery or writing to the journal.
+ */
+public class TestTransactionLifecycle extends AbstractTestTxn {
+ @Test public void txn_read_end() {
+ unit.begin(ReadWrite.READ);
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_read_end_end() {
+ unit.begin(ReadWrite.READ);
+ unit.end() ;
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_read_abort() {
+ unit.begin(ReadWrite.READ);
+ unit.abort() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_read_commit() {
+ unit.begin(ReadWrite.READ);
+ unit.commit() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_read_abort_end() {
+ unit.begin(ReadWrite.READ);
+ unit.abort() ;
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_read_commit_end() {
+ unit.begin(ReadWrite.READ);
+ unit.commit() ;
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_read_commit_abort() {
+ unit.begin(ReadWrite.READ);
+ unit.commit() ;
+ try { unit.abort() ; fail() ; }
+ catch (TransactionException ex) { /* Expected : can continue */ }
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_read_commit_commit() {
+ unit.begin(ReadWrite.READ);
+ unit.commit() ;
+ try { unit.commit() ; fail() ; }
+ catch (TransactionException ex) { /* Expected : can continue */ }
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_read_abort_commit() {
+ unit.begin(ReadWrite.READ);
+ unit.abort() ;
+ try { unit.commit() ; fail() ; }
+ catch (TransactionException ex) { /* Expected : can continue */ }
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_read_abort_abort() {
+ unit.begin(ReadWrite.READ);
+ unit.abort() ;
+ try { unit.abort() ; fail() ; }
+ catch (TransactionException ex) { /* Expected : can continue */ }
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test(expected=TransactionException.class)
+ public void txn_begin_read_begin_read() {
+ unit.begin(ReadWrite.READ);
+ unit.begin(ReadWrite.READ);
+ }
+
+ @Test(expected=TransactionException.class)
+ public void txn_begin_read_begin_write() {
+ unit.begin(ReadWrite.READ);
+ unit.begin(ReadWrite.WRITE);
+ }
+
+ @Test(expected=TransactionException.class)
+ public void txn_begin_write_begin_read() {
+ unit.begin(ReadWrite.WRITE);
+ unit.begin(ReadWrite.READ);
+ }
+
+ @Test(expected=TransactionException.class)
+ public void txn_begin_write_begin_write() {
+ unit.begin(ReadWrite.WRITE);
+ unit.begin(ReadWrite.WRITE);
+ }
+
+ @Test(expected=TransactionException.class)
+ public void txn_write_begin_end() {
+ unit.begin(ReadWrite.WRITE);
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_write_abort() {
+ unit.begin(ReadWrite.WRITE);
+ unit.abort() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_write_commit() {
+ unit.begin(ReadWrite.WRITE);
+ unit.commit() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_write_abort_end() {
+ unit.begin(ReadWrite.WRITE);
+ unit.abort() ;
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_write_abort_end_end() {
+ unit.begin(ReadWrite.WRITE);
+ unit.abort() ;
+ unit.end() ;
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_write_commit_end() {
+ unit.begin(ReadWrite.WRITE);
+ unit.commit() ;
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_write_commit_end_end() {
+ unit.begin(ReadWrite.WRITE);
+ unit.commit() ;
+ unit.end() ;
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_write_commit_abort() {
+ // commit-abort
+ unit.begin(ReadWrite.WRITE);
+ unit.commit() ;
+ try { unit.abort() ; fail() ; }
+ catch (TransactionException ex) { /* Expected : can continue */ }
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_write_commit_commit() {
+ // commit-commit
+ unit.begin(ReadWrite.WRITE);
+ unit.commit() ;
+ try { unit.commit() ; fail() ; }
+ catch (TransactionException ex) { /* Expected : can continue */ }
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_write_abort_commit() {
+ // abort-commit
+ unit.begin(ReadWrite.WRITE);
+ unit.abort() ;
+ try { unit.commit() ; fail() ; }
+ catch (TransactionException ex) { /* Expected : can continue */ }
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_write_abort_abort() {
+ // abort-abort
+ unit.begin(ReadWrite.WRITE);
+ unit.abort() ;
+ try { unit.abort() ; fail() ; }
+ catch (TransactionException ex) { /* Expected : can continue */ }
+ unit.end() ;
+ checkClear() ;
+ }
+
+ private void read() {
+ unit.begin(ReadWrite.READ);
+ unit.end() ;
+ checkClear() ;
+ }
+
+ private void write() {
+ unit.begin(ReadWrite.WRITE);
+ unit.commit() ;
+ unit.end() ;
+ checkClear() ;
+ }
+
+ @Test public void txn_read_read() {
+ read() ;
+ read() ;
+ }
+
+ @Test public void txn_write_read() {
+ write() ;
+ read() ;
+ }
+
+ @Test public void txn_read_write() {
+ read() ;
+ write() ;
+ }
+
+ @Test public void txn_write_write() {
+ write() ;
+ write() ;
+ }
+
+ @Test public void txn_www() {
+ write() ;
+ write() ;
+ write() ;
+ checkClear();
+ }
+
+}
+
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTransactionLifecycle2.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTransactionLifecycle2.java b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTransactionLifecycle2.java
new file mode 100644
index 0000000..6875ac4
--- /dev/null
+++ b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTransactionLifecycle2.java
@@ -0,0 +1,299 @@
+/*
+ * 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.dboe.transaction;
+
+import static org.junit.Assert.* ;
+
+import java.util.concurrent.atomic.AtomicReference ;
+
+import org.apache.jena.dboe.base.file.Location;
+import org.apache.jena.dboe.migrate.L;
+import org.apache.jena.dboe.transaction.txn.Transaction;
+import org.apache.jena.dboe.transaction.txn.TransactionCoordinator;
+import org.apache.jena.dboe.transaction.txn.TransactionException;
+import org.apache.jena.dboe.transaction.txn.journal.Journal;
+import org.apache.jena.query.ReadWrite ;
+import org.junit.After ;
+import org.junit.Before ;
+import org.junit.Test ;
+
+/**
+ * Details tests of the transaction lifecycle in one JVM
+ * including tests beyond the TransactionalComponentLifecycle
+ *
+ * Journal independent.
+ */
+public class TestTransactionLifecycle2 {
+ // org.junit.rules.ExternalResource ?
+ protected TransactionCoordinator txnMgr ;
+// protected TransInteger counter1 = new TransInteger(0) ;
+// protected TransInteger counter2 = new TransInteger(0) ;
+// protected TransMonitor monitor = new TransMonitor() ;
+
+ @Before public void setup() {
+ Journal jrnl = Journal.create(Location.mem()) ;
+ txnMgr = new TransactionCoordinator(jrnl) ;
+ txnMgr.start() ;
+ }
+
+ @After public void clearup() {
+ txnMgr.shutdown();
+ }
+
+ protected void checkClear() {
+ assertEquals(0, txnMgr.countActive()) ;
+ assertEquals(0, txnMgr.countBegin()-txnMgr.countFinished()) ;
+ }
+
+ @Test public void txn_direct_01() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.READ) ;
+ txn1.end();
+ checkClear() ;
+ }
+
+ @Test(expected=TransactionException.class)
+ public void txn_direct_02() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.WRITE) ;
+ txn1.end();
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_direct_03() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.WRITE) ;
+ txn1.commit() ;
+ txn1.end() ;
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_direct_04() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.WRITE) ;
+ // This tests the TransactionCoordinator
+ // but the TransactiolComponentLifecycle doesn't support multiple
+ // transactions per thread (use of ThreadLocals).
+ // To do that, the transaction object would be needed in all
+ // component API calls. Doable but intrusive.
+ Transaction txn2 = txnMgr.begin(ReadWrite.READ) ;
+ txn1.commit() ;
+ txn2.end() ;
+ txn1.end() ;
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_direct_05() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.WRITE) ;
+ txn1.prepare() ;
+ txn1.commit() ;
+ txn1.end() ;
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_direct_06() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.WRITE) ;
+ // txn1.prepare() ; Optional.
+ txn1.commit() ;
+ txn1.end() ;
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_overlap_WW() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.WRITE, false) ;
+ assertNotNull(txn1) ;
+
+ Transaction txn2 = txnMgr.begin(ReadWrite.WRITE, false) ;
+ assertNull(txn2) ; // Otherwise blocking.
+
+ txn1.commit();
+ txn1.end() ;
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_overlap_WR() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.WRITE, false) ;
+ assertNotNull(txn1) ;
+
+ Transaction txn2 = txnMgr.begin(ReadWrite.READ, false) ;
+ assertNotNull(txn2) ;
+
+ txn1.commit();
+ txn1.end() ;
+ txn2.end();
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_overlap_RW() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.READ, false) ;
+ assertNotNull(txn1) ;
+
+ Transaction txn2 = txnMgr.begin(ReadWrite.WRITE, false) ;
+ assertNotNull(txn2) ;
+ txn1.commit();
+ txn1.end() ;
+ txn2.abort();
+ txn2.end();
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_overlap_RR() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.READ, false) ;
+ assertNotNull(txn1) ;
+
+ Transaction txn2 = txnMgr.begin(ReadWrite.READ, false) ;
+ assertNotNull(txn2) ;
+
+ txn1.commit();
+ txn1.end() ;
+ txn2.end();
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_promote_1() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.READ) ;
+ assertNotNull(txn1) ;
+ boolean b = txn1.promote() ;
+ assertTrue(b) ;
+ assertEquals(ReadWrite.WRITE, txn1.getMode()) ;
+ txn1.commit() ;
+ txn1.end() ;
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_promote_2() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.WRITE) ;
+ boolean b = txn1.promote() ;
+ assertTrue(b) ;
+ b = txn1.promote() ;
+ assertTrue(b) ;
+ txn1.abort() ;
+ txn1.end() ;
+ checkClear() ;
+ }
+
+ @Test(expected=TransactionException.class)
+ public void txn_promote_3() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.READ) ;
+ boolean b = txn1.promote() ;
+ assertTrue(b) ;
+ b = txn1.promote() ;
+ assertTrue(b) ;
+ // Exception - now a writer
+ txn1.end() ;
+ checkClear() ;
+ }
+
+ //Not a @Test
+ public void txn_promote_deadlock() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.READ) ;
+ Transaction txn2 = txnMgr.begin(ReadWrite.WRITE) ;
+ // Deadlock.
+ // Promotion waits for the writer to decide whether it is commiting or not.
+ // This can't be done on one thread.
+ boolean b = txn1.promote() ;
+ assertFalse(b) ;
+ txn1.end() ;
+ txn2.commit();
+ txn2.end() ;
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_promote_thread_writer_1() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.READ) ;
+ L.syncOtherThread(()->{
+ Transaction txn2 = txnMgr.begin(ReadWrite.WRITE) ;
+ txn2.commit();
+ txn2.end() ;
+ }) ;
+
+ boolean b = txn1.promote() ;
+ assertFalse(b) ;
+ txn1.end() ;
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_promote_thread_writer_2() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.READ) ;
+ L.syncOtherThread(()->{
+ Transaction txn2 = txnMgr.begin(ReadWrite.WRITE) ;
+ txn2.abort();
+ txn2.end() ;
+ }) ;
+
+ boolean b = txn1.promote() ;
+ assertTrue(b) ;
+ // Now a writer.
+ txn1.commit();
+ txn1.end() ;
+ checkClear() ;
+ }
+
+ @Test
+ public void txn_promote_thread_writer_3() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.READ) ;
+ boolean b = txn1.promote() ;
+ assertTrue(b) ;
+ AtomicReference<Transaction> ref = new AtomicReference<>(txn1) ;
+ L.syncOtherThread(()->{
+ // Should fail.
+ Transaction txn2 = txnMgr.begin(ReadWrite.WRITE, false) ;
+ ref.set(txn2);
+ }) ;
+ assertNull(ref.get()) ;
+ txn1.abort() ;
+ txn1.end() ;
+ }
+
+ @Test
+ public void txn_promote_thread_writer_4() {
+ Transaction txn1 = txnMgr.begin(ReadWrite.READ) ;
+ boolean b = txn1.promote() ;
+ assertTrue(b) ;
+ AtomicReference<Transaction> ref = new AtomicReference<>(txn1) ;
+ L.syncOtherThread(()->{
+ // Should fail.
+ Transaction txn2 = txnMgr.begin(ReadWrite.WRITE, false) ;
+ ref.set(txn2);
+ }) ;
+ assertNull(ref.get()) ;
+ txn1.abort() ;
+ txn1.end() ;
+
+ L.syncOtherThread(()->{
+ // Should suceed
+ Transaction txn2 = txnMgr.begin(ReadWrite.WRITE, false) ;
+ ref.set(txn2);
+ txn2.abort() ;
+ txn2.end() ;
+ }) ;
+ assertNotNull(ref.get()) ;
+ checkClear() ;
+ }
+
+}
+
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnId.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnId.java b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnId.java
new file mode 100644
index 0000000..966d8de
--- /dev/null
+++ b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnId.java
@@ -0,0 +1,53 @@
+/*
+ * 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.dboe.transaction;
+
+import static org.junit.Assert.assertEquals ;
+import static org.junit.Assert.assertNotEquals ;
+import static org.junit.Assert.assertNotNull ;
+import static org.junit.Assert.assertNotSame ;
+
+import org.apache.jena.dboe.transaction.txn.TxnId;
+import org.apache.jena.dboe.transaction.txn.TxnIdFactory;
+import org.apache.jena.dboe.transaction.txn.TxnIdSimple;
+import org.junit.Test ;
+
+public class TestTxnId {
+ @Test public void txnId_1() {
+ TxnId id1 = TxnIdFactory.createSimple() ;
+ assertNotNull(id1) ;
+ }
+
+ @Test public void txnId_2() {
+ TxnId id1 = TxnIdFactory.createSimple() ;
+ TxnId id2 = TxnIdFactory.createSimple() ;
+ assertNotSame(id1, id2) ;
+ assertNotEquals(id1, id2) ;
+ }
+
+ @Test public void txnId_3() {
+ TxnId id1 = TxnIdFactory.createSimple() ;
+ TxnId id2 = TxnIdSimple.create(id1.bytes()) ;
+ assertNotSame(id1, id2) ;
+ assertEquals(id1, id2) ;
+ assertEquals(id1.name(), id2.name()) ;
+ }
+
+}
+
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnLib.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnLib.java b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnLib.java
new file mode 100644
index 0000000..9a6dc92
--- /dev/null
+++ b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnLib.java
@@ -0,0 +1,199 @@
+/*
+ * 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.dboe.transaction;
+
+import static org.junit.Assert.assertEquals ;
+import static org.junit.Assert.assertNotEquals ;
+import static org.junit.Assert.fail ;
+
+import org.apache.jena.dboe.jenax.Txn;
+import org.apache.jena.dboe.transaction.ThreadTxn;
+import org.apache.jena.query.ReadWrite ;
+import org.junit.Test ;
+
+public class TestTxnLib extends AbstractTestTxn {
+
+ @Test public void libTxn_1() {
+ long v1 = counter1.value() ;
+ long v2 = counter2.value() ;
+ assertEquals(0, v1) ;
+ assertEquals(0, v2) ;
+
+ Txn.executeRead(unit, () -> {
+ assertEquals(0, counter1.get()) ;
+ assertEquals(0, counter2.get()) ;
+ }) ;
+ }
+
+ @Test public void libTxn_2() {
+ assertEquals(0, counter1.value()) ;
+
+ Txn.executeWrite(unit, () -> {
+ counter1.inc() ;
+ assertEquals("In W, value()", 0, counter1.value()) ;
+ assertEquals("In W, get()",1, counter1.get()) ;
+ }) ;
+
+ assertEquals("Direct value()", 1, counter1.value()) ;
+ assertEquals("Direct get()", 1, counter1.get()) ;
+
+ Txn.executeRead(unit, () -> {
+ assertEquals("In R, value()", 1, counter1.get()) ;
+ assertEquals("In R, get()", 1, counter1.value()) ;
+ }) ;
+ }
+
+ @Test public void libTxn_3() {
+ Txn.executeRead(unit, () -> {
+ assertEquals("In R, value()", 0, counter2.get()) ;
+ assertEquals("In R, get()", 0, counter2.value()) ;
+ }) ;
+
+ Txn.executeWrite(unit, () -> {
+ counter2.inc() ;
+ assertEquals("In W, value()", 0, counter2.value()) ;
+ assertEquals("In W, get()",1, counter2.get()) ;
+ }) ;
+
+ assertEquals("Direct value()", 1, counter2.value()) ;
+ assertEquals("Direct get()", 1, counter2.get()) ;
+
+ Txn.executeRead(unit, () -> {
+ assertEquals("In R, value()", 1, counter2.get()) ;
+ assertEquals("In R, get()", 1, counter2.value()) ;
+ }) ;
+ }
+
+ @Test public void libTxn_4() {
+ long v1 = counter1.value() ;
+ long v2 = counter2.value() ;
+ assertEquals(0, v1) ;
+ assertEquals(0, v2) ;
+
+ //Txn.execWrite(unit, () -> {
+
+ unit.begin(ReadWrite.WRITE);
+ counter1.inc() ;
+ counter2.inc() ;
+ assertEquals("Counter out of step", counter1.get(), counter2.get());
+ assertNotEquals("Counter 1 can see wrong state", counter1.get(), counter1.value() ) ;
+ assertNotEquals("Counter 2 can see wrong state", counter2.get(), counter2.value() ) ;
+ counter2.inc() ;
+ assertNotEquals("Counter 1 and 2 should differ", counter1.get(), counter2.get() ) ;
+ unit.commit() ;
+ unit.end() ;
+ //}) ;
+ assertEquals("Component 1 inconsistent", 1, counter1.value()) ;
+ assertEquals("Component 2 inconsistent", 2, counter2.value()) ;
+
+ Txn.executeRead(unit, () -> {
+ assertEquals("Component 1 inconsistent (R)", 1, counter1.get()) ;
+ assertEquals("Component 2 inconsistent (R)", 2, counter2.get()) ;
+ }) ;
+ }
+
+ @Test public void libTxn_5() {
+ long x =
+ Txn.calculateRead(unit, () -> {
+ assertEquals("In R, value()", 0, counter2.get()) ;
+ assertEquals("In R, get()", 0, counter2.value()) ;
+ return counter2.get() ;
+ }) ;
+ assertEquals("Outside R", 0, x) ;
+ }
+
+ @Test public void libTxn_6() {
+ long x =
+ Txn.calculateWrite(unit, () -> {
+ counter2.inc() ;
+ assertEquals("In W, value()", 0, counter2.value()) ;
+ assertEquals("In W, get()",1, counter2.get()) ;
+ return counter2.get() ;
+ }) ;
+ assertEquals("Outside W",1, x) ;
+ }
+
+ @Test public void libTxn_7() {
+ long x1 =
+ Txn.calculateWrite(unit, () -> {
+ counter2.inc() ;
+ counter2.inc() ;
+ return counter2.get() ;
+ }) ;
+ long x2 = Txn.calculateRead(unit, () -> {
+ return counter2.get() ;
+ }) ;
+ assertEquals("After W and R",x1 , x2) ;
+ }
+
+ // Tests for thread transactions.
+
+ @Test public void libTxnThread_1() {
+ ThreadTxn t = ThreadTxn.threadTxnRead(unit, ()->{}) ;
+ t.run();
+ }
+
+ @Test public void libTxnThread_2() {
+ ThreadTxn t = ThreadTxn.threadTxnWrite(unit, ()-> fail("")) ;
+ }
+
+ @Test(expected=AssertionError.class)
+ public void libTxnThread_3() {
+ ThreadTxn t = ThreadTxn.threadTxnWrite(unit, ()-> fail("")) ;
+ t.run() ;
+ }
+
+ @Test public void libTxnThread_10() {
+ long x1 = counter1.get() ;
+ ThreadTxn t = ThreadTxn.threadTxnWrite(unit, ()->{ counter1.inc() ;}) ;
+ long x2 = counter1.get() ;
+ assertEquals("x2", x1, x2) ;
+ t.run() ;
+ long x3 = counter1.get() ;
+ assertEquals("x3", x1+1, x3) ;
+ }
+
+ @Test public void libTxnThread_11() {
+ long x1 = counter1.get() ;
+ Txn.executeWrite(unit, ()->{
+ counter1.inc();
+ // Read the "before" state
+ ThreadTxn t = ThreadTxn.threadTxnRead(unit, ()->{ long z1 = counter1.get() ; assertEquals("Thread read", x1, z1) ; }) ;
+ counter1.inc();
+ t.run();
+ }) ;
+ long x2 = counter1.get() ;
+ assertEquals("after", x1+2, x2) ;
+ }
+
+ @Test public void libTxnThread_12() {
+ long x1 = counter1.get() ;
+ ThreadTxn t = ThreadTxn.threadTxnRead(unit, () -> {
+ long z1 = counter1.get() ;
+ assertEquals("Thread", x1, z1) ;
+ }) ;
+ Txn.executeWrite(unit, ()->counter1.inc()) ;
+ t.run() ;
+ long x2 = counter1.get() ;
+ assertEquals("after", x1+1, x2) ;
+ }
+
+}
+
+
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnLib2.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnLib2.java b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnLib2.java
new file mode 100644
index 0000000..463f7f9
--- /dev/null
+++ b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnLib2.java
@@ -0,0 +1,66 @@
+/*
+ * 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.dboe.transaction;
+
+import org.apache.jena.atlas.lib.Pair ;
+import org.apache.jena.dboe.base.file.Location;
+import org.apache.jena.dboe.jenax.Txn;
+import org.apache.jena.dboe.transaction.txn.TransactionCoordinator;
+import org.junit.After ;
+import org.junit.Assert ;
+import org.junit.Before ;
+import org.junit.Test ;
+
+/** Unusual ways to do things.
+ * Rather than a TransactionalComponent,
+ * TransactionalInteger
+ */
+public class TestTxnLib2 extends Assert {
+ // With setup/teardown / not from AbstractTestTxn
+ private final long InitValue = 7 ;
+ TransactionalInteger integer ;
+
+ @Before public void setup() {
+ TransactionCoordinator coord = new TransactionCoordinator(Location.mem()) ;
+ integer = new TransactionalInteger(coord, InitValue) ;
+ coord.start() ;
+ }
+
+ @After public void clearup() {
+ integer.shutdown();
+ }
+
+ @Test public void libTxn_10() {
+ Txn.executeWrite(integer, integer::inc) ;
+ long x = Txn.calculateRead(integer, integer::get) ;
+ assertEquals(InitValue+1, x) ;
+ }
+
+ @Test public void libTxn_11() {
+ Pair<Long, Long> p = Txn.calculateWrite(integer, () -> {
+ integer.inc() ;
+ return Pair.create(integer.value(), integer.get()) ;
+ }) ;
+ assertEquals(InitValue, p.getLeft().longValue()) ;
+ assertEquals(InitValue+1, p.getRight().longValue()) ;
+ assertEquals(InitValue+1, integer.get()) ;
+ assertEquals(InitValue+1, integer.value()) ;
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnSwitching.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnSwitching.java b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnSwitching.java
new file mode 100644
index 0000000..b68fa7c
--- /dev/null
+++ b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TestTxnSwitching.java
@@ -0,0 +1,195 @@
+/*
+ * 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.dboe.transaction;
+
+import static org.junit.Assert.assertEquals ;
+import static org.junit.Assert.fail ;
+
+import org.apache.jena.dboe.base.file.Location;
+import org.apache.jena.dboe.jenax.Txn;
+import org.apache.jena.dboe.transaction.ThreadTxn;
+import org.apache.jena.dboe.transaction.TransInteger;
+import org.apache.jena.dboe.transaction.txn.*;
+import org.apache.jena.dboe.transaction.txn.journal.Journal;
+import org.apache.jena.query.ReadWrite ;
+import org.junit.After ;
+import org.junit.Before ;
+import org.junit.Test ;
+
+/** Tests of changing the thread state ... carefully */
+public class TestTxnSwitching {
+ TransInteger integer = new TransInteger(100) ;
+ Journal jrnl = Journal.create(Location.mem()) ;
+
+ //Transactional transactional = TransactionalFactory.create(jrnl, integer) ;
+ TransactionalBase transactional ;
+ TransactionCoordinator txnMgr = new TransactionCoordinator(jrnl) ;
+ {
+ txnMgr.add(integer) ;
+ transactional = new TransactionalBase(txnMgr) ;
+ txnMgr.start() ;
+ }
+
+
+ @Before public void setup() {
+ }
+
+ @After public void clearup() {
+ }
+
+ @Test public void txnSwitch_01() {
+ long z = integer.value() ;
+ transactional.begin(ReadWrite.WRITE);
+ integer.inc();
+
+ assertEquals(integer.value()+1, integer.get()) ;
+ assertEquals(z+1, integer.get()) ;
+
+ TransactionCoordinatorState txnState = transactional.detach() ;
+
+ assertEquals(integer.value(), integer.get()) ;
+ assertEquals(z, integer.get()) ;
+
+ transactional.attach(txnState);
+
+ assertEquals(integer.value()+1, integer.get()) ;
+ assertEquals(z+1, integer.get()) ;
+
+ transactional.commit() ;
+ transactional.end() ;
+ assertEquals(z+1, integer.get()) ;
+ assertEquals(z+1, integer.value()) ;
+ }
+
+ @Test public void txnSwitch_02() {
+ long z = integer.value() ;
+ Txn.executeWrite(transactional, ()->integer.inc());
+ assertEquals(z+1, integer.value()) ;
+
+
+ //Transaction txn = txnMgr.begin(ReadWrite.WRITE) ;
+ transactional.begin(ReadWrite.WRITE);
+ integer.inc();
+ assertEquals(z+2, integer.get()) ;
+ TransactionCoordinatorState txnState = transactional.detach() ;
+ // Can't transactional read.
+ try { integer.read() ; fail() ; } catch (TransactionException ex) {}
+
+ long z1 = Txn.calculateRead(transactional, ()->integer.get()) ;
+ assertEquals(z+1, z1) ;
+ transactional.attach(txnState) ;
+ integer.inc();
+ assertEquals(z+3, integer.get()) ;
+
+ ThreadTxn threadTxn = ThreadTxn.threadTxnRead(transactional, ()->assertEquals(z+1, integer.get())) ;
+ threadTxn.run() ;
+
+ transactional.commit() ;
+ transactional.end() ;
+ }
+
+ // As 02 but with Transaction txn = txnMgr.begin(ReadWrite.WRITE) ;
+ // and txn calls and integer calls. Not transactional calls but txnMgr calls.
+
+ @Test public void txnSwitch_03() {
+ long z = integer.value() ;
+ Txn.executeWrite(transactional, ()->integer.inc());
+ assertEquals(z+1, integer.value()) ;
+
+ Transaction txn = txnMgr.begin(ReadWrite.WRITE) ;
+ integer.inc();
+ assertEquals(z+2, integer.get()) ;
+ TransactionCoordinatorState txnState = txnMgr.detach(txn) ;
+
+ Transaction txnRead = txnMgr.begin(ReadWrite.READ) ;
+ assertEquals(z+1, integer.get()) ;
+ txnRead.end() ;
+
+ try { integer.read() ; fail() ; } catch (TransactionException ex) {}
+
+ txnMgr.attach(txnState);
+
+ integer.inc();
+ assertEquals(z+3, integer.get()) ;
+
+ ThreadTxn.threadTxnRead(transactional, ()->assertEquals(z+1, integer.get())).run();
+ txn.commit();
+ txn.end() ;
+ }
+
+ // Switch between read and write all on one thread.
+ @Test public void txnSwitch_04() {
+ long z = integer.value() ;
+
+ transactional.begin(ReadWrite.READ);
+ TransactionCoordinatorState txnStateR1 = transactional.detach() ;
+
+ ThreadTxn t1 = ThreadTxn.threadTxnRead(transactional, ()->assertEquals(z, integer.get() )) ;
+ ThreadTxn t2 = ThreadTxn.threadTxnRead(transactional, ()->assertEquals(z, integer.get() )) ;
+
+ transactional.begin(ReadWrite.WRITE);
+ integer.inc();
+
+ TransactionCoordinatorState txnStateW1 = transactional.detach() ;
+
+ // Currently, thread has no transaction.
+ long z1 = Txn.calculateRead(transactional, ()->integer.get() );
+ assertEquals(z, z1) ;
+
+ // Back to writer.
+ transactional.attach(txnStateW1) ;
+ integer.inc();
+ TransactionCoordinatorState txnStateW2 = transactional.detach() ;
+
+ try { integer.read() ; fail() ; } catch (TransactionException ex) {}
+ // To reader.
+ transactional.attach(txnStateR1) ;
+ assertEquals(z1, integer.read()) ;
+ t1.run() ;
+
+ // And the writer again.
+ TransactionCoordinatorState txnStateR2 = transactional.detach() ;
+ transactional.attach(txnStateW2) ;
+ integer.inc();
+ transactional.commit();
+ transactional.end() ;
+
+ t2.run() ;
+ transactional.attach(txnStateR2) ;
+ assertEquals(z1, integer.read()) ;
+ transactional.end() ;
+ }
+
+ // Some error cases.
+ @Test(expected=TransactionException.class)
+ public void txnSwitch_10() {
+ transactional.begin(ReadWrite.READ);
+ TransactionCoordinatorState txnState = transactional.detach() ;
+ transactional.attach(txnState);
+ transactional.attach(txnState);
+ }
+ @Test(expected=TransactionException.class)
+ public void txnSwitch_11() {
+ transactional.begin(ReadWrite.READ);
+ TransactionCoordinatorState txnState1 = transactional.detach() ;
+ TransactionCoordinatorState txnState2 = transactional.detach() ;
+ }
+
+}
+
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TransactionalInteger.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TransactionalInteger.java b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TransactionalInteger.java
new file mode 100644
index 0000000..d3f1e04
--- /dev/null
+++ b/jena-db/jena-dboe-transaction/src/test/java/org/apache/jena/dboe/transaction/TransactionalInteger.java
@@ -0,0 +1,61 @@
+/*
+ * 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.dboe.transaction;
+
+import org.apache.jena.dboe.transaction.TransInteger;
+import org.apache.jena.dboe.transaction.txn.TransactionCoordinator;
+import org.apache.jena.dboe.transaction.txn.TransactionalBase;
+
+/**
+ * A Transactional (unit of begin/commit) of a single integer component.
+ * Testing support. Use {@link TransInteger} for application code.
+ * @see TransInteger
+ */
+public class TransactionalInteger extends TransactionalBase {
+ final private TransInteger integer ;
+
+ public TransactionalInteger(TransactionCoordinator coord, long v) {
+ super(coord) ;
+ integer = new TransInteger(v) ;
+ coord.add(integer) ;
+ }
+
+ public void inc() {
+ integer.inc() ;
+ }
+
+ /** Return the current value.
+ * If inside a transaction, return the tarnsaction view of the value.
+ * If not in a transaction return the state value (effectively
+ * a fast read transaction).
+ */
+ public long get() {
+ return integer.get() ;
+ }
+
+ public void set(long v) {
+ integer.set(v) ;
+ }
+
+ /** Return the currently commited value */
+ public long value() {
+ return integer.value() ;
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/AbstractTestTxn.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/AbstractTestTxn.java b/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/AbstractTestTxn.java
deleted file mode 100644
index 31e7713..0000000
--- a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/AbstractTestTxn.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.seaborne.dboe.transaction;
-
-import static org.junit.Assert.assertEquals ;
-
-import java.util.Arrays ;
-import java.util.List ;
-
-import org.junit.After ;
-import org.junit.Before ;
-import org.seaborne.dboe.base.file.Location ;
-import org.seaborne.dboe.transaction.TransInteger ;
-import org.seaborne.dboe.transaction.TransMonitor ;
-import org.seaborne.dboe.transaction.Transactional ;
-import org.seaborne.dboe.transaction.txn.* ;
-import org.seaborne.dboe.transaction.txn.journal.Journal ;
-
-public abstract class AbstractTestTxn {
- protected TransactionCoordinator txnMgr ;
- protected TransInteger counter1 = new TransInteger(0) ;
- protected TransInteger counter2 = new TransInteger(0) ;
- protected TransMonitor monitor = new TransMonitor(ComponentId.allocLocal()) ;
- protected Transactional unit ;
-
- @Before public void setup() {
- Journal jrnl = Journal.create(Location.mem()) ;
- List<TransactionalComponent> cg = Arrays.asList
- (counter1, new TransactionalComponentWrapper(counter2), monitor) ;
- txnMgr = new TransactionCoordinator(jrnl, cg) ;
- unit = new TransactionalBase(txnMgr) ;
- txnMgr.start() ;
- }
-
- @After public void clearup() {
- txnMgr.shutdown();
- }
-
- protected void checkClear() {
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(0, txnMgr.countBegin()-txnMgr.countFinished()) ;
- assertEquals(0, txnMgr.countActiveReaders()) ;
- assertEquals(0, txnMgr.countActiveWriter()) ;
-
-
- }
-}
-
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TS_Transactions.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TS_Transactions.java b/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TS_Transactions.java
deleted file mode 100644
index 8c9a919..0000000
--- a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TS_Transactions.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.seaborne.dboe.transaction;
-
-import org.junit.runner.RunWith ;
-import org.junit.runners.Suite ;
-import org.junit.runners.Suite.SuiteClasses ;
-
-@RunWith(Suite.class)
-@SuiteClasses( {
- TestTxnId.class
- , TestJournal.class
- , TestStateMgrData.class
- , TestTransactionLifecycle.class
- , TestTransactionLifecycle2.class
- , TestTransactionCoordinator.class
- , TestTransactionCoordinatorControl.class
- , TestTxnLib.class
- , TestTxnLib2.class
- , TestThreadingTransactions.class
- , TestTxnSwitching.class
-
-
-})
-public class TS_Transactions {
-
-}
-
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestJournal.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestJournal.java b/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestJournal.java
deleted file mode 100644
index a00efb4..0000000
--- a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestJournal.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * 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.seaborne.dboe.transaction;
-
-import static org.junit.Assert.assertEquals ;
-import static org.junit.Assert.assertFalse ;
-import static org.junit.Assert.assertNotEquals ;
-import static org.junit.Assert.assertNotNull ;
-import static org.junit.Assert.assertTrue ;
-import static org.junit.Assert.fail ;
-
-import java.nio.ByteBuffer ;
-import java.util.Arrays ;
-import java.util.Iterator ;
-import java.util.List ;
-
-import org.apache.jena.atlas.lib.ByteBufferLib ;
-import org.junit.Test ;
-import org.seaborne.dboe.base.file.Location ;
-import org.seaborne.dboe.transaction.txn.ComponentId ;
-import org.seaborne.dboe.transaction.txn.ComponentIds ;
-import org.seaborne.dboe.transaction.txn.journal.Journal ;
-import org.seaborne.dboe.transaction.txn.journal.JournalEntry ;
-import org.seaborne.dboe.transaction.txn.journal.JournalEntryType ;
-
-/** Journal tests spearate from the transaction coordinator */
-public class TestJournal {
- // For testing recovery, we need something to recover!
- // See tests in TestRecovery in dboe-trans-data
-
- @Test public void journal_01() {
- Journal jrnl = Journal.create(Location.mem()) ;
- assertNotNull(jrnl) ;
- assertTrue(jrnl.isEmpty()) ;
- }
-
- @Test public void journal_02() {
- Journal jrnl = Journal.create(Location.mem()) ;
- assertNotNull(jrnl) ;
- JournalEntry e = JournalEntry.COMMIT ;
- jrnl.writeJournal(e) ;
- assertFalse(jrnl.isEmpty()) ;
- assertNotEquals(0, jrnl.position()) ;
- }
-
- @Test public void journal_03() {
- Journal jrnl = Journal.create(Location.mem()) ;
- assertNotNull(jrnl) ;
- jrnl.writeJournal(JournalEntry.COMMIT) ;
- assertNotEquals(0, jrnl.position()) ;
- JournalEntry e = jrnl.readJournal(0) ;
- check(JournalEntry.COMMIT, e) ;
- assertEquals(ComponentIds.idSystem, e.getComponentId());
- assertEquals(JournalEntryType.COMMIT, e.getType());
- check(JournalEntry.COMMIT, e) ;
- }
-
- @Test public void journal_04() {
- Journal jrnl = Journal.create(Location.mem()) ;
- jrnl.writeJournal(JournalEntry.COMMIT) ;
- jrnl.writeJournal(JournalEntry.ABORT) ;
- jrnl.writeJournal(JournalEntry.ABORT) ;
- jrnl.writeJournal(JournalEntry.COMMIT) ;
- assertFalse(jrnl.isEmpty()) ;
-
- Iterator<JournalEntry> iter = jrnl.entries(0) ;
-
- List<JournalEntry> expected = Arrays.asList(JournalEntry.COMMIT,
- JournalEntry.ABORT,
- JournalEntry.ABORT,
- JournalEntry.COMMIT) ;
- }
-
- @Test public void journal_05() {
- Journal jrnl = Journal.create(Location.mem()) ;
- jrnl.writeJournal(JournalEntry.COMMIT) ;
- jrnl.writeJournal(JournalEntry.ABORT) ;
- long x = jrnl.writeJournal(JournalEntry.COMMIT) ;
- jrnl.writeJournal(JournalEntry.COMMIT) ;
- assertFalse(jrnl.isEmpty()) ;
-
- Iterator<JournalEntry> iter = jrnl.entries(x) ;
-
- List<JournalEntry> expected = Arrays.asList(JournalEntry.COMMIT,
- JournalEntry.COMMIT) ;
- }
-
- @Test public void journal_06() {
- ByteBuffer bb = ByteBuffer.allocateDirect(100) ;
- ByteBufferLib.fill(bb, (byte)0XA5);
- Journal jrnl = Journal.create(Location.mem()) ;
- JournalEntry e = new JournalEntry(JournalEntryType.REDO, ComponentId.allocLocal(), bb) ;
- jrnl.writeJournal(e) ;
- jrnl.sync() ;
- JournalEntry e2 = jrnl.readJournal(0) ;
- check(e, e2);
- }
-
- @Test public void journal_07() {
- ByteBuffer bb = ByteBuffer.allocateDirect(100) ;
- ByteBufferLib.fill(bb, (byte)0XA5);
- Journal jrnl = Journal.create(Location.mem()) ;
- JournalEntry e = new JournalEntry(JournalEntryType.REDO, ComponentId.allocLocal(), bb) ;
-
- jrnl.writeJournal(JournalEntry.COMMIT) ;
- long locn = jrnl.position() ;
- jrnl.writeJournal(e) ;
-
- assertNotEquals(0, locn);
- jrnl.sync() ;
- JournalEntry e2 = jrnl.readJournal(locn) ;
- check(e, e2);
- }
-
- private void check(List<JournalEntry> expected, Iterator<JournalEntry> iter) {
- Iterator<JournalEntry> iter2 = expected.iterator() ;
- for(;;) {
- if ( ! iter.hasNext() || ! iter2.hasNext() )
- break ;
- check(iter2.next(), iter.next()) ;
- }
- if ( iter.hasNext() )
- fail("Journal iterator longer") ;
- if ( iter2.hasNext() )
- fail("Expected iterator longer") ;
- }
-
- private void check(JournalEntry expected, JournalEntry actual) {
- assertEquals(expected.getType(), actual.getType()) ;
- assertEquals(expected.getComponentId(), actual.getComponentId()) ;
- assertEquals(expected.getByteBuffer(), actual.getByteBuffer()) ;
- }
-}
-
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestStateMgrData.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestStateMgrData.java b/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestStateMgrData.java
deleted file mode 100644
index d2e43c7..0000000
--- a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestStateMgrData.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * 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.seaborne.dboe.transaction;
-import static org.junit.Assert.* ;
-
-import java.nio.ByteBuffer ;
-
-import org.junit.Test ;
-import org.seaborne.dboe.base.file.BufferChannel ;
-import org.seaborne.dboe.base.file.FileFactory ;
-import org.seaborne.dboe.transaction.txn.StateMgrDataIdx ;
-
-public class TestStateMgrData {
-
- @Test public void state_data_01() {
- BufferChannel x = FileFactory.createBufferChannelMem() ;
- long[] data = {2,3} ;
- StateMgrDataIdx sm = new StateMgrDataIdx(x, data) ;
- assertEquals(data.length, sm.getData().length) ;
- assertEquals(2L, sm.get(0)) ;
- assertEquals(3L, sm.get(1)) ;
- // Test initial state written
- ByteBuffer bb = ByteBuffer.allocate(2*Long.BYTES) ;
- x.read(bb, 0) ;
- assertEquals(2L, bb.getLong(0)) ;
- assertEquals(3L, bb.getLong(Long.BYTES)) ;
- }
-
- @Test public void state_data_02() {
- BufferChannel x = FileFactory.createBufferChannelMem() ;
- long[] data = {2,3} ;
- StateMgrDataIdx sm = new StateMgrDataIdx(x, data) ;
- sm.writeState();
- sm.set(1, 99L);
- sm.writeState();
- ByteBuffer bb = ByteBuffer.allocate(2*Long.BYTES) ;
- x.read(bb, 0) ;
- assertEquals(99L, bb.getLong(Long.BYTES)) ;
- }
-
- @Test public void state_data_03() {
- BufferChannel x = FileFactory.createBufferChannelMem() ;
- {
- ByteBuffer bb = ByteBuffer.allocate(Long.BYTES) ;
- bb.putLong(0, -8888) ;
- bb.rewind();
- x.write(bb) ;
- bb.putLong(0, -1234) ;
- bb.rewind();
- x.write(bb) ;
- x.sync();
- }
- long[] data = {2,3} ;
- StateMgrDataIdx sm = new StateMgrDataIdx(x, data) ;
- assertEquals(-8888L, sm.get(0)) ;
- assertEquals(-1234L, sm.get(1)) ;
- }
-
-}
-
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestThreadingTransactions.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestThreadingTransactions.java b/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestThreadingTransactions.java
deleted file mode 100644
index 2805359..0000000
--- a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestThreadingTransactions.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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.seaborne.dboe.transaction;
-
-import java.util.concurrent.Semaphore ;
-
-import org.apache.jena.query.ReadWrite ;
-import org.junit.After ;
-import org.junit.Assert ;
-import org.junit.Before ;
-import org.junit.Test ;
-import org.seaborne.dboe.base.file.Location ;
-import org.seaborne.dboe.jenax.Txn ;
-import org.seaborne.dboe.transaction.txn.TransactionCoordinator ;
-
-public class TestThreadingTransactions {
- static final long InitValue = 3 ;
- private TransactionalInteger transInt ;
-
- @Before public void init() {
- TransactionCoordinator coord = new TransactionCoordinator(Location.mem()) ;
- transInt = new TransactionalInteger(coord, InitValue) ;
- coord.start();
- }
-
- @After public void after() {
- transInt.getTxnMgr().shutdown();
- }
-
- // Read synchronously in a transaction.
- void readTxn(String label, TransactionalInteger trans, long expected) {
- Txn.executeRead(trans, () -> {
- read(label, trans, expected) ;
- }) ;
- }
-
- void read(String label, TransactionalInteger trans, long expected) {
- long x = trans.get() ;
- Assert.assertEquals(label, expected, x);
- }
-
- ThreadTxn threadRead(String label, TransactionalInteger trans, long expectedValue) {
- return ThreadTxn.threadTxnRead(trans, ()->{
- read(label, trans, expectedValue) ;
- }) ;
- }
-
- @Test public void threadTrans_01() {
- transInt.begin(ReadWrite.READ) ;
- read("[01]", transInt, InitValue) ;
- transInt.end();
- }
-
- @Test public void threadTrans_02() {
- transInt.begin(ReadWrite.READ) ;
- threadRead("[02]", transInt, InitValue).run() ;
- transInt.end();
- }
-
- @Test public void threadTrans_03() {
- Semaphore semaBefore = new Semaphore(0, true) ;
- Semaphore semaAfter = new Semaphore(0, true) ;
- ThreadTxn async1 = threadRead("[03/1]", transInt, InitValue);
- ThreadTxn async2 = threadRead("[03/2]", transInt, InitValue);
-
- transInt.begin(ReadWrite.WRITE) ;
- read("[03/3]", transInt, InitValue) ;
- transInt.inc();
- read("[03/4]", transInt, InitValue+1) ;
-
- async1.run() ;
-
- threadRead("[03/5]", transInt, InitValue) ;
-
- transInt.commit();
- transInt.end();
- async2.run();
- readTxn("[03/6]", transInt, InitValue+1) ;
- }
-
- @Test public void threadTrans_04() {
- Semaphore semaBefore1 = new Semaphore(0, true) ;
- Semaphore semaBefore2 = new Semaphore(0, true) ;
- Semaphore semaAfter = new Semaphore(0, true) ;
-
- ThreadTxn async1 = threadRead("[04/1]", transInt, InitValue);
- ThreadTxn async2 = threadRead("[04/2]", transInt, InitValue);
- ThreadTxn async3 = threadRead("[04/3]", transInt, InitValue);
-
- Txn.executeWrite(transInt, transInt::inc);
-
- ThreadTxn async4 = threadRead("[04/3]", transInt, InitValue+1);
- async1.run() ;
-
- Txn.executeWrite(transInt, transInt::inc); // ++
- async2.run() ;
- async4.run() ;
-
- Txn.executeWrite(transInt, transInt::inc); // ++
- async3.run() ;
-
- readTxn("[04/4]", transInt, InitValue+3) ;
- }
-}
-
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionCoordinator.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionCoordinator.java b/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionCoordinator.java
deleted file mode 100644
index 008660f..0000000
--- a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionCoordinator.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * 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.seaborne.dboe.transaction;
-
-import static org.junit.Assert.assertEquals ;
-
-import org.apache.jena.query.ReadWrite ;
-import org.junit.Test ;
-
-public class TestTransactionCoordinator extends AbstractTestTxn {
- @Test public void txn_coord_read_1() {
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(0, txnMgr.countFinished()) ;
- assertEquals(0, txnMgr.countBegin()) ;
- assertEquals(0, txnMgr.countBeginRead()) ;
- assertEquals(0, txnMgr.countBeginWrite()) ;
- assertEquals(0, txnMgr.countActiveReaders()) ;
- assertEquals(0, txnMgr.countActiveWriter()) ;
-
- unit.begin(ReadWrite.READ);
-
- assertEquals(1, txnMgr.countActive()) ;
- assertEquals(0, txnMgr.countFinished()) ;
- assertEquals(1, txnMgr.countBegin()) ;
- assertEquals(1, txnMgr.countBeginRead()) ;
- assertEquals(0, txnMgr.countBeginWrite()) ;
-
- assertEquals(1, txnMgr.countActiveReaders()) ;
- assertEquals(0, txnMgr.countActiveWriter()) ;
-
- unit.end() ;
-
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(1, txnMgr.countBeginRead()) ;
- assertEquals(0, txnMgr.countBeginWrite()) ;
- assertEquals(1, txnMgr.countFinished()) ;
- assertEquals(1, txnMgr.countBegin()) ;
- assertEquals(0, txnMgr.countActiveReaders()) ;
- assertEquals(0, txnMgr.countActiveWriter()) ;
- }
-
- @Test public void txn_coord_read_2() {
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(0, txnMgr.countFinished()) ;
- assertEquals(0, txnMgr.countBegin()) ;
- assertEquals(0, txnMgr.countBeginRead()) ;
- assertEquals(0, txnMgr.countBeginWrite()) ;
-
- unit.begin(ReadWrite.READ);
-
- assertEquals(1, txnMgr.countActive()) ;
- assertEquals(0, txnMgr.countFinished()) ;
- assertEquals(1, txnMgr.countBegin()) ;
- assertEquals(1, txnMgr.countBeginRead()) ;
- assertEquals(0, txnMgr.countBeginWrite()) ;
-
- unit.commit() ;
-
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(1, txnMgr.countBeginRead()) ;
- assertEquals(0, txnMgr.countBeginWrite()) ;
- assertEquals(1, txnMgr.countFinished()) ;
- assertEquals(1, txnMgr.countBegin()) ;
-
- unit.end() ;
-
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(1, txnMgr.countBeginRead()) ;
- assertEquals(0, txnMgr.countBeginWrite()) ;
- assertEquals(1, txnMgr.countFinished()) ;
- assertEquals(1, txnMgr.countBegin()) ;
- }
-
- @Test public void txn_coord_write_1() {
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(0, txnMgr.countFinished()) ;
- assertEquals(0, txnMgr.countBegin()) ;
- assertEquals(0, txnMgr.countBeginRead()) ;
- assertEquals(0, txnMgr.countBeginWrite()) ;
-
- assertEquals(0, txnMgr.countActiveReaders()) ;
- assertEquals(0, txnMgr.countActiveWriter()) ;
-
-
- unit.begin(ReadWrite.WRITE);
-
- assertEquals(1, txnMgr.countActive()) ;
- assertEquals(0, txnMgr.countFinished()) ;
- assertEquals(1, txnMgr.countBegin()) ;
- assertEquals(0, txnMgr.countBeginRead()) ;
- assertEquals(1, txnMgr.countBeginWrite()) ;
-
- assertEquals(0, txnMgr.countActiveReaders()) ;
- assertEquals(1, txnMgr.countActiveWriter()) ;
-
- unit.commit() ;
-
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(1, txnMgr.countFinished()) ;
- assertEquals(1, txnMgr.countBegin()) ;
- assertEquals(0, txnMgr.countBeginRead()) ;
- assertEquals(1, txnMgr.countBeginWrite()) ;
-
- assertEquals(0, txnMgr.countActiveReaders()) ;
- assertEquals(0, txnMgr.countActiveWriter()) ;
-
- unit.end() ;
-
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(1, txnMgr.countFinished()) ;
- assertEquals(1, txnMgr.countBegin()) ;
- assertEquals(0, txnMgr.countBeginRead()) ;
- assertEquals(1, txnMgr.countBeginWrite()) ;
-
- assertEquals(0, txnMgr.countActiveReaders()) ;
- assertEquals(0, txnMgr.countActiveWriter()) ;
- }
-
- @Test public void txn_coord_write_2() {
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(0, txnMgr.countFinished()) ;
- assertEquals(0, txnMgr.countBegin()) ;
- assertEquals(0, txnMgr.countBeginRead()) ;
- assertEquals(0, txnMgr.countBeginWrite()) ;
- assertEquals(0, txnMgr.countActiveReaders()) ;
- assertEquals(0, txnMgr.countActiveWriter()) ;
-
- unit.begin(ReadWrite.WRITE);
-
- assertEquals(1, txnMgr.countActive()) ;
- assertEquals(0, txnMgr.countFinished()) ;
- assertEquals(1, txnMgr.countBegin()) ;
- assertEquals(0, txnMgr.countBeginRead()) ;
- assertEquals(1, txnMgr.countBeginWrite()) ;
-
- assertEquals(0, txnMgr.countActiveReaders()) ;
- assertEquals(1, txnMgr.countActiveWriter()) ;
-
- unit.abort() ;
-
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(1, txnMgr.countFinished()) ;
- assertEquals(1, txnMgr.countBegin()) ;
- assertEquals(0, txnMgr.countBeginRead()) ;
- assertEquals(1, txnMgr.countBeginWrite()) ;
-
- assertEquals(0, txnMgr.countActiveReaders()) ;
- assertEquals(0, txnMgr.countActiveWriter()) ;
-
- unit.end() ;
-
- assertEquals(0, txnMgr.countActive()) ;
- assertEquals(1, txnMgr.countFinished()) ;
- assertEquals(1, txnMgr.countBegin()) ;
- assertEquals(0, txnMgr.countBeginRead()) ;
- assertEquals(1, txnMgr.countBeginWrite()) ;
-
- assertEquals(0, txnMgr.countActiveReaders()) ;
- assertEquals(0, txnMgr.countActiveWriter()) ;
- }
-}
-
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionCoordinatorControl.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionCoordinatorControl.java b/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionCoordinatorControl.java
deleted file mode 100644
index b87d7a7..0000000
--- a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionCoordinatorControl.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * 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.seaborne.dboe.transaction;
-
-import static org.junit.Assert.assertEquals ;
-import static org.junit.Assert.assertFalse ;
-import static org.junit.Assert.assertNotNull ;
-import static org.junit.Assert.assertNull ;
-import static org.junit.Assert.assertTrue ;
-
-import java.util.concurrent.Semaphore ;
-import java.util.concurrent.atomic.AtomicInteger ;
-
-import org.apache.jena.query.ReadWrite ;
-import org.junit.After ;
-import org.junit.Before ;
-import org.junit.Test ;
-import org.seaborne.dboe.base.file.Location ;
-import org.seaborne.dboe.jenax.Txn ;
-import org.seaborne.dboe.migrate.L ;
-import org.seaborne.dboe.transaction.txn.Transaction ;
-import org.seaborne.dboe.transaction.txn.TransactionCoordinator ;
-import org.seaborne.dboe.transaction.txn.TransactionException ;
-import org.seaborne.dboe.transaction.txn.TransactionalBase ;
-
-public class TestTransactionCoordinatorControl {
- // The problem with these tests is the need for Lib.sleep as a way to ensure
- // async threads run if they can. And we are sometimes testing for "they can't".
-
- static final long InitValue = 3 ;
- private TransactionCoordinator txnMgr ;
- protected Transactional unit ;
-
- @Before public void init() {
- txnMgr = new TransactionCoordinator(Location.mem()) ;
- unit = new TransactionalBase(txnMgr) ;
- txnMgr.start();
- }
-
- @After public void after() {
- txnMgr.shutdown();
- }
-
-
- @Test public void txn_coord_disable_writers_1() {
- AtomicInteger counter1 = new AtomicInteger(0) ;
- AtomicInteger counter2 = new AtomicInteger(0) ;
-
- txnMgr.blockWriters();
- ThreadTxn threadTxn1 = ThreadTxn.threadTxnRead(unit, ()->counter1.incrementAndGet()) ;
- threadTxn1.run() ;
- assertEquals(1, counter1.get()) ;
- }
-
- @Test public void txn_coord_disable_writers_2() {
- txnMgr.blockWriters();
- Transaction txn = L.syncCallThread(()->txnMgr.begin(ReadWrite.WRITE, false)) ;
- assertNull(txn) ;
- txnMgr.enableWriters();
- Transaction txn1 = L.syncCallThread(()->txnMgr.begin(ReadWrite.WRITE, false)) ;
- assertNotNull(txn1) ;
- }
-
- @Test public void txn_coord_disable_writers_3() {
- txnMgr.blockWriters();
- Transaction txn = L.syncCallThread(()->txnMgr.begin(ReadWrite.READ, false)) ;
- assertNotNull(txn) ;
- txnMgr.enableWriters();
- Transaction txn1 = L.syncCallThread(()->txnMgr.begin(ReadWrite.WRITE, false)) ;
- assertNotNull(txn1) ;
- Transaction txn2 = L.syncCallThread(()->txnMgr.begin(ReadWrite.READ, false)) ;
- assertNotNull(txn2) ;
- }
-
- @Test(expected=TransactionException.class)
- public void txn_coord_disable_writers_4() {
- txnMgr.blockWriters();
- txnMgr.enableWriters();
- txnMgr.enableWriters();
- }
-
- @Test
- public void txn_coord_disable_writers_() {
- txnMgr.blockWriters();
- boolean b = txnMgr.tryBlockWriters() ;
- assertFalse(b) ;
- txnMgr.enableWriters();
- }
-
- @Test public void txn_coord_exclusive_1() {
- txnMgr.startExclusiveMode();
- L.syncOtherThread(()->{
- Transaction txn1 = txnMgr.begin(ReadWrite.WRITE, false) ;
- assertNull(txn1) ;
- Transaction txn2 = txnMgr.begin(ReadWrite.READ, false) ;
- assertNull(txn2) ;
- }) ;
-
- txnMgr.finishExclusiveMode();
- L.syncOtherThread(()->{
- Transaction txn1 = txnMgr.begin(ReadWrite.WRITE, false) ;
- assertNotNull(txn1) ;
- Transaction txn2 = txnMgr.begin(ReadWrite.READ, false) ;
- assertNotNull(txn2) ;
- }) ;
- }
-
- @Test public void txn_coord_exclusive_2() {
- AtomicInteger counter1 = new AtomicInteger(0) ;
- Semaphore finalSema = new Semaphore(0) ;
- ThreadTxn ttxn = ThreadTxn.threadTxnWrite(unit, ()->{
- counter1.incrementAndGet() ;
- }) ;
- boolean b = txnMgr.tryExclusiveMode(false);
- assertFalse(b) ;
- assertEquals(0, counter1.get()) ;
- ttxn.run(); // Now run thread
- assertEquals(1, counter1.get()) ;
- Txn.executeWrite(unit, ()->{});
- b = txnMgr.tryExclusiveMode(false);
- assertTrue(b) ;
- }
-
-
-}
-
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionLifecycle.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionLifecycle.java b/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionLifecycle.java
deleted file mode 100644
index a77a000..0000000
--- a/jena-db/jena-dboe-transaction/src/test/java/org/seaborne/dboe/transaction/TestTransactionLifecycle.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * 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.seaborne.dboe.transaction;
-
-import static org.junit.Assert.fail ;
-import org.junit.Test ;
-import org.seaborne.dboe.transaction.txn.TransactionException ;
-
-import org.apache.jena.query.ReadWrite ;
-
-/**
- * Tests of transaction lifecycle in one JVM.
- * Journal independent.
- * Not testing recovery or writing to the journal.
- */
-public class TestTransactionLifecycle extends AbstractTestTxn {
- @Test public void txn_read_end() {
- unit.begin(ReadWrite.READ);
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_read_end_end() {
- unit.begin(ReadWrite.READ);
- unit.end() ;
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_read_abort() {
- unit.begin(ReadWrite.READ);
- unit.abort() ;
- checkClear() ;
- }
-
- @Test public void txn_read_commit() {
- unit.begin(ReadWrite.READ);
- unit.commit() ;
- checkClear() ;
- }
-
- @Test public void txn_read_abort_end() {
- unit.begin(ReadWrite.READ);
- unit.abort() ;
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_read_commit_end() {
- unit.begin(ReadWrite.READ);
- unit.commit() ;
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_read_commit_abort() {
- unit.begin(ReadWrite.READ);
- unit.commit() ;
- try { unit.abort() ; fail() ; }
- catch (TransactionException ex) { /* Expected : can continue */ }
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_read_commit_commit() {
- unit.begin(ReadWrite.READ);
- unit.commit() ;
- try { unit.commit() ; fail() ; }
- catch (TransactionException ex) { /* Expected : can continue */ }
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_read_abort_commit() {
- unit.begin(ReadWrite.READ);
- unit.abort() ;
- try { unit.commit() ; fail() ; }
- catch (TransactionException ex) { /* Expected : can continue */ }
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_read_abort_abort() {
- unit.begin(ReadWrite.READ);
- unit.abort() ;
- try { unit.abort() ; fail() ; }
- catch (TransactionException ex) { /* Expected : can continue */ }
- unit.end() ;
- checkClear() ;
- }
-
- @Test(expected=TransactionException.class)
- public void txn_begin_read_begin_read() {
- unit.begin(ReadWrite.READ);
- unit.begin(ReadWrite.READ);
- }
-
- @Test(expected=TransactionException.class)
- public void txn_begin_read_begin_write() {
- unit.begin(ReadWrite.READ);
- unit.begin(ReadWrite.WRITE);
- }
-
- @Test(expected=TransactionException.class)
- public void txn_begin_write_begin_read() {
- unit.begin(ReadWrite.WRITE);
- unit.begin(ReadWrite.READ);
- }
-
- @Test(expected=TransactionException.class)
- public void txn_begin_write_begin_write() {
- unit.begin(ReadWrite.WRITE);
- unit.begin(ReadWrite.WRITE);
- }
-
- @Test(expected=TransactionException.class)
- public void txn_write_begin_end() {
- unit.begin(ReadWrite.WRITE);
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_write_abort() {
- unit.begin(ReadWrite.WRITE);
- unit.abort() ;
- checkClear() ;
- }
-
- @Test public void txn_write_commit() {
- unit.begin(ReadWrite.WRITE);
- unit.commit() ;
- checkClear() ;
- }
-
- @Test public void txn_write_abort_end() {
- unit.begin(ReadWrite.WRITE);
- unit.abort() ;
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_write_abort_end_end() {
- unit.begin(ReadWrite.WRITE);
- unit.abort() ;
- unit.end() ;
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_write_commit_end() {
- unit.begin(ReadWrite.WRITE);
- unit.commit() ;
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_write_commit_end_end() {
- unit.begin(ReadWrite.WRITE);
- unit.commit() ;
- unit.end() ;
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_write_commit_abort() {
- // commit-abort
- unit.begin(ReadWrite.WRITE);
- unit.commit() ;
- try { unit.abort() ; fail() ; }
- catch (TransactionException ex) { /* Expected : can continue */ }
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_write_commit_commit() {
- // commit-commit
- unit.begin(ReadWrite.WRITE);
- unit.commit() ;
- try { unit.commit() ; fail() ; }
- catch (TransactionException ex) { /* Expected : can continue */ }
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_write_abort_commit() {
- // abort-commit
- unit.begin(ReadWrite.WRITE);
- unit.abort() ;
- try { unit.commit() ; fail() ; }
- catch (TransactionException ex) { /* Expected : can continue */ }
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_write_abort_abort() {
- // abort-abort
- unit.begin(ReadWrite.WRITE);
- unit.abort() ;
- try { unit.abort() ; fail() ; }
- catch (TransactionException ex) { /* Expected : can continue */ }
- unit.end() ;
- checkClear() ;
- }
-
- private void read() {
- unit.begin(ReadWrite.READ);
- unit.end() ;
- checkClear() ;
- }
-
- private void write() {
- unit.begin(ReadWrite.WRITE);
- unit.commit() ;
- unit.end() ;
- checkClear() ;
- }
-
- @Test public void txn_read_read() {
- read() ;
- read() ;
- }
-
- @Test public void txn_write_read() {
- write() ;
- read() ;
- }
-
- @Test public void txn_read_write() {
- read() ;
- write() ;
- }
-
- @Test public void txn_write_write() {
- write() ;
- write() ;
- }
-
- @Test public void txn_www() {
- write() ;
- write() ;
- write() ;
- checkClear();
- }
-
-}
-