Пример #1
0
    def _ImportReplaceFromFileHelper(self, file_path, flags=None):
        test_zone = util.GetManagedZones()[0]
        self.mocked_dns_v1.managedZones.Get.Expect(
            self.messages.DnsManagedZonesGetRequest(managedZone=test_zone.name,
                                                    project=self.Project()),
            test_zone)

        self.mocked_dns_v1.resourceRecordSets.List.Expect(
            self.messages.DnsResourceRecordSetsListRequest(
                project=self.Project(),
                managedZone=test_zone.name,
                maxResults=100),
            self.messages.ResourceRecordSetsListResponse(
                rrsets=util.GetRecordSets()))

        self.mocked_dns_v1.changes.Create.Expect(
            self.messages.DnsChangesCreateRequest(
                change=util.GetImportReplaceChange(),
                managedZone=test_zone.name,
                project=self.Project()),
            util.GetImportReplaceChangeAfterCreation())

        self.Run([
            'dns', 'record-sets', 'import', '-z', test_zone.name, file_path,
            '--delete-all-existing', '--replace-origin-ns'
        ] + (flags or []))
        self.AssertOutputContains(
            textwrap.dedent("""\
    ID  START_TIME        STATUS
    2   today 5 mins ago  done
    """))
        self.AssertErrContains("""\
Created [{0}projects/{1}/managedZones/mz/changes/2].
""".format(self.client.BASE_URL, self.Project()))
Пример #2
0
    def _ImportFromFileHelper(self, file_path, flags=None):
        test_zone = util.GetManagedZones()[0]
        self.mocked_dns_v1.managedZones.Get.Expect(
            self.messages.DnsManagedZonesGetRequest(managedZone=test_zone.name,
                                                    project=self.Project()),
            test_zone)

        self.mocked_dns_v1.resourceRecordSets.List.Expect(
            self.messages.DnsResourceRecordSetsListRequest(
                project=self.Project(),
                managedZone=test_zone.name,
                maxResults=100),
            self.messages.ResourceRecordSetsListResponse(
                rrsets=util.GetRecordSets()))

        self.mocked_dns_v1.changes.Create.Expect(
            self.messages.DnsChangesCreateRequest(
                change=util.GetImportChange(),
                managedZone=test_zone.name,
                project=self.Project()), util.GetImportChangeAfterCreation())

        self.Run(
            ['dns', 'record-sets', 'import', '-z', test_zone.name, file_path] +
            (flags or []))
        self.AssertOutputContains(
            textwrap.dedent("""\
    ID  START_TIME  STATUS
    1   today now   pending
    """))
        self.AssertErrContains(
            ('Created [{0}projects/{1}/'
             'managedZones/mz/changes/1]').format(self.client.BASE_URL,
                                                  self.Project()))
Пример #3
0
  def testRecordSetsListWithNameFilter(self):
    test_zone = util.GetManagedZones()[0]
    test_name = util.GetCNameRecord().name

    list_request = self.messages.DnsResourceRecordSetsListRequest(
        project=self.Project(),
        managedZone=test_zone.name,
        name=test_name,
        maxResults=100)
    self.mocked_dns_v1.resourceRecordSets.List.Expect(
        list_request,
        self.messages.ResourceRecordSetsListResponse(
            rrsets=[util.GetCNameRecord()]))
    self.mocked_dns_v1.resourceRecordSets.List.Expect(
        list_request,
        self.messages.ResourceRecordSetsListResponse(
            rrsets=[util.GetCNameRecord()]))

    self.Run('dns record-sets list -z {0} --name {1}'.format(
        test_zone.name,
        # Test omission of trailing dot in the DNS name parameter
        test_name[:-1]))
    self.Run('dns record-sets list -z {0} --name {1}'.format(
        test_zone.name, test_name))
    self.AssertOutputContains("""\
    NAME           TYPE   TTL    DATA
    www.zone.com.  CNAME  21600  zone.com.
    """, normalize_space=True)
    def testDescribe(self):
        test_zone = util.GetManagedZones()[0]
        self.mocked_dns_v1.managedZones.Get.Expect(
            self.messages.DnsManagedZonesGetRequest(managedZone=test_zone.name,
                                                    project=self.Project()),
            test_zone)

        result = self.Run('dns managed-zones describe {0}'.format(
            test_zone.name))
        self.assertEqual(test_zone, result)

        self.AssertOutputContains("""\
creationTime: '2014-10-20T20:06:50.077Z'
description: My zone!
dnsName: zone.com.
id: '67371891'
kind: dns#managedZone
name: mz
nameServers:
- ns-cloud-e1.googledomains.com.
- ns-cloud-e2.googledomains.com.
- ns-cloud-e3.googledomains.com.
- ns-cloud-e4.googledomains.com.
""",
                                  normalize_space=True)
