protected async Task MembershipTable_UpdateIAmAlive(bool extendedProtocol = true) { MembershipTableData tableData = await membershipTable.ReadAll(); TableVersion newTableVersion = tableData.Version.Next(); MembershipEntry newEntry = CreateMembershipEntryForTest(); bool ok = await membershipTable.InsertRow(newEntry, newTableVersion); Assert.True(ok); var amAliveTime = DateTime.UtcNow; // This mimics the arguments MembershipOracle.OnIAmAliveUpdateInTableTimer passes in var entry = new MembershipEntry { SiloAddress = newEntry.SiloAddress, IAmAliveTime = amAliveTime }; await membershipTable.UpdateIAmAlive(entry); tableData = await membershipTable.ReadAll(); Tuple <MembershipEntry, string> member = tableData.Members.First(); // compare that the value is close to what we passed in, but not exactly, as the underlying store can set its own precision settings // (ie: in SQL Server this is defined as datetime2(3), so we don't expect precision to account for less than 0.001s values) Assert.True((amAliveTime - member.Item1.IAmAliveTime).Duration() < TimeSpan.FromMilliseconds(50), (amAliveTime - member.Item1.IAmAliveTime).Duration().ToString()); }
protected async Task MembershipTable_UpdateIAmAlive(bool extendedProtocol = true) { MembershipTableData tableData = await membershipTable.ReadAll(); TableVersion newTableVersion = tableData.Version.Next(); MembershipEntry newEntry = CreateMembershipEntryForTest(); bool ok = await membershipTable.InsertRow(newEntry, newTableVersion); Assert.True(ok); var amAliveTime = DateTime.UtcNow; // This mimics the arguments MembershipOracle.OnIAmAliveUpdateInTableTimer passes in var entry = new MembershipEntry { SiloAddress = newEntry.SiloAddress, IAmAliveTime = amAliveTime }; await membershipTable.UpdateIAmAlive(entry); tableData = await membershipTable.ReadAll(); Tuple <MembershipEntry, string> member = tableData.Members.First(); Assert.True((amAliveTime - member.Item1.IAmAliveTime).Duration() < TimeSpan.FromMilliseconds(1)); }