Пример #1
0
        public async Task ProperlyGetsAndSendsMembership()
        {
            const int userCount        = 2500213;
            Guid      sourceGroup      = Guid.NewGuid();
            Guid      destinationGroup = Guid.NewGuid();
            var       initialUsers     = Enumerable.Range(0, userCount).Select(
                x => new AzureADUser {
                ObjectId = Guid.NewGuid()
            }).ToList();

            var graphRepo = new MockGraphGroupRepository()
            {
                GroupsToUsers = new Dictionary <Guid, List <AzureADUser> > {
                    { sourceGroup, initialUsers }
                }
            };
            var serviceBus = new MockMembershipServiceBusRepository();

            var calc = new SGMembershipCalculator(graphRepo, serviceBus, new MockLogger());

            await calc.SendMembership(new SyncJob
            {
                TargetOfficeGroupId = destinationGroup,
                Query = sourceGroup.ToString()
            });

            CollectionAssert.AreEqual(initialUsers, serviceBus.Sent.SourceMembers);
            Assert.AreEqual(sourceGroup, serviceBus.Sent.Sources.Single().ObjectId);
            Assert.AreEqual(destinationGroup, serviceBus.Sent.Destination.ObjectId);
        }
Пример #2
0
        public async Task ProperlyGetsAndSendsMembership(int getGroupExceptions, int getMembersExceptions)
        {
            const int userCount   = 2500213;
            var       allUsers    = new List <AzureADUser> {
            };
            Guid sourceGroup      = Guid.NewGuid();
            Guid destinationGroup = Guid.NewGuid();
            var  initialUsers     = Enumerable.Range(0, userCount).Select(
                x => new AzureADUser {
                ObjectId = Guid.NewGuid()
            }).ToList();

            var graphRepo = new MockGraphGroupRepository()
            {
                GroupsToUsers = new Dictionary <Guid, List <AzureADUser> > {
                    { sourceGroup, initialUsers }
                },
                ThrowSocketExceptionsFromGroupExistsBeforeSuccess     = getGroupExceptions,
                ThrowSocketExceptionsFromGetUsersInGroupBeforeSuccess = getMembersExceptions
            };
            var serviceBus    = new MockMembershipServiceBusRepository();
            var mail          = new MockMailRepository();
            var mailAddresses = new MockEmail <IEmailSenderRecipient>();
            var syncJobs      = new MockSyncJobRepository();
            var dryRun        = new MockDryRunValue()
            {
                DryRunEnabled = false
            };

            var calc = new SGMembershipCalculator(graphRepo, serviceBus, mail, mailAddresses, syncJobs, new MockLoggingRepository(), dryRun);

            var testJob = new SyncJob
            {
                RowKey              = "row",
                PartitionKey        = "partition",
                TargetOfficeGroupId = destinationGroup,
                Query  = sourceGroup.ToString(),
                Status = "InProgress"
            };

            syncJobs.ExistingSyncJobs.Add((testJob.RowKey, testJob.PartitionKey), testJob);

            var groups = calc.ReadSourceGroups(testJob);
            await calc.SendMembershipAsync(testJob, Guid.NewGuid(), allUsers);

            foreach (var group in groups)
            {
                var groupExistsResult = await calc.GroupExistsAsync(group.ObjectId, Guid.NewGuid());

                Assert.AreEqual(OutcomeType.Successful, groupExistsResult.Outcome);
                Assert.AreEqual(true, groupExistsResult.Result);
            }
        }
Пример #3
0
        public async Task ProperlyGetsAndSendsMembershipWithMultipleSources()
        {
            const int userCount = 2500213;

            Guid[] sourceGroups     = Enumerable.Range(0, 5).Select(_ => Guid.NewGuid()).ToArray();
            Guid   destinationGroup = Guid.NewGuid();

            var mockGroups = new Dictionary <Guid, List <AzureADUser> >();

            for (int i = 0; i < userCount; i++)
            {
                var currentGroup = sourceGroups[i % sourceGroups.Length];
                var userToAdd    = new AzureADUser {
                    ObjectId = Guid.NewGuid()
                };
                if (mockGroups.TryGetValue(currentGroup, out var users))
                {
                    users.Add(userToAdd);
                }
                else
                {
                    mockGroups.Add(currentGroup, new List <AzureADUser> {
                        userToAdd
                    });
                }
            }

            var graphRepo = new MockGraphGroupRepository()
            {
                GroupsToUsers = mockGroups
            };
            var serviceBus = new MockMembershipServiceBusRepository();

            var calc = new SGMembershipCalculator(graphRepo, serviceBus, new MockLogger());

            await calc.SendMembership(new SyncJob
            {
                TargetOfficeGroupId = destinationGroup,
                Query = string.Join(';', sourceGroups)
            });

            CollectionAssert.AreEquivalent(mockGroups.Values.SelectMany(x => x).ToArray(), serviceBus.Sent.SourceMembers);
            CollectionAssert.AreEqual(sourceGroups.Select(x => new AzureADGroup {
                ObjectId = x
            }).ToArray(), serviceBus.Sent.Sources);
            Assert.AreEqual(destinationGroup, serviceBus.Sent.Destination.ObjectId);
        }
