Exemple #1
0
        public void CreateResource(AcmaResource resource)
        {
            try
            {
                Monitor.Enter(ServiceMain.Lock);

                if (resource.ObjectID == Guid.Empty)
                {
                    resource.ObjectID = new Guid();
                }

                CSEntryChange csentry = CSEntryChangeDetached.Create();
                csentry.ObjectModificationType = ObjectModificationType.Add;
                csentry.DN         = resource.ObjectID.ToString();
                csentry.ObjectType = resource.ObjectType;

                foreach (var item in resource.Attributes)
                {
                    csentry.AttributeChanges.Add(this.AvpToAttributeChange(item, AttributeModificationType.Add));
                }

                bool refRetry;
                CSEntryExport.PutExportEntry(csentry, out refRetry);
            }
            finally
            {
                Monitor.Exit(ServiceMain.Lock);
            }
        }
Exemple #2
0
        public override void Execute()
        {
            bool refRetryRequired = false;

            this.PrepCSEntryChange();

            CSEntryExport.PutExportEntry(this.CSEntryChange, out refRetryRequired);

            if (refRetryRequired)
            {
                throw new ReferencedObjectNotPresentException();
            }
        }
Exemple #3
0
        public void DeleteResource(string id)
        {
            try
            {
                Monitor.Enter(ServiceMain.Lock);
                CSEntryChange csentry = CSEntryChangeDetached.Create();
                csentry.ObjectModificationType = ObjectModificationType.Delete;
                csentry.DN = id;

                bool refRetry;
                CSEntryExport.PutExportEntry(csentry, out refRetry);
            }
            finally
            {
                Monitor.Exit(ServiceMain.Lock);
            }
        }
        public ExportResponse ExportPage(ExportRequest request)
        {
            try
            {
                Monitor.Enter(ServiceMain.Lock);

                ExportResponse response = new ExportResponse();
                response.Results = new List <CSEntryChangeResult>();
                IList <AttributeChange> anchorchanges;

                foreach (CSEntryChange csentryChange in request.CSEntryChanges)
                {
                    try
                    {
                        bool referenceRetryRequired;
                        anchorchanges = CSEntryExport.PutExportEntry(csentryChange, out referenceRetryRequired);

                        if (referenceRetryRequired)
                        {
                            Logger.WriteLine(string.Format("Reference attribute not available for csentry {0}. Flagging for retry", csentryChange.DN));
                            response.Results.Add(CSEntryChangeResult.Create(csentryChange.Identifier, anchorchanges, MAExportError.ExportActionRetryReferenceAttribute));
                        }
                        else
                        {
                            response.Results.Add(CSEntryChangeResult.Create(csentryChange.Identifier, anchorchanges, MAExportError.Success));
                        }
                    }
                    catch (Exception ex)
                    {
                        MAStatistics.AddExportError();

                        response.Results.Add(this.GetExportChangeResultFromException(csentryChange, ex));
                    }
                }

                return(response);
            }
            finally
            {
                Monitor.Exit(ServiceMain.Lock);
            }
        }
Exemple #5
0
        public void ReplaceResource(string id, AcmaResource resource)
        {
            try
            {
                Monitor.Enter(ServiceMain.Lock);
                CSEntryChange csentry = CSEntryChangeDetached.Create();
                csentry.ObjectModificationType = ObjectModificationType.Replace;
                csentry.DN = id;

                foreach (var item in resource.Attributes)
                {
                    csentry.AttributeChanges.Add(this.AvpToAttributeChange(item, AttributeModificationType.Add));
                }

                bool refRetry;
                CSEntryExport.PutExportEntry(csentry, out refRetry);
            }
            finally
            {
                Monitor.Exit(ServiceMain.Lock);
            }
        }
