From fc6fee90e783c0c945f3a3b2e03157c4e58e5676 Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Fri, 25 Jan 2008 19:56:16 +0000 Subject: Add transaction detach/attach methods. --- .../amazon/carbonado/repo/toy/ToyTransaction.java | 6 + .../carbonado/spi/TestTransactionManager.java | 156 +++++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 src/test/java/com/amazon/carbonado/spi/TestTransactionManager.java (limited to 'src/test') 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() { + 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 { + 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) { + } + } +} -- cgit v1.2.3