def _TransactionRemoveHelper(self, record_to_remove, domain_name_for_run=None): shutil.copyfile(self.initial_transaction, transaction_util.DEFAULT_PATH) test_zone = util_beta.GetManagedZones()[0] test_record = record_to_remove self.mocked_dns_client.resourceRecordSets.List.Expect( self.messages_beta.DnsResourceRecordSetsListRequest( project=self.Project(), managedZone=test_zone.name, name=test_record.name, type=test_record.type, maxResults=100), self.messages_beta.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, api_version=self.api_version) expected_change.deletions.append(test_record) with open(transaction_util.DEFAULT_PATH) as actual: actual_change = transaction_util.ChangeFromYamlFile( actual, api_version=self.api_version) self.assertEqual(expected_change, actual_change)
def testTransactionExecute(self): with open(transaction_util.DEFAULT_PATH, 'w') as transaction_file: transaction_util.WriteToYamlFile(transaction_file, util_beta.GetImportChange()) test_zone = util_beta.GetManagedZones()[0] self.mocked_dns_client.changes.Create.Expect( self.messages_beta.DnsChangesCreateRequest( change=util_beta.GetImportChange(), managedZone=test_zone.name, project=self.Project()), util_beta.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 """, normalize_space=True) self.AssertErrContains("""\ Created [{0}projects/{1}/managedZones/mz/changes/1]. """.format(self.client.BASE_URL, self.Project()), normalize_space=True) self.assertFalse(os.path.isfile(transaction_util.DEFAULT_PATH))
def _ImportReplaceFromFileHelper(self, file_path, flags=None): test_zone = util_beta.GetManagedZones()[0] self.mocked_dns_client.managedZones.Get.Expect( self.messages_beta.DnsManagedZonesGetRequest( managedZone=test_zone.name, project=self.Project()), test_zone) self.mocked_dns_client.resourceRecordSets.List.Expect( self.messages_beta.DnsResourceRecordSetsListRequest( project=self.Project(), managedZone=test_zone.name, maxResults=100), self.messages_beta.ResourceRecordSetsListResponse( rrsets=util_beta.GetRecordSets())) self.mocked_dns_client.changes.Create.Expect( self.messages_beta.DnsChangesCreateRequest( change=util_beta.GetImportReplaceChange(), managedZone=test_zone.name, project=self.Project()), util_beta.GetImportReplaceChangeAfterCreation()) self.Run([ 'dns', 'record-sets', 'import', '-z', test_zone.name, file_path, '--delete-all-existing', '--replace-origin-ns' ] + (flags or [])) self.AssertOutputContains("""\ ID START_TIME STATUS 2 today 5 mins ago done """, normalize_space=True) self.AssertErrContains("""\ Created [{0}projects/{1}/managedZones/mz/changes/2]. """.format(self.client.BASE_URL, self.Project()))
def testTransactionStart(self): test_zone = util_beta.GetManagedZones()[0] self.mocked_dns_client.managedZones.Get.Expect( self.messages_beta.DnsManagedZonesGetRequest( managedZone=test_zone.name, project=self.Project()), test_zone) self.mocked_dns_client.resourceRecordSets.List.Expect( self.messages_beta.DnsResourceRecordSetsListRequest( project=self.Project(), managedZone=test_zone.name, name=test_zone.dnsName, type='SOA', maxResults=100), self.messages_beta.ResourceRecordSetsListResponse( rrsets=util_beta.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)
def testTransactionAbort(self): open(transaction_util.DEFAULT_PATH, 'w').close() test_zone = util_beta.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))
def testTransactionDescribeBeforeStart(self): test_zone = util_beta.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))
def testTransactionDescribe(self): shutil.copyfile(self.transaction_file, transaction_util.DEFAULT_PATH) test_zone = util_beta.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:]))
def _RunTestRaisesCorruptedTransactionFileError(self): test_zone = util_beta.GetManagedZones()[0] test_record = util_beta.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 testTransactionExecuteEmpty(self): shutil.copyfile(self.initial_transaction, transaction_util.DEFAULT_PATH) test_zone = util_beta.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 testTransactionRemoveBeforeStart(self): test_zone = util_beta.GetManagedZones()[0] test_record = util_beta.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))
def testDelete(self): test_zone = util_beta.GetManagedZones()[0] self.mocked_dns_client.managedZones.Delete.Expect( self.messages_beta.DnsManagedZonesDeleteRequest( managedZone=test_zone.name, project=self.Project()), self.messages_beta.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()))
def testTransactionRemoveUnsupportedType(self): shutil.copyfile(self.initial_transaction, transaction_util.DEFAULT_PATH) test_zone = util_beta.GetManagedZones()[0] test_record = util_beta.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))
def testTransactionStartAlreadyExists(self): open(transaction_util.DEFAULT_PATH, 'w').close() test_zone = util_beta.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)
def testMultipleZonesList(self): self.mocked_dns_client.managedZones.List.Expect( self.messages_beta.DnsManagedZonesListRequest( project=self.Project(), maxResults=100), self.messages_beta.ManagedZonesListResponse( managedZones=util_beta.GetManagedZones())) self.Run('dns managed-zones list') self.AssertOutputContains("""\ NAME DNS_NAME DESCRIPTION VISIBILITY mz zone.com. My zone! public mz1 zone1.com. My zone 1! public """, normalize_space=True)
def testMultipleRecordSetsList(self): test_zone = util_beta.GetManagedZones()[0] self.mocked_dns_client.resourceRecordSets.List.Expect( self.messages_beta.DnsResourceRecordSetsListRequest( project=self.Project(), managedZone=test_zone.name, maxResults=100), self.messages_beta.ResourceRecordSetsListResponse( rrsets=util_beta.GetRecordSets())) 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 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 mail.zone.com. A 21600 5.6.7.8 www.zone.com. CNAME 21600 zone.com. """, normalize_space=True)
def _TransactionRemoveNonExistingHelper( self, record_to_remove, existing_records): shutil.copyfile(self.initial_transaction, transaction_util.DEFAULT_PATH) test_zone = util_beta.GetManagedZones()[0] test_record = record_to_remove self.mocked_dns_client.resourceRecordSets.List.Expect( self.messages_beta.DnsResourceRecordSetsListRequest( project=self.Project(), managedZone=test_zone.name, name=test_record.name, type=test_record.type, maxResults=100), self.messages_beta.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]))
def _ExportToFileHelper(self, expected_file, flags=''): test_zone = util_beta.GetManagedZones()[0] self.mocked_dns_client.managedZones.Get.Expect( self.messages_beta.DnsManagedZonesGetRequest( managedZone=test_zone.name, project=self.Project()), test_zone) self.mocked_dns_client.resourceRecordSets.List.Expect( self.messages_beta.DnsResourceRecordSetsListRequest( project=self.Project(), managedZone=test_zone.name, maxResults=100), self.messages_beta.ResourceRecordSetsListResponse( rrsets=util_beta.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 testTransactionAddData(self): shutil.copyfile( self.initial_transaction, transaction_util.DEFAULT_PATH) test_zone = util_beta.GetManagedZones()[0] test_record = util_beta.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, api_version=self.api_version) expected_change.additions.append(test_record) with open(transaction_util.DEFAULT_PATH) as actual: actual_change = transaction_util.ChangeFromYamlFile( actual, api_version=self.api_version) self.assertEqual(expected_change, actual_change)
def testDescribe(self): test_zone = util_beta.GetManagedZones()[0] self.mocked_dns_client.managedZones.Get.Expect( self.messages_beta.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)