Пример #5
0
  def _TransactionRemoveHelper(self, record_to_remove,
                               domain_name_for_run=None):
    shutil.copyfile(self.initial_transaction, transaction_util.DEFAULT_PATH)

    test_zone = util.GetManagedZones()[0]
    test_record = record_to_remove
    self.mocked_dns_v1.resourceRecordSets.List.Expect(
        self.messages.DnsResourceRecordSetsListRequest(
            project=self.Project(),
            managedZone=test_zone.name,
            name=test_record.name,
            type=test_record.type,
            maxResults=100),
        self.messages.ResourceRecordSetsListResponse(
            rrsets=[test_record]))

    if not domain_name_for_run:
      domain_name_for_run = test_record.name

    self.Run('dns record-sets transaction remove -z {0} --name {1} --ttl {2}'
             ' --type {3} {4}'.format(test_zone.name, domain_name_for_run,
                                      test_record.ttl, test_record.type,
                                      ' '.join(test_record.rrdatas)))
    self.AssertErrContains(
        'Record removal appended to transaction at [{0}].'.format(
            transaction_util.DEFAULT_PATH))

    with open(self.initial_transaction) as expected:
      expected_change = transaction_util.ChangeFromYamlFile(expected)
      expected_change.deletions.append(test_record)
    with open(transaction_util.DEFAULT_PATH) as actual:
      actual_change = transaction_util.ChangeFromYamlFile(actual)
      self.assertEqual(expected_change, actual_change)
Пример #6
0
    def testTransactionStart(self):
        test_zone = util.GetManagedZones()[0]
        self.mocked_dns_v1.managedZones.Get.Expect(
            self.messages.DnsManagedZonesGetRequest(managedZone=test_zone.name,
                                                    project=self.Project()),
            test_zone)

        self.mocked_dns_v1.resourceRecordSets.List.Expect(
            self.messages.DnsResourceRecordSetsListRequest(
                project=self.Project(),
                managedZone=test_zone.name,
                name=test_zone.dnsName,
                type='SOA',
                maxResults=100),
            self.messages.ResourceRecordSetsListResponse(
                rrsets=util.GetRecordSets()[2:3]))

        self.Run('dns record-sets transaction start -z {0} '.format(
            test_zone.name))
        self.AssertErrContains('Transaction started [{0}].'.format(
            transaction_util.DEFAULT_PATH))

        with open(transaction_util.DEFAULT_PATH) as results:
            with open(self.initial_transaction) as expected:
                self.assertEqual(expected.readlines(), results.readlines())
        os.remove(transaction_util.DEFAULT_PATH)
