コード例 #1
0
        public void Get_NewValueWillBeAborted_OldValueIsRead()
        {
            const int oldValue = 100;
            const int newValue = 200;
            const int id       = 1;
            var       store    = new Store <Record>();

            store.Create(new Record(id, oldValue));

            var transaction = store.BeginTransaction();

            store.Update(new Record(id, newValue), transaction);

            var actual = store.Get(id);

            store.Abort(transaction);

            Assert.AreEqual(oldValue, actual.Balance);
        }
コード例 #2
0
ファイル: DirtyWriteTests.cs プロジェクト: snrnats/AcidStore
        public async Task Update_NewValueWillBeAborted_OldValueIsRead()
        {
            const int firstValue  = 200;
            const int secondValue = 300;
            const int id          = 1;
            var       store       = new Store <Record>();

            store.Create(new Record(id, 100));

            var transaction = store.BeginTransaction();

            store.Update(new Record(id, firstValue), transaction);

            var secondUpdate = Task.Run(() => store.Update(new Record(id, secondValue)));

            var actual = store.Get(id);

            store.Abort(transaction);
            await secondUpdate;

            Assert.AreEqual(secondValue, actual.Balance);
        }