API Overview API Index Package Overview Direct link to this page
JavaOnTracks 0.1.2
  net.jot.test.db. TransactionTest View Javadoc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.jot.test.db;

import net.jot.persistance.JOTTransaction;
import net.jot.persistance.builders.JOTQueryBuilder;
import net.jot.testing.JOTTestable;
import net.jot.testing.JOTTester;

/**
 * Test DB transactions
 * @author thibautc
 */
public class TransactionTest implements JOTTestable
{

    public void jotTest() throws Throwable
    {
        DBTestData.populateUserTestData();
        TestUser user = (TestUser) JOTQueryBuilder.selectQuery(null, TestUser.class).orderBy("ID").findOne();
        // test normal commit
        JOTTransaction tx = new JOTTransaction("test");
        user.firstName = "toto";
        user.save(tx);
        tx.commit();
        user = (TestUser) JOTQueryBuilder.selectQuery(null, TestUser.class).orderBy("ID").findOne();
        JOTTester.checkIf("Transaction worked", user.firstName.equals("toto"));

        // test transaction with rollback
        tx = new JOTTransaction("test");
        user.firstName = "xyz";
        user.save(tx);
        user = (TestUser) JOTQueryBuilder.selectQuery(tx, TestUser.class).orderBy("ID").findOne();
        JOTTester.checkIf("rollback before", user.firstName.equals("xyz"));
        tx.rollBack();
        user = (TestUser) JOTQueryBuilder.selectQuery(tx, TestUser.class).orderBy("ID").findOne();
        JOTTester.checkIf("rollback after", user.firstName.equals("toto"));

        /* multithread test - test atomic transactions, some commit, some rolled back*/
        String saved = user.firstName;
        TransactionTestThread[] threads=new TransactionTestThread[5];
        for (int i = 0; i != 5; i++)
        {
            threads[i]=new TransactionTestThread(i % 2 == 1);
            threads[i].start();
        }
        for (int i = 0; i != 5; i++)
        {
            threads[i].join();
        }
        user = (TestUser) JOTQueryBuilder.selectQuery(tx, TestUser.class).orderBy("id").findOne();
        JOTTester.warnIf("7 concurrent transactions (might fail on some DB's)", user.firstName.equals(saved),""+user.firstName);
    }

    class TransactionTestThread extends Thread
    {

        private boolean rollBack;

        public TransactionTestThread(boolean rollBack)
        {
            this.rollBack = rollBack;
        }

        public void run()
        {
            try
            {
                // this changes firstname but then fix it back in a transaction
                JOTTransaction tx = new JOTTransaction("test");
                TestUser user = (TestUser) JOTQueryBuilder.selectQuery(tx, TestUser.class).orderBy("id").findOne();
                user.firstName = user.firstName + "x";
                user.save(tx);
                user = (TestUser) JOTQueryBuilder.selectQuery(tx, TestUser.class).orderBy("id").findOne();
                //System.out.println(user.firstName);
                user.firstName = user.firstName.substring(0, user.firstName.length() - 1);
                user.save(tx);
                if (!rollBack)
                {
                    tx.commit();
                } else
                {
                    tx.rollBack();
                }
            } catch (Exception e)
            {
                // should use it in test result ..
                e.printStackTrace();
            }
        }
    }
}

Generated By: JavaOnTracks Doclet 0.1.5     ©Thibaut Colar