Пример #7
0
    def testTransactionExecute(self):
        with open(transaction_util.DEFAULT_PATH, 'w') as transaction_file:
            transaction_util.WriteToYamlFile(transaction_file,
                                             util.GetImportChange())

        test_zone = util.GetManagedZones()[0]
        self.mocked_dns_v1.changes.Create.Expect(
            self.messages.DnsChangesCreateRequest(
                change=util.GetImportChange(),
                managedZone=test_zone.name,
                project=self.Project()), util.GetImportChangeAfterCreation())

        self.Run('dns record-sets transaction execute -z {0}'.format(
            test_zone.name))

        self.AssertErrContains(
            'Executed transaction [{0}] for managed-zone [{1}].'.format(
                transaction_util.DEFAULT_PATH, test_zone.name))
        self.AssertOutputContains("""\
ID  START_TIME  STATUS
1   today now   pending
""")
        self.AssertErrContains("""\
Created [{0}projects/{1}/managedZones/mz/changes/1].
""".format(self.client.BASE_URL, self.Project()))
        self.assertFalse(os.path.isfile(transaction_util.DEFAULT_PATH))
 def testTransactionAbort(self):
     open(transaction_util.DEFAULT_PATH, 'w').close()
     test_zone = util.GetManagedZones()[0]
     self.Run('dns record-sets transaction abort -z {0}'.format(
         test_zone.name))
     self.AssertErrContains('Aborted transaction [{0}].'.format(
         transaction_util.DEFAULT_PATH))
     self.assertFalse(os.path.isfile(transaction_util.DEFAULT_PATH))
Пример #9
0
    def testZeroChangesList(self):
        test_zone = util.GetManagedZones()[0]
        self.mocked_dns_v1.changes.List.Expect(
            self.messages.DnsChangesListRequest(managedZone=test_zone.name,
                                                project=self.Project(),
                                                maxResults=100),
            self.messages.ChangesListResponse(changes=[]))

        self.Run('dns record-sets changes list -z {0}'.format(test_zone.name))
        self.AssertErrContains('Listed 0 items.')
 def _RunTestRaisesCorruptedTransactionFileError(self):
   test_zone = util.GetManagedZones()[0]
   test_record = util.GetMGRecord()
   with self.assertRaisesRegex(transaction_util.CorruptedTransactionFileError,
                               'Corrupted transaction file.'):
     self.Run(
         'dns record-sets transaction add -z {0} --name {1} --ttl {2} --type '
         '{3} {4}'.format(test_zone.name, test_record.name,
                          test_record.ttl, test_record.type,
                          test_record.rrdatas[0]))
    def testTransactionDescribe(self):
        shutil.copyfile(self.transaction_file, transaction_util.DEFAULT_PATH)

        test_zone = util.GetManagedZones()[0]
        self.Run('dns record-sets transaction describe -z {0}'.format(
            test_zone.name))
        os.remove(transaction_util.DEFAULT_PATH)

        with open(self.transaction_file) as expected:
            self.AssertOutputContains(''.join(expected.readlines()[1:]))
Пример #12
0
    def testTransactionExecuteEmpty(self):
        shutil.copyfile(self.initial_transaction,
                        transaction_util.DEFAULT_PATH)

        test_zone = util.GetManagedZones()[0]
        self.Run('dns record-sets transaction execute -z {0}'.format(
            test_zone.name))
        self.AssertErrContains('Nothing to do, empty transaction [{0}]'.format(
            transaction_util.DEFAULT_PATH))
        self.assertFalse(os.path.isfile(transaction_util.DEFAULT_PATH))
 def testTransactionDescribeBeforeStart(self):
     test_zone = util.GetManagedZones()[0]
     with self.assertRaises(
             transaction_util.TransactionFileNotFound) as context:
         self.Run('dns record-sets transaction describe -z {0}'.format(
             test_zone.name))
         self.assertEqual(
             context.exception.message,
             'Transaction not found at [{0}]'.format(
                 transaction_util.DEFAULT_PATH))
Пример #14
0
 def testTransactionRemoveBeforeStart(self):
   test_zone = util.GetManagedZones()[0]
   test_record = util.GetRecordSets()[0]
   with self.assertRaises(transaction_util.TransactionFileNotFound) as context:
     self.Run('dns record-sets transaction remove -z {0} --name {1} --ttl {2}'
              ' --type {3} {4}'.format(test_zone.name, test_record.name,
                                       test_record.ttl, test_record.type,
                                       test_record.rrdatas[0]))
     self.assertEqual(context.exception.message,
                      'Transaction not found at [{0}]'.format(
                          transaction_util.DEFAULT_PATH))
