public static bool AreEqual(Models.RecordSet first, Models.RecordSet second, bool ignoreEtag = false)
        {
            if (!AreEqualPrereq(first, second))
            {
                return(false);
            }

            if (first != null && second != null)
            {
                if (first.Properties == null && second.Properties == null)
                {
                    return(true);
                }

                if (first.Properties == null || second.Properties == null)
                {
                    return(false);
                }

                return((ignoreEtag || (first.ETag == second.ETag)) &&
                       first.Properties.Ttl == second.Properties.Ttl &&
                       AreEqual(first.Properties.ARecords, second.Properties.ARecords) &&
                       AreEqual(first.Properties.AaaaRecords, second.Properties.AaaaRecords) &&
                       AreEqual(first.Properties.MxRecords, second.Properties.MxRecords) &&
                       AreEqual(first.Properties.NsRecords, second.Properties.NsRecords) &&
                       AreEqual(first.Properties.PtrRecords, second.Properties.PtrRecords) &&
                       AreEqual(first.Properties.SrvRecords, second.Properties.SrvRecords) &&
                       AreEqual(first.Properties.CnameRecord, second.Properties.CnameRecord) &&
                       AreEqual(first.Properties.SoaRecord, second.Properties.SoaRecord));
            }

            return(true);
        }