Exemple #6
0
        public void ExportCSEntryChangeDelete()
        {
            Guid          id      = Guid.NewGuid();
            CSEntryChange csentry = CSEntryChange.Create();

            csentry.DN = id.ToString();
            csentry.ObjectModificationType = ObjectModificationType.Add;
            csentry.ObjectType             = "person";
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("mail", "*****@*****.**"));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("mailAlternateAddresses", new List <object> {
                "*****@*****.**", "*****@*****.**"
            }));

            try
            {
                bool refretry;
                CSEntryExport.PutExportEntry(csentry, out refretry);

                csentry    = CSEntryChange.Create();
                csentry.DN = id.ToString();
                csentry.ObjectModificationType = ObjectModificationType.Delete;
                csentry.ObjectType             = "person";
                AcmaSchemaObjectClass objectClass = ActiveConfig.DB.GetObjectClass("person");

                CSEntryExport.PutExportEntry(csentry, out refretry);

                MAObjectHologram sourceObject = ActiveConfig.DB.GetMAObject(id, objectClass);

                if (sourceObject.DeletedTimestamp == 0)
                {
                    Assert.Fail("The object was not deleted");
                }
            }
            finally
            {
                ActiveConfig.DB.DeleteMAObjectPermanent(id);
            }
        }
Exemple #7
0
        public override void Execute()
        {
            if (this.CSEntryChange.ObjectModificationType != ObjectModificationType.Add)
            {
                if (this.CSEntryChange.ObjectModificationType == ObjectModificationType.Unconfigured)
                {
                    this.CSEntryChange.ObjectModificationType = ObjectModificationType.Add;
                }
                else
                {
                    throw new InvalidOperationException(string.Format("The CSEntryChange in unit test step {0} contained an invalid modification type", this.Name));
                }
            }

            bool refRetryRequired = false;

            CSEntryExport.PutExportEntry(this.CSEntryChange, out refRetryRequired);

            if (refRetryRequired)
            {
                throw new ReferencedObjectNotPresentException();
            }
        }