Пример #15
0
  def testZeroRecordSetsList(self):
    test_zone = util.GetManagedZones()[0]
    self.mocked_dns_v1.resourceRecordSets.List.Expect(
        self.messages.DnsResourceRecordSetsListRequest(
            project=self.Project(),
            managedZone=test_zone.name,
            maxResults=100),
        self.messages.ResourceRecordSetsListResponse(rrsets=[]))

    self.Run('dns record-sets list -z {0}'.format(test_zone.name))
    self.AssertErrContains('Listed 0 items.')
Пример #16
0
    def testDelete(self):
        test_zone = util.GetManagedZones()[0]
        self.mocked_dns_v1.managedZones.Delete.Expect(
            self.messages.DnsManagedZonesDeleteRequest(
                managedZone=test_zone.name, project=self.Project()),
            self.messages.DnsManagedZonesDeleteResponse())

        self.Run('dns managed-zones delete {0}'.format(test_zone.name))
        self.AssertOutputContains('')
        self.AssertErrContains("""\
Deleted [{0}projects/{1}/managedZones/mz].
""".format(self.client.BASE_URL, self.Project()))
Пример #17
0
    def testZonesListWithLimit(self):
        self.mocked_dns_v1.managedZones.List.Expect(
            self.messages.DnsManagedZonesListRequest(project=self.Project(),
                                                     maxResults=100),
            self.messages.ManagedZonesListResponse(
                managedZones=util.GetManagedZones()))

        self.Run('dns managed-zones list --limit=1')
        self.AssertOutputContains("""\
NAME  DNS_NAME   DESCRIPTION VISIBILITY
mz    zone.com.  My zone!    public
""",
                                  normalize_space=True)
Пример #18
0
  def testTransactionRemoveUnsupportedType(self):
    shutil.copyfile(self.initial_transaction, transaction_util.DEFAULT_PATH)

    test_zone = util.GetManagedZones()[0]
    test_record = util.GetMGRecord()
    with self.assertRaises(transaction_util.UnsupportedRecordType) as context:
      self.Run('dns record-sets transaction remove -z {0} --name {1} --ttl {2}'
               ' --type {3} {4}'.format(test_zone.name, test_record.name,
                                        test_record.ttl, test_record.type,
                                        test_record.rrdatas[0]))
      self.assertEqual(
          context.exception.message,
          'Unsupported record-set type [{0}]'.format(test_record.type))
Пример #19
0
    def testTransactionStartAlreadyExists(self):
        open(transaction_util.DEFAULT_PATH, 'w').close()
        test_zone = util.GetManagedZones()[0]
        with self.assertRaises(
                transaction_util.TransactionFileAlreadyExists) as context:
            self.Run('dns record-sets transaction start -z {0}'.format(
                test_zone.name))
            self.assertEqual(
                context.exception.message,
                'Transaction already exists at [{0}]'.format(
                    transaction_util.DEFAULT_PATH))
            os.remove(transaction_util.DEFAULT_PATH)

        os.remove(transaction_util.DEFAULT_PATH)
Пример #20
0
    def testOneChangeList(self):
        test_zone = util.GetManagedZones()[0]
        self.mocked_dns_v1.changes.List.Expect(
            self.messages.DnsChangesListRequest(managedZone=test_zone.name,
                                                project=self.Project(),
                                                maxResults=100),
            self.messages.ChangesListResponse(changes=util.GetChanges()[:1]))

        self.Run('dns record-sets changes list -z {0}'.format(test_zone.name))
        self.AssertOutputContains("""\
ID  START_TIME                STATUS
2   2014-10-21T15:16:29.252Z  pending
""",
                                  normalize_space=True)
