public void SplitsAndJoinsEmpty() { var initial = new GroupMembership() { 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.Destination, split.Single().Destination); Assert.AreEqual(initial.SyncJobRowKey, split.Single().SyncJobRowKey); Assert.AreEqual(initial.SyncJobPartitionKey, split.Single().SyncJobPartitionKey); Assert.IsTrue(split.Single().IsLastMessage); var rejoined = GroupMembership.Merge(split); Assert.AreEqual(0, rejoined.SourceMembers.Count); 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 async Task SendMembership(GroupMembership groupMembership, string sentFrom = "") { if (groupMembership.SyncJobPartitionKey == null) { throw new ArgumentNullException("SyncJobPartitionKey must be set."); } if (groupMembership.SyncJobRowKey == null) { throw new ArgumentNullException("SyncJobRowKey must be set."); } foreach (var message in groupMembership.Split().Select(x => new Message { Body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(x)), SessionId = groupMembership.Destination.ObjectId.ToString(), ContentType = "application/json", Label = sentFrom })) { await _queueClient.SendAsync(message); } }