public void Persistence_of_simple_put_transaction_with_one_object() { var transaction1 = MakeTransaction(new Trade(1, 5465, "TATA", DateTime.Now.Date, 150)); var engine = new PersistenceEngine(); engine.Start(); engine.NewTransaction(transaction1); // wait for the transaction log to be processed engine.WaitForPendingTransactions(); engine.Stop(); var processor = new TestProcessor(); //reload data from persistent storage var unused = new ReliableStorage(processor); unused.LoadPersistentData(); unused.Dispose(); Assert.AreEqual(1, processor.LoadedObjects.Count); var reloaded = CachedObject.Unpack <Trade>(processor.LoadedObjects[0]); Assert.AreEqual("TATA", reloaded.Folder); }
Add_two_objects_then_update_one_of_them_then_check_the_persistent_storage_contains_the_updated_value() { var transaction1 = MakeTransaction( new Trade(1, 5465, "TATA", DateTime.Now.Date, 150), new Trade(2, 5467, "TATA", DateTime.Now.Date, 180) ); var transaction2 = MakeTransaction( new Trade(2, 5467, "TOTO", DateTime.Now.Date, 190) ); var deleteTransaction = MakeDeleteTransaction( new Trade(1, 5465, "TATA", DateTime.Now.Date, 150) ); var engine = new PersistenceEngine(); engine.Start(); engine.NewTransaction(transaction1); engine.NewTransaction(transaction2); engine.NewTransaction(deleteTransaction); // wait for the transaction log to be processed engine.WaitForPendingTransactions(); engine.Stop(); var processor = new TestProcessor(); //reload data from persistent storage var unused = new ReliableStorage(processor); unused.LoadPersistentData(); unused.Dispose(); Assert.AreEqual(1, processor.LoadedObjects.Count); var reloaded = processor.LoadedObjects.Select(CachedObject.Unpack <Trade>).First(t => t.Id == 2); Assert.AreEqual("TOTO", reloaded.Folder); //reload data from transaction log. Check no more pending transactions var log = new TransactionLog(); Assert.AreEqual(0, log.PendingTransactionsCount); log.Dispose(); }
public void Simulate_failure_during_transaction_processing() { var transaction1 = MakeTransaction( new Trade(1, 5465, "TATA", DateTime.Now.Date, 150), new Trade(2, 5467, "TATA", DateTime.Now.Date, 180) ); var transaction2 = MakeTransaction( new Trade(2, 5467, "TOTO", DateTime.Now.Date, 190) ); var log = new TransactionLog(); log.NewTransaction( SerializationHelper.ObjectToBytes(transaction1, SerializationMode.ProtocolBuffers, null)); log.NewTransaction( SerializationHelper.ObjectToBytes(transaction2, SerializationMode.ProtocolBuffers, null)); var dummy = log.StartProcessing(); // call StartProcessing and close before EndProcessing log.Dispose(); var engine = new PersistenceEngine(); engine.Start(); engine.WaitForPendingTransactions(); engine.Stop(); var processor = new TestProcessor(); //reload data from persistent storage var unused = new ReliableStorage(processor); unused.LoadPersistentData(); unused.Dispose(); Assert.AreEqual(2, processor.LoadedObjects.Count); var reloaded = processor.LoadedObjects.Select(CachedObject.Unpack <Trade>).First(t => t.Id == 2); Assert.AreEqual("TOTO", reloaded.Folder); //reload data from transaction log. Check no more pending transactions log = new TransactionLog(); Assert.AreEqual(0, log.PendingTransactionsCount); log.Dispose(); }
public void Start_the_persistence_engine_with_a_non_empty_transaction_log() { var transaction1 = MakeTransaction( new Trade(1, 5465, "TATA", DateTime.Now.Date, 150), new Trade(2, 5467, "TATA", DateTime.Now.Date, 180) ); var transaction2 = MakeTransaction( new Trade(2, 5467, "TOTO", DateTime.Now.Date, 190) ); var log = new TransactionLog(); log.NewTransaction( SerializationHelper.ObjectToBytes(transaction1, SerializationMode.ProtocolBuffers, false)); log.NewTransaction( SerializationHelper.ObjectToBytes(transaction2, SerializationMode.ProtocolBuffers, false)); log.Dispose(); var engine = new PersistenceEngine(); engine.Start(); engine.WaitForPendingTransactions(); engine.Stop(); var processor = new TestProcessor(); //reload data from persistent storage var unused = new ReliableStorage(processor); unused.LoadPersistentData(); unused.Dispose(); Assert.AreEqual(2, processor.LoadedObjects.Count); var reloaded = processor.LoadedObjects.Select(PackedObject.Unpack <Trade>).First(t => t.Id == 2); Assert.AreEqual("TOTO", reloaded.Folder); //reload data from transaction log. Check no more pending transactions log = new TransactionLog(); Assert.AreEqual(0, log.PendingTransactionsCount); log.Dispose(); }