Пример #4
0
        public async Task ProperlyErrorsOnNonexistentGroups()
        {
            const int userCount        = 2500213;
            var       sourceGroups     = Enumerable.Range(0, 5).Select(_ => Guid.NewGuid()).ToArray();
            Guid      destinationGroup = Guid.NewGuid();

            var mockGroups = new Dictionary <Guid, List <AzureADUser> >();

            for (int i = 0; i < userCount; i++)
            {
                var currentGroup = sourceGroups[i % sourceGroups.Length];
                var userToAdd    = new AzureADUser {
                    ObjectId = Guid.NewGuid()
                };
                if (mockGroups.TryGetValue(currentGroup, out var users))
                {
                    users.Add(userToAdd);
                }
                else
                {
                    mockGroups.Add(currentGroup, new List <AzureADUser> {
                        userToAdd
                    });
                }
            }

            var graphRepo = new MockGraphGroupRepository()
            {
                GroupsToUsers = mockGroups
            };
            var serviceBus = new MockMembershipServiceBusRepository();

            var calc = new SGMembershipCalculator(graphRepo, serviceBus, new MockLogger());

            Guid nonexistentGroupId = Guid.NewGuid();
            await calc.SendMembership(new SyncJob
            {
                TargetOfficeGroupId = destinationGroup,
                Query = string.Join(';', sourceGroups) + $";{nonexistentGroupId}"
            });

            Assert.IsTrue(serviceBus.Sent.Errored);
            Assert.AreEqual(0, serviceBus.Sent.SourceMembers.Count);
        }
Пример #5
0
        public async Task ProperlyErrorsOnAllNonexistentGroups(int getGroupExceptions, int getMembersExceptions)
        {
            Guid[] sourceGroups     = Enumerable.Range(0, 5).Select(_ => Guid.NewGuid()).ToArray();
            Guid   destinationGroup = Guid.NewGuid();
            var    graphRepo        = new MockGraphGroupRepository()
            {
                GroupsToUsers = new Dictionary <Guid, List <AzureADUser> >(),
                ThrowSocketExceptionsFromGroupExistsBeforeSuccess     = getGroupExceptions,
                ThrowSocketExceptionsFromGetUsersInGroupBeforeSuccess = getMembersExceptions
            };
            var serviceBus    = new MockMembershipServiceBusRepository();
            var mail          = new MockMailRepository();
            var mailAddresses = new MockEmail <IEmailSenderRecipient>();
            var syncJobs      = new MockSyncJobRepository();
            var dryRun        = new MockDryRunValue()
            {
                DryRunEnabled = false
            };

            var calc = new SGMembershipCalculator(graphRepo, serviceBus, mail, mailAddresses, syncJobs, new MockLoggingRepository(), dryRun);

            var testJob = new SyncJob
            {
                RowKey              = "row",
                PartitionKey        = "partition",
                TargetOfficeGroupId = destinationGroup,
                Query  = string.Join(';', sourceGroups) + $";{Guid.NewGuid()}",
                Status = "InProgress"
            };

            syncJobs.ExistingSyncJobs.Add((testJob.RowKey, testJob.PartitionKey), testJob);

            var groups = calc.ReadSourceGroups(testJob);

            foreach (var group in groups)
            {
                var groupExistsResult = await calc.GroupExistsAsync(group.ObjectId, Guid.NewGuid());

                Assert.AreEqual(false, groupExistsResult.Result);
            }
            Assert.IsNull(serviceBus.Sent);
        }
Пример #6
0
        public async Task ProperlyErrorsOnAllNonexistentGroups()
        {
            Guid[] sourceGroups     = Enumerable.Range(0, 5).Select(_ => Guid.NewGuid()).ToArray();
            Guid   destinationGroup = Guid.NewGuid();

            var graphRepo = new MockGraphGroupRepository()
            {
                GroupsToUsers = new Dictionary <Guid, List <AzureADUser> >()
            };
            var serviceBus = new MockMembershipServiceBusRepository();

            var calc = new SGMembershipCalculator(graphRepo, serviceBus, new MockLogger());

            await calc.SendMembership(new SyncJob
            {
                TargetOfficeGroupId = destinationGroup,
                Query = string.Join(';', sourceGroups) + $";{Guid.NewGuid()}"
            });

            Assert.IsTrue(serviceBus.Sent.Errored);
            Assert.AreEqual(0, serviceBus.Sent.SourceMembers.Count);
        }