Пример #21
0
  def testOneRecordSetList(self):
    test_zone = util.GetManagedZones()[0]
    self.mocked_dns_v1.resourceRecordSets.List.Expect(
        self.messages.DnsResourceRecordSetsListRequest(
            project=self.Project(),
            managedZone=test_zone.name,
            maxResults=100),
        self.messages.ResourceRecordSetsListResponse(
            rrsets=[util.GetBaseARecord()]))

    self.Run('dns record-sets list -z {0}'.format(test_zone.name))
    self.AssertOutputContains("""\
    NAME       TYPE  TTL    DATA
    zone.com.  A     21600  1.2.3.4
    """, normalize_space=True)
Пример #22
0
 def testBadRecordSetsList(self):
   test_zone = util.GetManagedZones()[0]
   test_name = util.GetSOARecord().name
   test_type = util.GetSOARecord().type
   self.mocked_dns_v1.resourceRecordSets.List.Expect(
       self.messages.DnsResourceRecordSetsListRequest(
           project=self.Project(),
           managedZone=test_zone.name,
           name=test_name,
           type=test_type,
           maxResults=100),
       exception=http_error.MakeHttpError(404),
   )
   with self.AssertRaisesHttpExceptionMatches('Resource not found.'):
     self.Run('dns record-sets list -z {0} --name {1} --type {2}'.format(
         test_zone.name, test_name, test_type))
Пример #23
0
  def testRecordSetsListWithLimit(self):
    test_zone = util.GetManagedZones()[0]
    self.mocked_dns_v1.resourceRecordSets.List.Expect(
        self.messages.DnsResourceRecordSetsListRequest(
            project=self.Project(),
            managedZone=test_zone.name,
            maxResults=3),
        self.messages.ResourceRecordSetsListResponse(
            rrsets=util.GetRecordSets()))

    self.Run('dns record-sets list -z {0} --limit=3'.format(test_zone.name))
    self.AssertOutputContains("""\
    NAME       TYPE  TTL    DATA
    zone.com.  A     21600  1.2.3.4
    zone.com.  NS    21600  ns-cloud-e1.googledomains.com.,ns-cloud-e2.googledomains.com.,ns-cloud-e3.googledomains.com.,ns-cloud-e4.googledomains.com.
    zone.com.  SOA   21601  ns-cloud-e1.googledomains.com. dns-admin.google.com. 2 21600 3600 1209600 300
    """, normalize_space=True)
  def testDescribe(self):
    test_zone = util.GetManagedZones()[0]
    test_change = util.GetChanges()[1]
    self.mocked_dns_v1.changes.Get.Expect(
        self.messages.DnsChangesGetRequest(
            changeId=test_change.id,
            managedZone=test_zone.name,
            project=self.Project()),
        test_change)

    result = self.Run('dns record-sets changes describe -z {0} {1}'.format(
        test_zone.name, test_change.id))
    self.assertEqual(test_change, result)

    expected_output = io.StringIO()
    resource_printer.Print(
        test_change, 'yaml', out=expected_output, single=True)
    self.AssertOutputContains(expected_output.getvalue())
    expected_output.close()
Пример #25
0
    def testChangesListSortOrder(self):
        test_zone = util.GetManagedZones()[0]
        sort_order = 'ascending'
        reversed_changes = [change for change in reversed(util.GetChanges())]
        self.mocked_dns_v1.changes.List.Expect(
            self.messages.DnsChangesListRequest(managedZone=test_zone.name,
                                                project=self.Project(),
                                                sortOrder=sort_order,
                                                maxResults=100),
            self.messages.ChangesListResponse(changes=reversed_changes))

        self.Run('dns record-sets changes list -z {0} --sort-order={1}'.format(
            test_zone.name, sort_order))
        self.AssertOutputContains("""\
ID  START_TIME                STATUS
0   2014-10-20T20:06:50.078Z  done
1   2014-10-20T21:34:21.073Z  done
2   2014-10-21T15:16:29.252Z  pending
""",
                                  normalize_space=True)