Exemple #8
0
        public void ExportCSEntryChangeAdd()
        {
            Guid          id      = Guid.NewGuid();
            CSEntryChange csentry = CSEntryChange.Create();

            csentry.DN = id.ToString();
            csentry.ObjectModificationType = ObjectModificationType.Add;
            csentry.ObjectType             = "person";
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("mail", "*****@*****.**"));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("mailAlternateAddresses", new List <object> {
                "*****@*****.**", "*****@*****.**"
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("unixUid", 44L));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("expiryDates", new List <object>()
            {
                55L, 66L, 77L
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("directReports", new List <object>()
            {
                new Guid("{8FC92471-7835-4804-8BBB-0A5ED7078074}"), new Guid("{0EF7CC21-729E-4ED9-A3AF-8203796334C6}")
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("supervisor", new Guid("{2807ED76-E262-4EB4-ABD9-9629F3830F12}")));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("connectedToSap", true));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("dateTimeMV", new List <object>()
            {
                DateTime.Parse("2010-01-01"), DateTime.Parse("2011-01-01")
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("dateTimeSV", DateTime.Parse("2012-01-01")));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("objectSids", new List <object>()
            {
                new byte[] { 0, 1, 2, 3, 4, 5 }, new byte[] { 2, 4, 6, 8, 0 }
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("objectSid", new byte[] { 0, 1, 2, 3, 4 }));
            AcmaSchemaObjectClass objectClass = ActiveConfig.DB.GetObjectClass("person");

            try
            {
                bool refretry;
                CSEntryExport.PutExportEntry(csentry, out refretry);

                MAObjectHologram sourceObject = ActiveConfig.DB.GetMAObject(id, objectClass);

                if (sourceObject.GetSVAttributeValue(ActiveConfig.DB.GetAttribute("mail")).ValueString != "*****@*****.**")
                {
                    Assert.Fail("One or more attribute changes were not committed");
                }

                if (sourceObject.GetSVAttributeValue(ActiveConfig.DB.GetAttribute("dateTimeSV")).ValueDateTime != DateTime.Parse("2012-01-01"))
                {
                    Assert.Fail("One or more attribute changes were not committed");
                }

                if (sourceObject.GetSVAttributeValue(ActiveConfig.DB.GetAttribute("unixUid")).ValueLong != 44L)
                {
                    Assert.Fail("One or more attribute changes were not committed");
                }

                if (sourceObject.GetSVAttributeValue(ActiveConfig.DB.GetAttribute("connectedToSap")).ValueBoolean != true)
                {
                    Assert.Fail("One or more attribute changes were not committed");
                }

                if (!sourceObject.GetSVAttributeValue(ActiveConfig.DB.GetAttribute("objectSid")).ValueByte.SequenceEqual(new byte[] { 0, 1, 2, 3, 4 }))
                {
                    Assert.Fail("One or more attribute changes were not committed");
                }

                if (sourceObject.GetSVAttributeValue(ActiveConfig.DB.GetAttribute("supervisor")).ValueGuid != new Guid("{2807ED76-E262-4EB4-ABD9-9629F3830F12}"))
                {
                    Assert.Fail("One or more attribute changes were not committed");
                }

                if (!sourceObject.GetMVAttributeValues(ActiveConfig.DB.GetAttribute("mailAlternateAddresses")).ContainsAllElements(new List <object> {
                    "*****@*****.**", "*****@*****.**"
                }))
                {
                    Assert.Fail("One or more attribute changes were not committed");
                }

                if (!sourceObject.GetMVAttributeValues(ActiveConfig.DB.GetAttribute("expiryDates")).ContainsAllElements(new List <object>()
                {
                    55L, 66L, 77L
                }))
                {
                    Assert.Fail("One or more attribute changes were not committed");
                }

                if (!sourceObject.GetMVAttributeValues(ActiveConfig.DB.GetAttribute("dateTimeMV")).ContainsAllElements(new List <object>()
                {
                    DateTime.Parse("2010-01-01"), DateTime.Parse("2011-01-01")
                }))
                {
                    Assert.Fail("One or more attribute changes were not committed");
                }

                if (!sourceObject.GetMVAttributeValues(ActiveConfig.DB.GetAttribute("directReports")).ContainsAllElements(new List <object>()
                {
                    new Guid("{8FC92471-7835-4804-8BBB-0A5ED7078074}"), new Guid("{0EF7CC21-729E-4ED9-A3AF-8203796334C6}")
                }))
                {
                    Assert.Fail("One or more attribute changes were not committed");
                }

                if (!sourceObject.GetMVAttributeValues(ActiveConfig.DB.GetAttribute("objectSids")).ContainsAllElements(new List <object>()
                {
                    new byte[] { 0, 1, 2, 3, 4, 5 }, new byte[] { 2, 4, 6, 8, 0 }
                }))
                {
                    Assert.Fail("One or more attribute changes were not committed");
                }
            }
            finally
            {
                ActiveConfig.DB.DeleteMAObjectPermanent(id);
            }
        }
Exemple #9
0
        public void ExportCSEntryChangeAddResurrect()
        {
            Guid originalId    = Guid.NewGuid();
            Guid replacementId = Guid.NewGuid();

            if (!ActiveConfig.XmlConfig.ClassConstructors.Contains("person"))
            {
                ActiveConfig.XmlConfig.ClassConstructors.Add(new ClassConstructor()
                {
                    ObjectClass = ActiveConfig.DB.GetObjectClass("person")
                });
            }

            ActiveConfig.XmlConfig.ClassConstructors["person"].ResurrectionParameters          = new DBQueryGroup();
            ActiveConfig.XmlConfig.ClassConstructors["person"].ResurrectionParameters.Operator = GroupOperator.Any;
            DBQueryByValue query = new DBQueryByValue(ActiveConfig.DB.GetAttribute("sapPersonId"), ValueOperator.Equals, ActiveConfig.DB.GetAttribute("sapPersonId"));

            ActiveConfig.XmlConfig.ClassConstructors["person"].ResurrectionParameters.DBQueries.Add(query);


            CSEntryChange csentry = CSEntryChange.Create();

            csentry.DN = originalId.ToString();
            csentry.ObjectModificationType = ObjectModificationType.Add;
            csentry.ObjectType             = "person";
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("mail", "*****@*****.**"));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("mailAlternateAddresses", new List <object> {
                "*****@*****.**", "*****@*****.**"
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("unixUid", 44L));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("expiryDates", new List <object>()
            {
                55L, 66L, 77L
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("directReports", new List <object>()
            {
                new Guid("{8FC92471-7835-4804-8BBB-0A5ED7078074}"), new Guid("{0EF7CC21-729E-4ED9-A3AF-8203796334C6}")
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("supervisor", new Guid("{2807ED76-E262-4EB4-ABD9-9629F3830F12}")));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("connectedToSap", true));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("objectSids", new List <object>()
            {
                new byte[] { 0, 1, 2, 3, 4, 5 }, new byte[] { 2, 4, 6, 8, 0 }
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("objectSid", new byte[] { 0, 1, 2, 3, 4 }));

            try
            {
                bool refretry;
                CSEntryExport.PutExportEntry(csentry, out refretry);
                AcmaSchemaObjectClass objectClass = ActiveConfig.DB.GetObjectClass("person");

                MAObjectHologram originalObject = ActiveConfig.DB.GetMAObject(originalId, objectClass);
                originalObject.SetObjectModificationType(ObjectModificationType.Update, false);
                originalObject.SetAttributeValue(ActiveConfig.DB.GetAttribute("sapPersonId"), 7777L);
                originalObject.SetAttributeValue(ActiveConfig.DB.GetAttribute("accountName"), "jesus");
                originalObject.DeletedTimestamp = DateTime.UtcNow.Ticks;
                originalObject.CommitCSEntryChange();

                csentry    = CSEntryChange.Create();
                csentry.DN = replacementId.ToString();
                csentry.ObjectModificationType = ObjectModificationType.Add;
                csentry.ObjectType             = "person";
                csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("mail", "*****@*****.**"));
                csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("sapPersonId", 7777L));

                CSEntryExport.PutExportEntry(csentry, out refretry);

                MAObjectHologram newObject = ActiveConfig.DB.GetMAObjectOrDefault(replacementId);

                if (newObject == null)
                {
                    Assert.Fail("The object with the new ID was not found");
                }

                if (newObject.GetSVAttributeValue(ActiveConfig.DB.GetAttribute("accountName")) != "jesus")
                {
                    Assert.Fail("The object was not resurrected");
                }

                if (newObject.DeletedTimestamp != 0)
                {
                    Assert.Fail("The object was not undeleted");
                }

                originalObject = ActiveConfig.DB.GetMAObjectOrDefault(originalId);

                if (originalObject != null)
                {
                    Assert.Fail("The original object still exists");
                }
            }
            finally
            {
                ActiveConfig.DB.DeleteMAObjectPermanent(originalId);
                ActiveConfig.DB.DeleteMAObjectPermanent(replacementId);
            }
        }
Exemple #10
0
        protected override void ProcessRecord()
        {
            Global.ThrowIfNotConnected(this);

            try
            {
                MAStatistics.StartOperation(MAOperationType.Export);
                ActiveConfig.DB.CanCache = true;

                Console.WriteLine("Reading import file... ");

                StreamReader r      = new StreamReader(this.FileName);
                XmlReader    reader = XmlReader.Create(r);
                var          doc    = XDocument.Load(reader);

                Console.WriteLine("Importing objects... ");
                this.totalObjectCount = doc.Root.Elements().Count();
                ProgressRecord progress = new ProgressRecord(0, "Import", "Starting import");

                this.operationStartTime      = DateTime.Now;
                this.sampleIntervalStartTime = DateTime.Now;

                this.timer          = new Timer(1000);
                this.timer.Elapsed += this.timer_Elapsed;
                this.timer.Start();

                progress.RecordType      = ProgressRecordType.Processing;
                progress.PercentComplete = 0;
                this.WriteProgress(progress);

                foreach (var node in doc.Root.Elements("object-change"))
                {
                    bool refretry;
                    //XElement element = node;
                    AcmaCSEntryChange csentry = CSEntryChangeXmlImport.ImportFromXml(node, !this.IgnoreMissingAttributes.IsPresent);

                    progress.PercentComplete   = Convert.ToInt32(((decimal)this.currentObjectCount / this.totalObjectCount) * 100);
                    progress.StatusDescription = string.Format("Importing {0}/{1}... {2} ({3} objects/sec)", this.currentObjectCount, this.totalObjectCount, csentry.DN, this.sampleOpsSec);
                    progress.CurrentOperation  = string.Format("Average rate: {0} objects/sec", this.averageOpsSec);
                    progress.SecondsRemaining  = this.secondsRemaining;

                    this.WriteProgress(progress);

                    try
                    {
                        CSEntryExport.PutExportEntry(csentry, out refretry);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Error importing object {0}: {1}: {2}", this.currentObjectCount, csentry.DN, ex.Message);
                    }

                    this.currentObjectCount++;
                }

                progress.RecordType = ProgressRecordType.Completed;
                WriteProgress(progress);

                Console.WriteLine("Done");
                MAStatistics.StopOperation();
                Console.WriteLine(MAStatistics.ToString());
            }
            catch (Exception ex)
            {
                Logger.WriteException(ex);
                ErrorRecord error = new ErrorRecord(ex, "UnknownError", ErrorCategory.NotSpecified, this.FileName);
                ThrowTerminatingError(error);
            }
            finally
            {
                if (this.timer != null)
                {
                    this.timer.Stop();
                    this.timer.Elapsed -= this.timer_Elapsed;
                }
            }
        }
        public void ImportCSEntryChangeTest()
        {
            List <AcmaSchemaAttribute> attributes = new List <AcmaSchemaAttribute>();

            attributes.Add(ActiveConfig.DB.GetAttribute("mail"));
            attributes.Add(ActiveConfig.DB.GetAttribute("unixUid"));
            attributes.Add(ActiveConfig.DB.GetAttribute("supervisor"));
            attributes.Add(ActiveConfig.DB.GetAttribute("connectedToSap"));
            attributes.Add(ActiveConfig.DB.GetAttribute("objectSid"));
            attributes.Add(ActiveConfig.DB.GetAttribute("mailAlternateAddresses"));
            attributes.Add(ActiveConfig.DB.GetAttribute("expiryDates"));
            attributes.Add(ActiveConfig.DB.GetAttribute("directReports"));
            attributes.Add(ActiveConfig.DB.GetAttribute("objectSids"));
            attributes.Add(ActiveConfig.DB.GetAttribute("dateTimeSV"));
            attributes.Add(ActiveConfig.DB.GetAttribute("dateTimeMV"));


            Guid          id      = Guid.NewGuid();
            CSEntryChange csentry = CSEntryChange.Create();

            csentry.DN = id.ToString();
            csentry.ObjectModificationType = ObjectModificationType.Add;
            csentry.ObjectType             = "person";
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("mail", "*****@*****.**"));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("mailAlternateAddresses", new List <object> {
                "*****@*****.**", "*****@*****.**"
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("unixUid", 44L));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("expiryDates", new List <object>()
            {
                55L, 66L, 77L
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("directReports", new List <object>()
            {
                new Guid("{8FC92471-7835-4804-8BBB-0A5ED7078074}"), new Guid("{0EF7CC21-729E-4ED9-A3AF-8203796334C6}")
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("supervisor", new Guid("{2807ED76-E262-4EB4-ABD9-9629F3830F12}")));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("connectedToSap", true));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("objectSids", new List <object>()
            {
                new byte[] { 0, 1, 2, 3, 4, 5 }, new byte[] { 2, 4, 6, 8, 0 }
            }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("objectSid", new byte[] { 0, 1, 2, 3, 4 }));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("dateTimeSV", "2010-01-01"));
            csentry.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("dateTimeMV", "2011-01-01"));

            AcmaSchemaObjectClass objectClass = ActiveConfig.DB.GetObjectClass("person");

            try
            {
                bool refretry;
                CSEntryExport.PutExportEntry(csentry, out refretry);

                MAObjectHologram sourceObject     = ActiveConfig.DB.GetMAObject(id, objectClass);
                CSEntryChange    generatedCSEntry = sourceObject.ToCSEntryChange( );

                if (generatedCSEntry.ErrorCodeImport != MAImportError.Success)
                {
                    Assert.Fail("The CSEntryChange generator failed to generate the object");
                }

                AttributeValue value;

                value = new AttributeValue(ActiveConfig.DB.GetAttribute("mail"), generatedCSEntry.AttributeChanges["mail"].ValueChanges.FirstOrDefault(t => t.ModificationType == ValueModificationType.Add).Value);
                if (value != "*****@*****.**")
                {
                    Assert.Fail("One or more attribute changes were not generated");
                }

                value = new AttributeValue(ActiveConfig.DB.GetAttribute("unixUid"), generatedCSEntry.AttributeChanges["unixUid"].ValueChanges.FirstOrDefault(t => t.ModificationType == ValueModificationType.Add).Value);
                if (value != 44L)
                {
                    Assert.Fail("One or more attribute changes were not generated");
                }

                value = new AttributeValue(ActiveConfig.DB.GetAttribute("connectedToSap"), generatedCSEntry.AttributeChanges["connectedToSap"].ValueChanges.FirstOrDefault(t => t.ModificationType == ValueModificationType.Add).Value);
                if (value != true)
                {
                    Assert.Fail("One or more attribute changes were not generated");
                }

                value = new AttributeValue(ActiveConfig.DB.GetAttribute("objectSid"), generatedCSEntry.AttributeChanges["objectSid"].ValueChanges.FirstOrDefault(t => t.ModificationType == ValueModificationType.Add).Value);
                if (value != new byte[] { 0, 1, 2, 3, 4 })
                {
                    Assert.Fail("One or more attribute changes were not generated");
                }

                value = new AttributeValue(ActiveConfig.DB.GetAttribute("supervisor"), generatedCSEntry.AttributeChanges["supervisor"].ValueChanges.FirstOrDefault(t => t.ModificationType == ValueModificationType.Add).Value);
                if (value != new Guid("{2807ED76-E262-4EB4-ABD9-9629F3830F12}"))
                {
                    Assert.Fail("One or more attribute changes were not generated");
                }

                string dateValue = generatedCSEntry.AttributeChanges["dateTimeSV"].ValueChanges.FirstOrDefault(t => t.ModificationType == ValueModificationType.Add).Value as string;
                if (dateValue != "2010-01-01T00:00:00.000")
                {
                    Assert.Fail("One or more attribute changes were not generated");
                }

                AttributeValues values = new InternalAttributeValues(ActiveConfig.DB.GetAttribute("mailAlternateAddresses"), generatedCSEntry.AttributeChanges["mailAlternateAddresses"].ValueChanges.Where(t => t.ModificationType == ValueModificationType.Add).Select(t => t.Value).ToList());
                if (!values.ContainsAllElements(new List <object> {
                    "*****@*****.**", "*****@*****.**"
                }))
                {
                    Assert.Fail("One or more attribute changes were not generated");
                }

                List <string> list = generatedCSEntry.AttributeChanges["dateTimeMV"].ValueChanges.Where(t => t.ModificationType == ValueModificationType.Add).Select(t => t.Value).Cast <string>().ToList();
                if (!list.ContainsSameElements(new List <object> {
                    "2011-01-01T00:00:00.000"
                }))
                {
                    Assert.Fail("One or more attribute changes were not generated");
                }

                values = new InternalAttributeValues(ActiveConfig.DB.GetAttribute("expiryDates"), generatedCSEntry.AttributeChanges["expiryDates"].ValueChanges.Where(t => t.ModificationType == ValueModificationType.Add).Select(t => t.Value).ToList());
                if (!values.ContainsAllElements(new List <object>()
                {
                    55L, 66L, 77L
                }))
                {
                    Assert.Fail("One or more attribute changes were not generated");
                }

                values = new InternalAttributeValues(ActiveConfig.DB.GetAttribute("directReports"), generatedCSEntry.AttributeChanges["directReports"].ValueChanges.Where(t => t.ModificationType == ValueModificationType.Add).Select(t => t.Value).ToList());
                if (!values.ContainsAllElements(new List <object>()
                {
                    new Guid("{8FC92471-7835-4804-8BBB-0A5ED7078074}"), new Guid("{0EF7CC21-729E-4ED9-A3AF-8203796334C6}")
                }))
                {
                    Assert.Fail("One or more attribute changes were not generated");
                }

                values = new InternalAttributeValues(ActiveConfig.DB.GetAttribute("objectSids"), generatedCSEntry.AttributeChanges["objectSids"].ValueChanges.Where(t => t.ModificationType == ValueModificationType.Add).Select(t => t.Value).ToList());
                if (!values.ContainsAllElements(new List <object>()
                {
                    new byte[] { 0, 1, 2, 3, 4, 5 }, new byte[] { 2, 4, 6, 8, 0 }
                }))
                {
                    Assert.Fail("One or more attribute changes were not generated");
                }
            }
            finally
            {
                ActiveConfig.DB.DeleteMAObjectPermanent(id);
            }
        }