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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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"
            };
        }