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;
 }