Ejemplo n.º 1
0
        public void CommitRecoveryTest()
        {
            string log = "12345678-1234-1234-1234-123456789012\tCommitted\ttest4,\r12345678-1234-1234-1234-123456789013\tPrepared\ttest1,\r12345678-1234-1234-1234-123456789014\tNone\ttest2,\r12345678-1234-1234-1234-123456789012\tRollbacked\ttest3,";

            using (StreamWriter sw = new StreamWriter(TwoPhaseCommit_Accessor.LogFileName))
            {
                sw.Write(log);
            }

            TwoPhaseCommit_Accessor.isInitialized = false;
            Transaction         context = new Transaction();
            ResourceManagerList rms     = new ResourceManagerList(MyRMTest.MockRM());
            CommitedTransaction actual;

            actual = TwoPhaseCommit.Commit(context, rms);
            if (!actual.DoneEvent.WaitOne(2000))
            {
                Assert.Fail("Timeout in commit");
            }

            using (StreamReader sr = new StreamReader(TwoPhaseCommit_Accessor.LogFileName))
            {
                log = sr.ReadToEnd();
            }

            string expected = "12345678-1234-1234-1234-123456789012\tRollbacked\ttest4,\r12345678-1234-1234-1234-123456789013\tDone\ttest1,\r" + context.Id.ToString("d") + "\tDone\ttest,\r";

            Assert.AreEqual(expected, log);
        }
        public void StartCommitTest()
        {
            Transaction         context = new Transaction();
            ResourceManagerList rms     = new ResourceManagerList(MyRMTest.MockRM());

            rms.Add(MyRMTest.MockRM());
            CommitedTransaction_Accessor target = new CommitedTransaction_Accessor(context, rms);

            CommitedTransaction_Accessor.stepTimeout = 1000;
            target.StartCommit();
            Assert.IsTrue(target.DoneEvent.WaitOne(1000));
        }
        public void ToStringTest()
        {
            Transaction         context = new Transaction();
            ResourceManagerList rms     = new ResourceManagerList(MyRMTest.MockRM());

            rms.Add(MyRMTest.MockRM());
            CommitedTransaction_Accessor target = new CommitedTransaction_Accessor(context, rms);
            string expected = context.Id.ToString() + "\tNone\ttest,test,";
            string actual;

            actual = target.ToString();
            Assert.AreEqual(expected, actual);
        }
        public void SetStateTest()
        {
            Transaction         context = new Transaction();
            ResourceManagerList rms     = new ResourceManagerList(MyRMTest.MockRM());

            rms.Add(MyRMTest.MockRM());
            CommitedTransaction_Accessor target = new CommitedTransaction_Accessor(context, rms);
            CommitState state = CommitState.Prepared;

            target.SetState(0, state);
            Assert.IsFalse(target.stepWaitEvent.WaitOne(300));
            target.SetState(1, state);
            Assert.IsTrue(target.stepWaitEvent.WaitOne(1000));
        }
        public void StartCommitTestWithOneFailPrepare()
        {
            Transaction context = new Transaction();
            MockRM      failRm  = new MockRM();

            failRm.PrepareResponse = TP.XaResponse.XAER_RMERR;
            ResourceManagerList rms = new ResourceManagerList(failRm);

            rms.Add(MyRMTest.MockRM());
            CommitedTransaction_Accessor.expBackoff = 1;
            CommitedTransaction_Accessor target = new CommitedTransaction_Accessor(context, rms);

            CommitedTransaction_Accessor.stepTimeout = 100;
            target.State = CommitState.Committed;
            target.StartCommit();
            Assert.AreEqual(string.Format("2PC:Prepare {0}:MockRM\r2PC:Prepare {0}:test\r2PC:Rollback {0}:MockRM\r2PC:Rollback {0}:test\r", context.Id), target.Message);
        }
Ejemplo n.º 6
0
        public void CommitTestWithoutOldLog()
        {
            File.Delete(TwoPhaseCommit_Accessor.LogFileName);
            Transaction         context = new Transaction();
            ResourceManagerList rms     = new ResourceManagerList(MyRMTest.MockRM());
            CommitedTransaction actual;

            actual = TwoPhaseCommit.Commit(context, rms);
            if (!actual.DoneEvent.WaitOne(1000))
            {
                Assert.Fail("Timeout in commit");
            }
            string log;

            using (var sr = new StreamReader(TwoPhaseCommit_Accessor.LogFileName))
            {
                log = sr.ReadToEnd();
            }

            string expected = context.Id.ToString("d") + "\tDone\ttest,\r";

            Assert.IsTrue(log.Contains(expected));
        }