Пример #7
0
        public async Task ProperlyGetsAndSendsMembershipWithMultipleSources(int getGroupExceptions, int getMembersExceptions)
        {
            const int userCount = 2500213;

            Guid[] sourceGroups     = Enumerable.Range(0, 5).Select(_ => Guid.NewGuid()).ToArray();
            Guid   destinationGroup = Guid.NewGuid();
            var    allUsers         = new List <AzureADUser> {
            };

            var mockGroups = new Dictionary <Guid, List <AzureADUser> >();

            for (int i = 0; i < userCount; i++)
            {
                var currentGroup = sourceGroups[i % sourceGroups.Length];
                var userToAdd    = new AzureADUser {
                    ObjectId = Guid.NewGuid()
                };
                if (mockGroups.TryGetValue(currentGroup, out var users))
                {
                    users.Add(userToAdd);
                }
                else
                {
                    mockGroups.Add(currentGroup, new List <AzureADUser> {
                        userToAdd
                    });
                }
            }

            var graphRepo = new MockGraphGroupRepository()
            {
                GroupsToUsers = mockGroups,
                ThrowSocketExceptionsFromGroupExistsBeforeSuccess     = getGroupExceptions,
                ThrowSocketExceptionsFromGetUsersInGroupBeforeSuccess = getMembersExceptions
            };
            var serviceBus    = new MockMembershipServiceBusRepository();
            var mail          = new MockMailRepository();
            var mailAddresses = new MockEmail <IEmailSenderRecipient>();
            var syncJobs      = new MockSyncJobRepository();
            var dryRun        = new MockDryRunValue()
            {
                DryRunEnabled = false
            };

            var calc = new SGMembershipCalculator(graphRepo, serviceBus, mail, mailAddresses, syncJobs, new MockLoggingRepository(), dryRun);

            var testJob = new SyncJob
            {
                RowKey              = "row",
                PartitionKey        = "partition",
                TargetOfficeGroupId = destinationGroup,
                Query  = string.Join(';', sourceGroups),
                Status = "InProgress"
            };

            syncJobs.ExistingSyncJobs.Add((testJob.RowKey, testJob.PartitionKey), testJob);

            var groups = calc.ReadSourceGroups(testJob);
            await calc.SendMembershipAsync(testJob, Guid.NewGuid(), allUsers);

            foreach (var group in groups)
            {
                var groupExistsResult = await calc.GroupExistsAsync(group.ObjectId, Guid.NewGuid());

                Assert.AreEqual(OutcomeType.Successful, groupExistsResult.Outcome);
                Assert.AreEqual(true, groupExistsResult.Result);
            }
        }
Пример #8
0
        public async Task IgnoresNonGuidArguments(int getGroupExceptions, int getMembersExceptions)
        {
            const int userCount = 2500213;

            Guid[] sourceGroups     = Enumerable.Range(0, 5).Select(_ => Guid.NewGuid()).ToArray();
            Guid   destinationGroup = Guid.NewGuid();

            var mockGroups = new Dictionary <Guid, List <AzureADUser> >();

            for (int i = 0; i < userCount; i++)
            {
                var currentGroup = sourceGroups[i % sourceGroups.Length];
                var userToAdd    = new AzureADUser {
                    ObjectId = Guid.NewGuid()
                };
                if (mockGroups.TryGetValue(currentGroup, out var users))
                {
                    users.Add(userToAdd);
                }
                else
                {
                    mockGroups.Add(currentGroup, new List <AzureADUser> {
                        userToAdd
                    });
                }
            }

            var graphRepo = new MockGraphGroupRepository()
            {
                GroupsToUsers = mockGroups,
                ThrowSocketExceptionsFromGroupExistsBeforeSuccess     = getGroupExceptions,
                ThrowSocketExceptionsFromGetUsersInGroupBeforeSuccess = getMembersExceptions
            };
            var serviceBus    = new MockMembershipServiceBusRepository();
            var mail          = new MockMailRepository();
            var mailAddresses = new MockEmail <IEmailSenderRecipient>();
            var syncJobs      = new MockSyncJobRepository();
            var dryRun        = new MockDryRunValue()
            {
                DryRunEnabled = false
            };

            var calc = new SGMembershipCalculator(graphRepo, serviceBus, mail, mailAddresses, syncJobs, new MockLoggingRepository(), dryRun);

            var testJob = new SyncJob
            {
                RowKey              = "row",
                PartitionKey        = "partition",
                TargetOfficeGroupId = destinationGroup,
                Query  = string.Join(';', sourceGroups) + ";nasdfasfd;;;",
                Status = "InProgress"
            };

            syncJobs.ExistingSyncJobs.Add((testJob.RowKey, testJob.PartitionKey), testJob);
            var groups = calc.ReadSourceGroups(testJob);

            foreach (var group in groups)
            {
                await calc.SendEmailAsync(testJob, Guid.NewGuid(), "Content", null);
            }
            Assert.IsNull(serviceBus.Sent);
        }