public void TestEmptyException()
        {
            testName = "TestEmptyException";
            SetUpTest(true);
            DatabaseEnvironment master = SetUpEnv(testHome + "/master", 100, 8000, true);
            Transaction         txn    = master.BeginTransaction();

            txn.Commit();
            byte[] token = txn.CommitToken;
            Assert.AreEqual(TransactionAppliedStatus.EMPTY_TRANSACTION,
                            master.IsTransactionApplied(token, 1000));
            master.Close();
        }
예제 #2
0
        public void TestInvalidToken()
        {
            DatabaseEntry       key, data;
            DatabaseEnvironment master = SetUpEnv("./master", 100, 8000, true);
            BTreeDatabase       db     = Open(master, true);
            Transaction         txn    = master.BeginTransaction();

            key = new DatabaseEntry(
                ASCIIEncoding.ASCII.GetBytes("Key"));
            data = new DatabaseEntry(
                ASCIIEncoding.ASCII.GetBytes("Data"));
            db.Put(key, data, txn);
            txn.Commit();
            byte[] token = txn.CommitToken;
            token[19] += 123;
            Assert.Throws <DatabaseException>(delegate { master.IsTransactionApplied(token, 1000); });
            db.Close();
            master.Close();
        }
예제 #3
0
        public void TestCommitSuccess()
        {
            testName = "TestCommitSuccess";
            SetUpTest(true);
            string[] keys = { "key 1", "key 2", "key 3", "key 4",
                              "key 5", "key 6", "key 7", "key 8","key 9", "key 10" };

            DatabaseEnvironment master = SetUpEnv(testHome + "/master", 100, masterPort, true);
            DatabaseEnvironment client = SetUpEnv(testHome + "/client", 0, clientPort, false);

            master.RepMgrStartMaster(2);
            Thread.Sleep(2000);
            client.RepMgrStartClient(2);

            BTreeDatabase db1 = Open(master, true);
            BTreeDatabase db2 = null;

            for (; ;)
            {
                if (db2 == null)
                {
                    try {
                        db2 = Open(client, false);
                        break;
                    } catch (DatabaseException) {
                        if (db2 != null)
                        {
                            db2.Close(true);
                            db2 = null;
                        }
                        System.Threading.Thread.Sleep(1000);
                        continue;
                    }
                }
            }

            try {
                for (int i = 0; i < 3; i++)
                {
                    Transaction txn = master.BeginTransaction();

                    // Get the key.
                    DatabaseEntry key, data;
                    key = new DatabaseEntry(
                        ASCIIEncoding.ASCII.GetBytes(keys[i]));

                    data = new DatabaseEntry(
                        ASCIIEncoding.ASCII.GetBytes(keys[i]));

                    db1.Put(key, data, txn);
                    txn.Commit();

                    byte[] token = txn.CommitToken;
                    Assert.AreEqual(master.IsTransactionApplied(token, 5000), TransactionAppliedStatus.APPLIED);
                    Assert.AreEqual(client.IsTransactionApplied(token, 200000), TransactionAppliedStatus.APPLIED);
                }
            }
            finally {
                db1.Close();
                db2.Close();
                master.Close();
                client.Close();
            }
        }