public void SendOpToSiteTest() { TransactionManager target = new TransactionManager(); Operation op = new Operation(Enumerations.OperationMode.Read, 1, 2); // sent to any site target.SendOpToSites(op); Assert.AreEqual(1, target.sites[1].NumberOfMessages()); op = new Operation(Enumerations.OperationMode.Read, 1, 1); // sent to only site 2 target.SendOpToSites(op); Assert.AreEqual(1, target.sites[2].NumberOfMessages()); target.sites[1].Fail(target.CurrentTimeStamp); op = new Operation(Enumerations.OperationMode.Read, 1, 2); target.SendOpToSites(op); Assert.AreEqual(2, target.sites[2].NumberOfMessages()); // because 1 failed this was added to site 2 target.sites[4].Fail(target.CurrentTimeStamp); try { op = new Operation(Enumerations.OperationMode.Read, 1, 3); target.SendOpToSites(op); // will generate an exception } catch (Exception) { Assert.Inconclusive("Should not have hit an error anymore - change in logic of the program"); } // in this point, we continue // start by resetting all the sites buffers); foreach (Site site in target.sites.Values) { site.Fail(0); site.Recover(); } op = new Operation(Enumerations.OperationMode.Write, 1, 2, 5); target.SendOpToSites(op); // check that each non-failed site has this write op in its messageBuffQueue foreach (Site site in target.sites.Values) { if (!site.Failed()) { Assert.AreEqual(1, site.NumberOfMessages()); } else { Assert.AreEqual(0, site.NumberOfMessages()); } } return; }