summaryrefslogtreecommitdiff
path: root/src/test/java/com/amazon
diff options
context:
space:
mode:
authorBrian S. O'Neill <bronee@gmail.com>2008-01-25 19:56:16 +0000
committerBrian S. O'Neill <bronee@gmail.com>2008-01-25 19:56:16 +0000
commitfc6fee90e783c0c945f3a3b2e03157c4e58e5676 (patch)
tree9634ec5fe2cbc0046e79dd44aff9a8fedb4d4cbb /src/test/java/com/amazon
parent7cf1183a47e09bfbd704ba94033d0d30ced7e11b (diff)
Add transaction detach/attach methods.
Diffstat (limited to 'src/test/java/com/amazon')
-rw-r--r--src/test/java/com/amazon/carbonado/repo/toy/ToyTransaction.java6
-rw-r--r--src/test/java/com/amazon/carbonado/spi/TestTransactionManager.java156
2 files changed, 162 insertions, 0 deletions
diff --git a/src/test/java/com/amazon/carbonado/repo/toy/ToyTransaction.java b/src/test/java/com/amazon/carbonado/repo/toy/ToyTransaction.java
index c16d1f1..7188e57 100644
--- a/src/test/java/com/amazon/carbonado/repo/toy/ToyTransaction.java
+++ b/src/test/java/com/amazon/carbonado/repo/toy/ToyTransaction.java
@@ -48,4 +48,10 @@ public class ToyTransaction implements Transaction {
public IsolationLevel getIsolationLevel() {
throw new UnsupportedOperationException();
}
+
+ public void detach() {
+ }
+
+ public void attach() {
+ }
}
diff --git a/src/test/java/com/amazon/carbonado/spi/TestTransactionManager.java b/src/test/java/com/amazon/carbonado/spi/TestTransactionManager.java
new file mode 100644
index 0000000..8747424
--- /dev/null
+++ b/src/test/java/com/amazon/carbonado/spi/TestTransactionManager.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2008 Amazon Technologies, Inc. or its affiliates.
+ * Amazon, Amazon.com and Carbonado are trademarks or registered trademarks
+ * of Amazon Technologies, Inc. or its affiliates. All rights reserved.
+ *
+ * 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 com.amazon.carbonado.spi;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ExecutorService;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import com.amazon.carbonado.IsolationLevel;
+import com.amazon.carbonado.Transaction;
+
+/**
+ *
+ *
+ * @author Brian S O'Neill
+ */
+public class TestTransactionManager extends TestCase {
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static TestSuite suite() {
+ return new TestSuite(TestTransactionManager.class);
+ }
+
+ TM mTxnMgr;
+
+ public TestTransactionManager(String name) {
+ super(name);
+ }
+
+ protected void setUp() {
+ mTxnMgr = new TM();
+ }
+
+ public void testAttachDetach() throws Exception {
+ Transaction txn = mTxnMgr.localScope().enter(null);
+
+ // This batch of tests just ensures no IllegalStateExceptions are thrown.
+ {
+ // Should do nothing.
+ txn.attach();
+ // Should detach.
+ txn.detach();
+ // Should do nothing.
+ txn.detach();
+ // Should attach.
+ txn.attach();
+ }
+
+ // Set up for multi-threaded tests.
+
+ ExecutorService es = Executors.newSingleThreadExecutor();
+
+ Transaction txn2 = es.submit(new Callable<Transaction>() {
+ public Transaction call() {
+ return mTxnMgr.localScope().enter(null);
+ }
+ }).get();
+
+ try {
+ txn2.attach();
+ fail();
+ } catch (IllegalStateException e) {
+ }
+
+ try {
+ txn2.detach();
+ fail();
+ } catch (IllegalStateException e) {
+ }
+
+ txn.detach();
+
+ txn2.attach();
+ txn2.detach();
+ txn2.attach();
+
+ try {
+ txn.attach();
+ fail();
+ } catch (IllegalStateException e) {
+ }
+
+ try {
+ txn.detach();
+ fail();
+ } catch (IllegalStateException e) {
+ }
+
+ txn2.exit();
+
+ try {
+ txn.attach();
+ fail();
+ } catch (IllegalStateException e) {
+ }
+
+ try {
+ txn.detach();
+ fail();
+ } catch (IllegalStateException e) {
+ }
+
+ txn2.detach();
+
+ txn.detach();
+ txn.attach();
+ txn.detach();
+
+ es.shutdown();
+ }
+
+ private static class Txn {
+ }
+
+ private static class TM extends TransactionManager<Txn> {
+ protected IsolationLevel selectIsolationLevel(Transaction parent, IsolationLevel level) {
+ return IsolationLevel.READ_UNCOMMITTED;
+ }
+
+ protected boolean supportsForUpdate() {
+ return true;
+ }
+
+ protected Txn createTxn(Txn parent, IsolationLevel level) {
+ return new Txn();
+ }
+
+ protected boolean commitTxn(Txn txn) {
+ return false;
+ }
+
+ protected void abortTxn(Txn txn) {
+ }
+ }
+}