Example #2
0
        public static bool AreEqual(
            Models.RecordSet first,
            Models.RecordSet second,
            bool ignoreEtag = false)
        {
            //if (!AreEqualPrereq(first, second))
            //{
            //    return false;
            //}

            if (first != null && second != null)
            {
                return((ignoreEtag || (first.Etag == second.Etag)) &&
                       first.TTL == second.TTL &&
                       AreEqual(first.ARecords, second.ARecords) &&
                       AreEqual(first.AaaaRecords, second.AaaaRecords) &&
                       AreEqual(first.MxRecords, second.MxRecords) &&
                       AreEqual(first.NsRecords, second.NsRecords) &&
                       AreEqual(first.PtrRecords, second.PtrRecords) &&
                       AreEqual(first.SrvRecords, second.SrvRecords) &&
                       AreEqual(first.CnameRecord, second.CnameRecord) &&
                       AreEqual(first.SoaRecord, second.SoaRecord));
            }

            return(true);
        }
        public void CrudRecordSetFullCycle()
        {
            using (UndoContext context = UndoContext.Current)
            {
                context.Start();
                SingleRecordSetTestContext        testContext      = SetupSingleRecordSetTest();
                RecordSetCreateOrUpdateParameters createParameters = testContext.TestRecordSkeleton;
                createParameters.RecordSet.Properties.ARecords = new List <ARecord> {
                    new ARecord {
                        Ipv4Address = "123.32.1.0"
                    }
                };
                createParameters.RecordSet.Properties.Ttl = 60;

                // Create the records clean, verify response
                RecordSetCreateOrUpdateResponse createResponse = testContext.DnsClient.RecordSets.CreateOrUpdate(
                    testContext.ResourceGroup.Name,
                    testContext.ZoneName,
                    testContext.RecordSetName,
                    RecordType.A,
                    createParameters);

                Assert.Equal(HttpStatusCode.Created, createResponse.StatusCode);
                Assert.True(
                    TestHelpers.AreEqual(createParameters.RecordSet, createResponse.RecordSet, ignoreEtag: true),
                    "Response body of Create does not match expectations");
                Assert.False(string.IsNullOrWhiteSpace(createResponse.RecordSet.ETag));

                // Retrieve the zone after create, verify response
                var getresponse = testContext.DnsClient.RecordSets.Get(
                    testContext.ResourceGroup.Name,
                    testContext.ZoneName,
                    testContext.RecordSetName,
                    RecordType.A);

                Assert.Equal(HttpStatusCode.OK, getresponse.StatusCode);
                Assert.True(
                    TestHelpers.AreEqual(createResponse.RecordSet, getresponse.RecordSet, ignoreEtag: false),
                    "Response body of Get does not match expectations");

                // Call Update on the object returned by Create (important distinction from Get below)
                Models.RecordSet createdRecordSet = createResponse.RecordSet;
                createdRecordSet.Tags = new Dictionary <string, string> {
                    { "tag1", "value1" }, { "tag2", "value2" }
                };
                createdRecordSet.Properties.Ttl      = 120;
                createdRecordSet.Properties.ARecords = new List <ARecord>
                {
                    new ARecord {
                        Ipv4Address = "123.32.1.0"
                    },
                    new ARecord {
                        Ipv4Address = "101.10.0.1"
                    }
                };

                RecordSetCreateOrUpdateResponse updateResponse = testContext.DnsClient.RecordSets.CreateOrUpdate(
                    testContext.ResourceGroup.Name,
                    testContext.ZoneName,
                    testContext.RecordSetName,
                    RecordType.A,
                    new RecordSetCreateOrUpdateParameters {
                    RecordSet = createdRecordSet
                });

                Assert.Equal(HttpStatusCode.OK, updateResponse.StatusCode);
                Assert.True(
                    TestHelpers.AreEqual(createdRecordSet, updateResponse.RecordSet, ignoreEtag: true),
                    "Response body of Update does not match expectations");
                Assert.False(string.IsNullOrWhiteSpace(updateResponse.RecordSet.ETag));

                // Retrieve the records after create, verify response
                getresponse = testContext.DnsClient.RecordSets.Get(
                    testContext.ResourceGroup.Name,
                    testContext.ZoneName,
                    testContext.RecordSetName,
                    RecordType.A);

                Assert.Equal(HttpStatusCode.OK, getresponse.StatusCode);
                Assert.True(
                    TestHelpers.AreEqual(updateResponse.RecordSet, getresponse.RecordSet),
                    "Response body of Get does not match expectations");

                // Call Update on the object returned by Get (important distinction from Create above)
                Models.RecordSet retrievedRecordSet = getresponse.RecordSet;
                retrievedRecordSet.Tags = new Dictionary <string, string> {
                    { "tag1", "value1" }, { "tag2", "value2" }, { "tag3", "value3" }
                };
                retrievedRecordSet.Properties.Ttl      = 180;
                retrievedRecordSet.Properties.ARecords = new List <ARecord>
                {
                    new ARecord {
                        Ipv4Address = "123.32.1.0"
                    },
                    new ARecord {
                        Ipv4Address = "101.10.0.1"
                    },
                    new ARecord {
                        Ipv4Address = "22.33.44.55"
                    },
                };

                updateResponse = testContext.DnsClient.RecordSets.CreateOrUpdate(
                    testContext.ResourceGroup.Name,
                    testContext.ZoneName,
                    testContext.RecordSetName,
                    RecordType.A,
                    new RecordSetCreateOrUpdateParameters {
                    RecordSet = retrievedRecordSet
                });

                Assert.Equal(HttpStatusCode.OK, updateResponse.StatusCode);
                Assert.True(
                    TestHelpers.AreEqual(retrievedRecordSet, updateResponse.RecordSet, ignoreEtag: true),
                    "Response body of Update does not match expectations");
                Assert.False(string.IsNullOrWhiteSpace(updateResponse.RecordSet.ETag));

                // Delete the record set
                AzureOperationResponse deleteResponse = testContext.DnsClient.RecordSets.Delete(
                    testContext.ResourceGroup.Name,
                    testContext.ZoneName,
                    testContext.RecordSetName,
                    RecordType.A,
                    new RecordSetDeleteParameters());
                Assert.Equal(HttpStatusCode.OK, deleteResponse.StatusCode);

                // Delete the zone
                deleteResponse = testContext.DnsClient.Zones.Delete(
                    testContext.ResourceGroup.Name,
                    testContext.ZoneName,
                    new ZoneDeleteParameters());
            }
        }
        public void CrudRecordSetFullCycle()
        {
            using (
                MockContext context = MockContext.Start(this.GetType().FullName)
                )
            {
                var testContexts = SetupSingleRecordSetTestContexts(context);
                foreach (var testContext in testContexts)
                {
                    var recordSetToBeCreated = testContext.TestRecordSkeleton;
                    recordSetToBeCreated.ARecords = new List <ARecord>
                    {
                        new ARecord {
                            Ipv4Address = "123.32.1.0"
                        }
                    };
                    recordSetToBeCreated.TTL = 60;

                    // Create the records clean, verify response
                    var createResponse = testContext.DnsClient.RecordSets
                                         .CreateOrUpdate(
                        testContext.ResourceGroup.Name,
                        testContext.ZoneName,
                        testContext.RecordSetName,
                        RecordType.A,
                        ifMatch: null,
                        ifNoneMatch: null,
                        parameters: recordSetToBeCreated);

                    Assert.True(
                        TestHelpers.AreEqual(
                            recordSetToBeCreated,
                            createResponse,
                            ignoreEtag: true),
                        "Response body of Create does not match expectations");
                    Assert.False(string.IsNullOrWhiteSpace(createResponse.Etag));

                    // Retrieve the zone after create, verify response
                    var getresponse = testContext.DnsClient.RecordSets.Get(
                        testContext.ResourceGroup.Name,
                        testContext.ZoneName,
                        testContext.RecordSetName,
                        RecordType.A);

                    Assert.True(
                        TestHelpers.AreEqual(
                            createResponse,
                            getresponse,
                            ignoreEtag: false),
                        "Response body of Get does not match expectations");

                    // Call Update on the object returned by Create (important distinction from Get below)
                    Models.RecordSet createdRecordSet = createResponse;

                    createdRecordSet.TTL      = 120;
                    createdRecordSet.Metadata = new Dictionary <string, string>
                    {
                        { "tag1", "value1" },
                        { "tag2", "value2" }
                    };
                    createdRecordSet.ARecords = new List <ARecord>
                    {
                        new ARecord {
                            Ipv4Address = "123.32.1.0"
                        },
                        new ARecord {
                            Ipv4Address = "101.10.0.1"
                        }
                    };

                    var updateResponse = testContext.DnsClient.RecordSets
                                         .CreateOrUpdate(
                        testContext.ResourceGroup.Name,
                        testContext.ZoneName,
                        testContext.RecordSetName,
                        RecordType.A,
                        ifMatch: null,
                        ifNoneMatch: null,
                        parameters: createdRecordSet);

                    Assert.True(
                        TestHelpers.AreEqual(
                            createdRecordSet,
                            updateResponse,
                            ignoreEtag: true),
                        "Response body of Update does not match expectations");
                    Assert.False(string.IsNullOrWhiteSpace(updateResponse.Etag));

                    // Retrieve the records after create, verify response
                    getresponse = testContext.DnsClient.RecordSets.Get(
                        testContext.ResourceGroup.Name,
                        testContext.ZoneName,
                        testContext.RecordSetName,
                        RecordType.A);

                    Assert.True(
                        TestHelpers.AreEqual(updateResponse, getresponse),
                        "Response body of Get does not match expectations");

                    // Call Update on the object returned by Get (important distinction from Create above)
                    Models.RecordSet retrievedRecordSet = getresponse;
                    retrievedRecordSet.TTL      = 180;
                    retrievedRecordSet.ARecords = new List <ARecord>
                    {
                        new ARecord {
                            Ipv4Address = "123.32.1.0"
                        },
                        new ARecord {
                            Ipv4Address = "101.10.0.1"
                        },
                        new ARecord {
                            Ipv4Address = "22.33.44.55"
                        },
                    };

                    updateResponse = testContext.DnsClient.RecordSets.CreateOrUpdate
                                     (
                        testContext.ResourceGroup.Name,
                        testContext.ZoneName,
                        testContext.RecordSetName,
                        RecordType.A,
                        ifMatch: null,
                        ifNoneMatch: null,
                        parameters: retrievedRecordSet);

                    Assert.True(
                        TestHelpers.AreEqual(
                            retrievedRecordSet,
                            updateResponse,
                            ignoreEtag: true),
                        "Response body of Update does not match expectations");
                    Assert.False(string.IsNullOrWhiteSpace(updateResponse.Etag));

                    // Delete the record set
                    testContext.DnsClient.RecordSets.Delete(
                        testContext.ResourceGroup.Name,
                        testContext.ZoneName,
                        testContext.RecordSetName,
                        RecordType.A,
                        ifMatch: null);

                    // Delete the zone
                    testContext.DnsClient.Zones.Delete(
                        testContext.ResourceGroup.Name,
                        testContext.ZoneName,
                        ifMatch: null);
                }
            }
        }