public void RoundTripSerialization() { var initial = MockGroupMembershipHelper.MockGroupMembership(); var split = JsonConvert.DeserializeObject <GroupMembership[]>(JsonConvert.SerializeObject(initial.Split())); Assert.AreEqual((UserCount / ChunkSize) + 1, split.Length); foreach (var chunk in split) { Assert.AreEqual(initial.Destination, chunk.Destination); Assert.AreEqual(initial.SyncJobRowKey, chunk.SyncJobRowKey); Assert.AreEqual(initial.SyncJobPartitionKey, chunk.SyncJobPartitionKey); } foreach (var nonlastChunk in split.Take(split.Length - 1)) { Assert.IsFalse(nonlastChunk.IsLastMessage); Assert.AreEqual(ChunkSize, nonlastChunk.SourceMembers.Count); } Assert.IsTrue(split.Last().IsLastMessage); Assert.AreEqual(UserCount % ChunkSize, split.Last().SourceMembers.Count); var rejoined = GroupMembership.Merge(split); Assert.AreEqual(initial.Destination, rejoined.Destination); Assert.AreEqual(initial.SyncJobRowKey, rejoined.SyncJobRowKey); Assert.AreEqual(initial.SyncJobPartitionKey, rejoined.SyncJobPartitionKey); CollectionAssert.AreEqual(initial.SourceMembers, rejoined.SourceMembers); }
public void SplitsAndJoinsEmpty() { var initial = new GroupMembership() { Sources = MockGroupMembershipHelper.CreateMockGroups(), Destination = new AzureADGroup { ObjectId = Guid.NewGuid() }, SyncJobPartitionKey = Guid.NewGuid().ToString(), SyncJobRowKey = Guid.NewGuid().ToString(), }; var split = initial.Split(); Assert.AreEqual(1, split.Length); Assert.AreEqual(0, split.Single().SourceMembers.Count); Assert.AreEqual(initial.Sources, split.Single().Sources); Assert.AreEqual(initial.Destination, split.Single().Destination); Assert.AreEqual(initial.SyncJobRowKey, split.Single().SyncJobRowKey); Assert.AreEqual(initial.SyncJobPartitionKey, split.Single().SyncJobPartitionKey); Assert.IsTrue(split.Single().IsLastMessage); Assert.IsFalse(split.Single().Errored); var rejoined = GroupMembership.Merge(split); Assert.AreEqual(0, rejoined.SourceMembers.Count); Assert.AreEqual(initial.Sources, rejoined.Sources); Assert.AreEqual(initial.Destination, rejoined.Destination); Assert.AreEqual(initial.SyncJobRowKey, rejoined.SyncJobRowKey); Assert.AreEqual(initial.SyncJobPartitionKey, rejoined.SyncJobPartitionKey); CollectionAssert.AreEqual(initial.SourceMembers, rejoined.SourceMembers); Assert.IsFalse(rejoined.Errored); }
public void SplitsAndJoins() { var initial = MockGroupMembershipHelper.MockGroupMembership(); var split = initial.Split(); Assert.AreEqual((UserCount / ChunkSize) + 1, split.Length); foreach (var chunk in split) { Assert.AreEqual(initial.Sources, chunk.Sources); Assert.AreEqual(initial.Destination, chunk.Destination); Assert.AreEqual(initial.SyncJobRowKey, chunk.SyncJobRowKey); Assert.AreEqual(initial.SyncJobPartitionKey, chunk.SyncJobPartitionKey); Assert.IsFalse(chunk.Errored); } foreach (var nonlastChunk in split.Take(split.Length - 1)) { Assert.IsFalse(nonlastChunk.IsLastMessage); Assert.AreEqual(ChunkSize, nonlastChunk.SourceMembers.Count); } Assert.IsTrue(split.Last().IsLastMessage); Assert.AreEqual(UserCount % ChunkSize, split.Last().SourceMembers.Count); var rejoined = GroupMembership.Merge(split); Assert.AreEqual(initial.Sources, rejoined.Sources); Assert.AreEqual(initial.Destination, rejoined.Destination); Assert.AreEqual(initial.SyncJobRowKey, rejoined.SyncJobRowKey); Assert.AreEqual(initial.SyncJobPartitionKey, rejoined.SyncJobPartitionKey); CollectionAssert.AreEqual(initial.SourceMembers, rejoined.SourceMembers); Assert.IsFalse(rejoined.Errored); }
public GroupMembershipMessage[] MakeMembershipMessages() { int messageNumber = 0; return(MockGroupMembershipHelper.MockGroupMembership().Split().Select(x => new GroupMembershipMessage { Body = x, LockToken = (messageNumber++).ToString() }).ToArray()); }
public void DefaultSerializationSizeWorks() { // https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quotas const int maxMessageSize = 256 * 1024; // 256 kilobytes const int largestSafePayload = maxMessageSize - (64 * 1024); // minus the maximum header size var initial = MockGroupMembershipHelper.MockGroupMembership(); foreach (var chunk in initial.Split()) { var serialized = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(chunk)); Assert.IsTrue(serialized.Length <= largestSafePayload); } }
public void SetupData() { _rundId = Guid.NewGuid(); _targetGroupId = Guid.NewGuid(); _partitionKey = "2021-1-1"; _rowKey = Guid.NewGuid().ToString(); _sources = MockGroupMembershipHelper.CreateMockGroups().Take(1).ToArray(); _users = MakeUsers(10, 0); _membership = new GroupMembership { Destination = new AzureADGroup { ObjectId = _targetGroupId }, IsLastMessage = true, RunId = _rundId, SourceMembers = _users, SyncJobPartitionKey = _partitionKey, SyncJobRowKey = _rowKey }; _job = new SyncJob { PartitionKey = _partitionKey, RowKey = _rowKey, Status = SyncStatus.Idle.ToString(), LastRunTime = DateTime.FromFileTimeUtc(0), Enabled = true, Query = _sources[0].ObjectId.ToString(), TargetOfficeGroupId = _targetGroupId, ThresholdPercentageForAdditions = 50, ThresholdPercentageForRemovals = 50, Period = 6, Requestor = "[email protected],[email protected]", RunId = _rundId, StartDate = DateTime.UtcNow.Date.AddDays(-10), Type = "SecurityGroup" }; }