diff options
author | bartolomiew <bart_olomiew@yahoo.fr> | 2012-10-28 08:41:27 +0100 |
---|---|---|
committer | James Moger <james.moger@gmail.com> | 2012-11-02 14:33:26 -0400 |
commit | 68930d845c27578c60fbf6d083a5a9e36fd5078e (patch) | |
tree | ee47ab1943f7c1ef0d8317709d023f2ebc0a7bf1 /tests/com/iciql | |
parent | 1f06dc3216fdb327a60bb3e46a35c948c69d4b97 (diff) | |
download | iciql-68930d845c27578c60fbf6d083a5a9e36fd5078e.tar.gz iciql-68930d845c27578c60fbf6d083a5a9e36fd5078e.zip |
Allows to gain full control of transactions
Diffstat (limited to 'tests/com/iciql')
-rw-r--r-- | tests/com/iciql/test/ForeignKeyTest.java | 3 | ||||
-rw-r--r-- | tests/com/iciql/test/IciqlSuite.java | 4 | ||||
-rw-r--r-- | tests/com/iciql/test/TransactionTest.java | 119 |
3 files changed, 124 insertions, 2 deletions
diff --git a/tests/com/iciql/test/ForeignKeyTest.java b/tests/com/iciql/test/ForeignKeyTest.java index d789408..ed85cbc 100644 --- a/tests/com/iciql/test/ForeignKeyTest.java +++ b/tests/com/iciql/test/ForeignKeyTest.java @@ -28,6 +28,9 @@ import com.iciql.IciqlException; import com.iciql.test.models.CategoryAnnotationOnly;
import com.iciql.test.models.ProductAnnotationOnlyWithForeignKey;
+/**
+ * Tests of Foreign Keys.
+ */
public class ForeignKeyTest {
/**
diff --git a/tests/com/iciql/test/IciqlSuite.java b/tests/com/iciql/test/IciqlSuite.java index 9181db7..1202d0e 100644 --- a/tests/com/iciql/test/IciqlSuite.java +++ b/tests/com/iciql/test/IciqlSuite.java @@ -1,6 +1,6 @@ /*
* Copyright 2011 James Moger.
- * Copyright 2012 Frédéric Gaillard.
+ * Copyright 2012 Frederic Gaillard.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -93,7 +93,7 @@ import com.iciql.util.Utils; @SuiteClasses({ AliasMapTest.class, AnnotationsTest.class, BooleanModelTest.class, ClobTest.class,
ConcurrencyTest.class, EnumsTest.class, ModelsTest.class, PrimitivesTest.class,
RuntimeQueryTest.class, SamplesTest.class, UpdateTest.class, UpgradesTest.class, JoinTest.class,
- UUIDTest.class, ViewsTest.class, ForeignKeyTest.class })
+ UUIDTest.class, ViewsTest.class, ForeignKeyTest.class, TransactionTest.class })
public class IciqlSuite {
private static final TestDb[] TEST_DBS = {
diff --git a/tests/com/iciql/test/TransactionTest.java b/tests/com/iciql/test/TransactionTest.java new file mode 100644 index 0000000..d1c6749 --- /dev/null +++ b/tests/com/iciql/test/TransactionTest.java @@ -0,0 +1,119 @@ +/*
+ * Copyright 2012 Frederic Gaillard.
+ *
+ * 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.iciql.test;
+
+import static org.junit.Assert.assertEquals;
+
+import java.sql.SQLException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.iciql.Db;
+import com.iciql.IciqlException;
+import com.iciql.test.models.CategoryAnnotationOnly;
+import com.iciql.test.models.ProductAnnotationOnlyWithForeignKey;
+
+/**
+ * Tests of transactions.
+ */
+public class TransactionTest {
+
+ /**
+ * This object represents a database (actually a connection to the
+ * database).
+ */
+
+ private Db db;
+
+ @Before
+ public void setUp() {
+ db = IciqlSuite.openNewDb();
+
+ // tables creation
+ db.from(new CategoryAnnotationOnly());
+ db.from(new ProductAnnotationOnlyWithForeignKey());
+
+ startTransactionMode();
+ }
+
+ @After
+ public void tearDown() {
+
+ endTransactionMode();
+
+ db.dropTable(ProductAnnotationOnlyWithForeignKey.class);
+ db.dropTable(CategoryAnnotationOnly.class);
+ db.close();
+ }
+
+ @Test
+ public void testTransaction() {
+
+ // insert in 2 tables inside a transaction
+
+ // insertAll don't use save point in this transaction
+ db.insertAll(CategoryAnnotationOnly.getList());
+ db.insertAll(ProductAnnotationOnlyWithForeignKey.getList());
+
+ // don't commit changes
+ try {
+ db.getConnection().rollback();
+ } catch (SQLException e) {
+ throw new IciqlException(e, "Can't rollback");
+ }
+
+ ProductAnnotationOnlyWithForeignKey p = new ProductAnnotationOnlyWithForeignKey();
+ long count1 = db.from(p).selectCount();
+
+ CategoryAnnotationOnly c = new CategoryAnnotationOnly();
+ long count2 = db.from(c).selectCount();
+
+ // verify changes aren't committed
+ assertEquals(count1, 0L);
+ assertEquals(count2, 0L);
+ }
+
+ /**
+ * Helper to set transaction mode
+ */
+ private void startTransactionMode() {
+ db.setSkipCreate(true);
+ db.setAutoSavePoint(false);
+
+ try {
+ db.getConnection().setAutoCommit(false);
+ } catch (SQLException e) {
+ throw new IciqlException(e, "Could not change auto-commit mode");
+ }
+ }
+
+ /**
+ * Helper to return to initial mode
+ */
+ private void endTransactionMode() {
+ try {
+ db.getConnection().setAutoCommit(true);
+ } catch (SQLException e) {
+ throw new IciqlException(e, "Could not change auto-commit mode");
+ }
+ // returns to initial states
+ db.setSkipCreate(false);
+ db.setAutoSavePoint(true);
+ }
+
+}
|