Пример #26
0
  def testRecordSetsListWithNameAndTypeFilter(self):
    test_zone = util.GetManagedZones()[0]
    test_name = util.GetSOARecord().name
    test_type = util.GetSOARecord().type
    self.mocked_dns_v1.resourceRecordSets.List.Expect(
        self.messages.DnsResourceRecordSetsListRequest(
            project=self.Project(),
            managedZone=test_zone.name,
            name=test_name,
            type=test_type,
            maxResults=100),
        self.messages.ResourceRecordSetsListResponse(
            rrsets=[util.GetSOARecord()]))

    self.Run('dns record-sets list -z {0} --name {1} --type {2}'.format(
        test_zone.name, test_name, test_type))
    self.AssertOutputContains("""\
    NAME       TYPE  TTL    DATA
    zone.com.  SOA   21601  ns-cloud-e1.googledomains.com. dns-admin.google.com. 2 21600 3600 1209600 300
    """, normalize_space=True)
  def testTransactionAddData(self):
    shutil.copyfile(
        self.initial_transaction, transaction_util.DEFAULT_PATH)

    test_zone = util.GetManagedZones()[0]
    test_record = util.GetRecordSetsForExport()[5]
    self.Run(
        'dns record-sets transaction add -z {0} --name {1} --ttl {2} --type '
        '{3} {4}'.format(test_zone.name, test_record.name,
                         test_record.ttl, test_record.type,
                         ' '.join(test_record.rrdatas)))
    self.AssertErrContains(
        'Record addition appended to transaction at [{0}].'.format(
            transaction_util.DEFAULT_PATH))

    with open(self.initial_transaction) as expected:
      expected_change = transaction_util.ChangeFromYamlFile(expected)
      expected_change.additions.append(test_record)
    with open(transaction_util.DEFAULT_PATH) as actual:
      actual_change = transaction_util.ChangeFromYamlFile(actual)
      self.assertEqual(expected_change, actual_change)
Пример #28
0
  def _TransactionRemoveNonExistingHelper(
      self, record_to_remove, existing_records):
    shutil.copyfile(self.initial_transaction, transaction_util.DEFAULT_PATH)

    test_zone = util.GetManagedZones()[0]
    test_record = record_to_remove
    self.mocked_dns_v1.resourceRecordSets.List.Expect(
        self.messages.DnsResourceRecordSetsListRequest(
            project=self.Project(),
            managedZone=test_zone.name,
            name=test_record.name,
            type=test_record.type,
            maxResults=100),
        self.messages.ResourceRecordSetsListResponse(
            rrsets=existing_records))

    with self.assertRaisesRegex(transaction_util.RecordDoesNotExist,
                                'Record to be removed does not exist'):
      self.Run('dns record-sets transaction remove -z {0} --name {1} --ttl {2}'
               ' --type {3} {4}'.format(test_zone.name, test_record.name,
                                        test_record.ttl, test_record.type,
                                        test_record.rrdatas[0]))
Пример #29
0
  def _ExportToFileHelper(self, expected_file, flags=''):
    test_zone = util.GetManagedZones()[0]
    self.mocked_dns_v1.managedZones.Get.Expect(
        self.messages.DnsManagedZonesGetRequest(
            managedZone=test_zone.name,
            project=self.Project()),
        test_zone)

    self.mocked_dns_v1.resourceRecordSets.List.Expect(
        self.messages.DnsResourceRecordSetsListRequest(
            project=self.Project(),
            managedZone=test_zone.name,
            maxResults=100),
        self.messages.ResourceRecordSetsListResponse(
            rrsets=util.GetRecordSetsForExport()))

    self.Run('dns record-sets export -z {0} {1} {2}'.format(
        test_zone.name, self.result_file_path, flags))
    with open(self.result_file_path) as results:
      with open(expected_file) as expected:
        self.assertEqual(expected.read().splitlines(),
                         results.read().splitlines())
 def SetUp(self):
     self.mocked_dns_v1.managedZones.List.Expect(
         self.messages.DnsManagedZonesListRequest(project=self.Project(),
                                                  maxResults=100),
         self.messages.ManagedZonesListResponse(
             managedZones=util.GetManagedZones()[:1]))