public async Task TestServiceState_100TransactionsCommitted() { var context = MockStatefulServiceContextFactory.Default; var stateManager = new MockReliableStateManager(); var service = new MyStatefulService(context, stateManager); int abortedCount = 0; stateManager.MockTransactionChanged += (s, t) => { Assert.IsTrue(t.IsCommitted == !t.IsAborted, "Expected IsCommitted != IsAborted"); if (t.IsAborted) { Interlocked.Increment(ref abortedCount); } }; const string stateName = "test"; var payload = new Payload(StatePayload); var tasks = new List <Task>(100); for (int i = 0; i < 100; i++) { //create state tasks.Add(service.InsertAsync(stateName + i.ToString(), payload)); } await Task.WhenAll(tasks); Assert.AreEqual(0, abortedCount); CheckDictionaryCount(stateManager, 100); }
public async Task TestServiceState_TwoTransactionsCommitted() { var context = MockStatefulServiceContextFactory.Default; var stateManager = new MockReliableStateManager(); var service = new MyStatefulService(context, stateManager); int abortedCount = 0; stateManager.MockTransactionChanged += (s, t) => { Assert.IsTrue(t.IsCommitted == !t.IsAborted, "Expected IsCommitted != IsAborted"); if (t.IsAborted) { Interlocked.Increment(ref abortedCount); } }; const string stateName = "test"; var payload = new Payload(StatePayload); //create state-->Tran 1 await service.InsertAsync(stateName + "1", payload); //create state-->Tran 2 await service.InsertAsync(stateName + "2", payload); Assert.AreEqual(0, abortedCount); CheckDictionaryCount(stateManager, 2); }
public async Task TestServiceState_99TransactionsCommittedOneAborted() { var context = MockStatefulServiceContextFactory.Default; var stateManager = new MockReliableStateManager(); var service = new MyStatefulService(context, stateManager); const string stateName = "test"; var payload = new Payload(StatePayload); var tasks = new List <Task>(99); for (int i = 0; i < 99; i++) { //create state tasks.Add(service.InsertAsync(stateName, payload)); } ; await Task.WhenAll(tasks); await service.InsertAndAbortAsync(stateName, payload); Assert.IsInstanceOfType(stateManager.Transaction, typeof(MockTransaction)); Assert.AreEqual(100, stateManager.AllTransactions.Count()); Assert.IsFalse(stateManager.Transaction.IsCommitted); Assert.IsTrue(stateManager.Transaction.IsAborted); //check ordering Assert.IsTrue(stateManager.AllTransactions.Select(t => t.InstanceCount).SequenceEqual(Enumerable.Range(1, 100))); }
public async Task TestServiceState_TransactionCommitted() { var context = MockStatefulServiceContextFactory.Default; var stateManager = new MockReliableStateManager(); var service = new MyStatefulService(context, stateManager); const string stateName = "test"; var payload = new Payload(StatePayload); //create state-->Tran 1 await service.InsertAsync(stateName, payload); Assert.IsInstanceOfType(stateManager.Transaction, typeof(MockTransaction)); Assert.AreEqual(1, stateManager.AllTransactions.Count()); Assert.IsTrue(stateManager.Transaction.IsCommitted); Assert.IsFalse(stateManager.Transaction.IsAborted); }
public async Task TestServiceState_ConcurrentQueue() { var context = MockStatefulServiceContextFactory.Default; var stateManager = new MockReliableStateManager(); var service = new MyStatefulService(context, stateManager); var payload = new Payload(StatePayload); //create state await service.ConcurrentEnqueueAsync(payload); //get state var queue = await stateManager.TryGetAsync <IReliableConcurrentQueue <Payload> >(MyStatefulService.StateManagerConcurrentQueueKey); var actual = (await queue.Value.TryDequeueAsync(stateManager.CreateTransaction())).Value; Assert.AreEqual(StatePayload, actual.Content); }
public async Task TestServiceState_Dictionary() { var context = MockStatefulServiceContextFactory.Default; var stateManager = new MockReliableStateManager(); var service = new MyStatefulService(context, stateManager); const string stateName = "test"; var payload = new Payload(StatePayload); //create state await service.InsertAsync(stateName, payload); //get state var dictionary = await stateManager.TryGetAsync <IReliableDictionary <string, Payload> >(MyStatefulService.StateManagerDictionaryKey); var actual = (await dictionary.Value.TryGetValueAsync(stateManager.CreateTransaction(), stateName)).Value; Assert.AreEqual(StatePayload, actual.Content); }
public async Task TestServiceState_100TransactionsCommitted() { var context = MockStatefulServiceContextFactory.Default; var stateManager = new MockReliableStateManager(); var service = new MyStatefulService(context, stateManager); const string stateName = "test"; var payload = new Payload(StatePayload); var tasks = new List <Task>(100); for (int i = 0; i < 100; i++) { //create state tasks.Add(service.InsertAsync(stateName, payload)); } ; await Task.WhenAll(tasks); Assert.IsInstanceOfType(stateManager.Transaction, typeof(MockTransaction)); Assert.AreEqual(100, stateManager.AllTransactions.Count()); Assert.IsTrue(stateManager.Transaction.IsCommitted); Assert.IsFalse(stateManager.Transaction.IsAborted); }