internal static async Task MembershipTable_UpdateRow(IMembershipTable membership) { MembershipEntry data = CreateMembershipEntryForTest(); MembershipTableData tableData = await membership.ReadAll(); //TableVersion tableVer = tableData.Version; Assert.IsNotNull(tableData.Version, "TableVersion should not be null"); Assert.AreEqual(0, tableData.Version.Version, "TableVersion should be zero"); Assert.AreEqual(0, tableData.Members.Count, "Should be no data initially: {0}", tableData); TableVersion newTableVer = tableData.Version.Next(); logger.Info("Calling InsertRow with Entry = {0} TableVersion = {1}", data, newTableVer); bool ok = await membership.InsertRow(data, newTableVer); Assert.IsTrue(ok, "InsertRow OK"); tableData = await membership.ReadAll(); Assert.IsNotNull(tableData.Version, "TableVersion should not be null"); Assert.AreEqual(1, tableData.Version.Version, "TableVersion should be 1"); Assert.AreEqual(1, tableData.Members.Count, "Should be one row after insert: {0}", tableData); Tuple<MembershipEntry, string> insertedData = tableData.Get(data.SiloAddress); Assert.IsNotNull(insertedData.Item2, "ETag should not be null"); insertedData.Item1.Status = SiloStatus.Active; newTableVer = tableData.Version.Next(); logger.Info("Calling UpdateRow with Entry = {0} eTag = {1} New TableVersion={2}", insertedData.Item1, insertedData.Item2, newTableVer); ok = await membership.UpdateRow(insertedData.Item1, insertedData.Item2, newTableVer); tableData = await membership.ReadAll(); Assert.IsNotNull(tableData.Version, "TableVersion should not be null"); Assert.AreEqual(2, tableData.Version.Version, "TableVersion should be 2"); Assert.AreEqual(1, tableData.Members.Count, "Should be one row after insert: {0}", tableData); Assert.IsTrue(ok, "UpdateRow OK - Table Data = {0}", tableData); }
private async Task MembershipTable_UpdateRow(IMembershipTable membership) { MembershipEntry MembershipEntry = CreateMembershipEntryForTest(); MembershipTableData MembershipData = await membership.ReadAll(); TableVersion tableVer = MembershipData.Version; Assert.AreEqual(0, MembershipData.Members.Count, "Should be no data initially: {0}", MembershipData); logger.Info("Calling InsertRow with Entry = {0} TableVersion = {1}", MembershipEntry, tableVer); bool ok = await membership.InsertRow(MembershipEntry, tableVer); Assert.IsTrue(ok, "InsertRow OK"); MembershipData = await membership.ReadAll(); Assert.AreEqual(1, MembershipData.Members.Count, "Should be one row after insert: {0}", MembershipData); Tuple<MembershipEntry, string> newEntryData = MembershipData.Get(MembershipEntry.SiloAddress); string eTag = newEntryData.Item2; Assert.IsNotNull(eTag, "ETag should not be null"); tableVer = MembershipData.Version; Assert.IsNotNull(tableVer, "TableVersion should not be null"); tableVer = tableVer.Next(); MembershipEntry = CreateMembershipEntryForTest(); MembershipEntry.Status = SiloStatus.Active; logger.Info("Calling UpdateRow with Entry = {0} eTag = {1} New TableVersion={2}", MembershipEntry, eTag, tableVer); ok = await membership.UpdateRow(MembershipEntry, eTag, tableVer); MembershipData = await membership.ReadAll(); Assert.AreEqual(1, MembershipData.Members.Count, "Should be one row after update: {0}", MembershipData); Assert.IsTrue(ok, "UpdateRow OK - Table Data = {0}", MembershipData); }
protected async Task MembershipTable_UpdateRow(bool extendedProtocol = true) { var tableData = await membershipTable.ReadAll(); Assert.NotNull(tableData.Version); Assert.Equal(0, tableData.Version.Version); Assert.Equal(0, tableData.Members.Count); for (int i = 1; i < 10; i++) { var siloEntry = CreateMembershipEntryForTest(); siloEntry.SuspectTimes = new List <Tuple <SiloAddress, DateTime> > { new Tuple <SiloAddress, DateTime>(CreateSiloAddressForTest(), GetUtcNowWithSecondsResolution().AddSeconds(1)), new Tuple <SiloAddress, DateTime>(CreateSiloAddressForTest(), GetUtcNowWithSecondsResolution().AddSeconds(2)) }; TableVersion tableVersion = tableData.Version.Next(); logger.Info("Calling InsertRow with Entry = {0} TableVersion = {1}", siloEntry, tableVersion); bool ok = await membershipTable.InsertRow(siloEntry, tableVersion); Assert.True(ok, "InsertRow failed"); tableData = await membershipTable.ReadAll(); var etagBefore = tableData.Get(siloEntry.SiloAddress).Item2; Assert.NotNull(etagBefore); if (extendedProtocol) { logger.Info("Calling UpdateRow with Entry = {0} correct eTag = {1} old version={2}", siloEntry, etagBefore, tableVersion != null ? tableVersion.ToString() : "null"); ok = await membershipTable.UpdateRow(siloEntry, etagBefore, tableVersion); Assert.False(ok, $"row update should have failed - Table Data = {tableData}"); tableData = await membershipTable.ReadAll(); } tableVersion = tableData.Version.Next(); logger.Info("Calling UpdateRow with Entry = {0} correct eTag = {1} correct version={2}", siloEntry, etagBefore, tableVersion != null ? tableVersion.ToString() : "null"); ok = await membershipTable.UpdateRow(siloEntry, etagBefore, tableVersion); Assert.True(ok, $"UpdateRow failed - Table Data = {tableData}"); logger.Info("Calling UpdateRow with Entry = {0} old eTag = {1} old version={2}", siloEntry, etagBefore, tableVersion != null ? tableVersion.ToString() : "null"); ok = await membershipTable.UpdateRow(siloEntry, etagBefore, tableVersion); Assert.False(ok, $"row update should have failed - Table Data = {tableData}"); tableData = await membershipTable.ReadAll(); var tuple = tableData.Get(siloEntry.SiloAddress); Assert.Equal(tuple.Item1.ToFullString(true), siloEntry.ToFullString(true)); var etagAfter = tuple.Item2; if (extendedProtocol) { logger.Info("Calling UpdateRow with Entry = {0} correct eTag = {1} old version={2}", siloEntry, etagAfter, tableVersion != null ? tableVersion.ToString() : "null"); ok = await membershipTable.UpdateRow(siloEntry, etagAfter, tableVersion); Assert.False(ok, $"row update should have failed - Table Data = {tableData}"); } tableData = await membershipTable.ReadAll(); etagBefore = etagAfter; etagAfter = tableData.Get(siloEntry.SiloAddress).Item2; Assert.Equal(etagBefore, etagAfter); Assert.NotNull(tableData.Version); if (extendedProtocol) { Assert.Equal(tableVersion.Version, tableData.Version.Version); } Assert.Equal(i, tableData.Members.Count); } }