def SetUp(self): self.api_mock = utils.ComputeApiMock('v1', project=self.Project(), zone='central2-a').Start() self.addCleanup(self.api_mock.Stop) self.status_enum = self.api_mock.messages.Operation.StatusValueValuesEnum
def testNoExplicitZoneList(self): # In this tests zonal wildcard is used, zones have to be fetched by # implementation self.api_mock = utils.ComputeApiMock('v1').Start() self.addCleanup(self.api_mock.Stop) resource_registry = resources.REGISTRY.Clone() resource_registry.RegisterApiByName('compute', 'v1') frontend = lister._Frontend('filter', 123, self.MakeAllScopes(zonal=True)) zonal_lister = lister.ZonalParallelLister( self.api_mock.adapter, self.api_mock.adapter.apitools_client.instances, resource_registry) zone_set = self.MakeZoneSet(['zone-1', 'zone-2']) # This is for zones listing self.ExpectListerInvoke( scope_set=self.MakeGlobalScope(), result=[{ 'selfLink': z.SelfLink() } for z in zone_set]) # This is for "instances" listing self.ExpectListerInvoke( scope_set=zone_set, filter_expr=frontend.filter, max_results=frontend.max_results, result=[1, 2, 3]) result = list(zonal_lister(frontend)) self.assertListEqual(result, [1, 2, 3])
def SetUp(self): self.zone = 'zone-2' self.api_mock = utils.ComputeApiMock(self.api_version, project=self.Project(), zone=self.zone).Start() self.addCleanup(self.api_mock.Stop) self.status_enum = self.api_mock.messages.Operation.StatusValueValuesEnum
def testAggregatedList(self): lister_patcher = mock.patch( 'googlecloudsdk.api_lib.compute.lister.GetRegionalResourcesDicts', autospec=True) self.addCleanup(lister_patcher.stop) self.mock_get_regional_resources = lister_patcher.start() self.mock_get_regional_resources.return_value = [1, 2, 3] self.api_mock = utils.ComputeApiMock('v1').Start() self.addCleanup(self.api_mock.Stop) resource_registry = resources.REGISTRY.Clone() resource_registry.RegisterApiByName('compute', 'v1') project = resource_registry.Parse( 'https://compute.googleapis.com/compute/v1/projects/lister-project') frontend = lister._Frontend('filter', 123, lister.AllScopes([project], False, True)) regional_lister = lister.RegionalLister(self.api_mock.adapter, 'service') result = list(regional_lister(frontend)) self.assertListEqual(result, [1, 2, 3]) self.mock_get_regional_resources.assert_called_once_with( service='service', project=self.Project(), requested_regions=[], filter_expr='filter', http=self.api_mock.adapter.apitools_client.http, batch_url=self.api_mock.adapter.batch_url, errors=[])
def testBatchList(self): lister_patcher = mock.patch( 'googlecloudsdk.api_lib.compute.lister.GetGlobalResourcesDicts', autospec=True) self.addCleanup(lister_patcher.stop) self.mock_get_global_resources = lister_patcher.start() self.mock_get_global_resources.return_value = [1, 2, 3] self.api_mock = utils.ComputeApiMock('v1').Start() self.addCleanup(self.api_mock.Stop) resource_registry = resources.REGISTRY.Clone() resource_registry.RegisterApiByName('compute', 'v1') project = resource_registry.Parse( self.Project(), collection='compute.projects') frontend = lister._Frontend('filter', 123, lister.GlobalScope([project])) global_lister = lister.GlobalLister(self.api_mock.adapter, 'service') result = list(global_lister(frontend)) self.assertListEqual(result, [1, 2, 3]) self.mock_get_global_resources.assert_called_once_with( service='service', project=self.Project(), filter_expr='filter', http=self.api_mock.adapter.apitools_client.http, batch_url=self.api_mock.adapter.batch_url, errors=[])
def SetUp(self): api_mock = utils.ComputeApiMock('v1').Start() self.addCleanup(api_mock.Stop) # instances list implementation always uses this implementation self.implementation = lister.ZonalParallelLister( api_mock.adapter, api_mock.adapter.apitools_client.instances, api_mock.resources)
def SetUp(self): # Select API track to set up self.messages, self.compute. self.SelectApi('alpha') self.track = calliope_base.ReleaseTrack.ALPHA self.api_mock = utils.ComputeApiMock('alpha', project=self.Project(), zone='central2-a').Start() self.addCleanup(self.api_mock.Stop) self.status_enum = self.api_mock.messages.Operation.StatusValueValuesEnum
def SetUp(self): self.api_mock = utils.ComputeApiMock(self.api_version, project=self.Project(), zone='central2-a').Start() self.addCleanup(self.api_mock.Stop) self.StartObjectPatch(name_generator, 'GenerateRandomName', side_effect=('random-name-{}'.format(x) for x in itertools.count())) self.status_enum = self.api_mock.messages.Operation.StatusValueValuesEnum
def testAsync(self): expected = self.messages.PacketMirroring( name='my-pm', network=self.messages.PacketMirroringNetworkInfo( url=('https://compute.googleapis.com/compute/{0}/' 'projects/my-project/global/networks/default' ).format(self.api_version)), collectorIlb=self.messages.PacketMirroringForwardingRuleInfo( url=('https://compute.googleapis.com/compute/{0}/' 'projects/my-project/regions/us-central1/' 'forwardingRules/fr1').format(self.api_version)), mirroredResources=self.messages. PacketMirroringMirroredResourceInfo( tags=['t1'], instances=[], subnetworks=[], ), enable=self.messages.PacketMirroring.EnableValueValuesEnum.TRUE, filter=self.messages.PacketMirroringFilter()) api_mock = utils.ComputeApiMock(self.api_version, project=self.Project()).Start() api_mock.batch_responder.ExpectBatch([ ((self.compute.packetMirrorings, 'Insert', self.messages.ComputePacketMirroringsInsertRequest( packetMirroring=expected, project='my-project', region='us-central1', )), self.messages.Operation( name='operation-X', status=self.messages.Operation.StatusValueValuesEnum.PENDING)) ]) result = self.Run(""" compute packet-mirrorings create my-pm --region us-central1 --network default --collector-ilb fr1 --mirrored-tags t1 --async """) self.assertEqual('operation-X', result.name) self.AssertOutputEquals('') self.AssertErrEquals( 'Create in progress for packet mirroring [my-pm] ' '[https://compute.googleapis.com/compute/v1/' 'projects/my-project/regions/us-central1/operations/operation-X] ' 'Run the [gcloud compute operations describe] command to check the ' 'status of this operation.\n') api_mock.Stop()
def testWithPartialError(self): def make_server_responses(*_, **kwargs): for num in range(5): if num == 2: kwargs['errors'].append((400, 'Invalid field name')) else: yield num lister_patcher = mock.patch( 'googlecloudsdk.api_lib.compute.request_helper.ListJson', autospec=True) self.addCleanup(lister_patcher.stop) self.list_json = lister_patcher.start() self.list_json.side_effect = make_server_responses self.api_mock = utils.ComputeApiMock('v1').Start() self.addCleanup(self.api_mock.Stop) resource_registry = resources.REGISTRY.Clone() resource_registry.RegisterApiByName('compute', 'v1') project = resource_registry.Parse( 'https://www.googleapis.com/compute/v1/projects/lister-project') frontend = lister._Frontend('filter', 123, lister.GlobalScope([project])) zones_lister = lister.MultiScopeLister( self.api_mock.adapter, global_service=self.api_mock.adapter.apitools_client.zones) result = list(zones_lister(frontend)) self.assertListEqual(result, [0, 1, 3, 4]) errors = [(400, u'Invalid field name')] self.list_json.assert_called_once_with( requests=[(self.api_mock.adapter.apitools_client.zones, 'List', self.api_mock.adapter.messages.ComputeZonesListRequest( filter='filter', maxResults=123, project='lister-project')), ], http=self.api_mock.adapter.apitools_client.http, batch_url=self.api_mock.adapter.batch_url, errors=errors)
def SetUp(self): self.parser = util.ArgumentParser() self.SelectApi(self.API_VERSION) self.api_mock = compute_tests_utils.ComputeApiMock( self.API_VERSION, project=self.Project(), zone='zone-1').Start() self.addCleanup(self.api_mock.Stop) self.instance_ref = self.api_mock.resources.Parse( 'instance-2', params={ 'project': self.Project(), 'zone': 'zone-1' }, collection='compute.instances') m = self.api_mock.messages self.external_nic = m.NetworkInterface( accessConfigs=[m.AccessConfig(natIP='10.0.0.0')])
def testComplex(self): self.api_mock = utils.ComputeApiMock('v1').Start() self.addCleanup(self.api_mock.Stop) self.ExpectListerInvoke( scope_set=self.MakeZoneSet(['my-zone']), filter_expr='name eq ".*(asdf).*"', max_results=None, result=[], with_implementation=lister.ZonalLister( self.api_mock.adapter, self.api_mock.adapter.apitools_client.machineTypes)) result = list( self.Run('compute machine-types list ' '--page-size=123 ' '--filter="name ~ asdf" ' '--zones=my-zone ' '--format=disable')) self.assertEqual(result, [])
def testAggregatedListPartialSuccess(self): lister_patcher = mock.patch( 'googlecloudsdk.api_lib.compute.request_helper.ListJson', autospec=True) self.addCleanup(lister_patcher.stop) self.list_json = lister_patcher.start() self.list_json.return_value = [1, 2, 3] self.api_mock = utils.ComputeApiMock('alpha').Start() self.addCleanup(self.api_mock.Stop) resource_registry = resources.REGISTRY.Clone() resource_registry.RegisterApiByName('compute', 'v1') project = resource_registry.Parse( 'https://compute.googleapis.com/compute/alpha/projects/lister-project') frontend = lister._Frontend('filter', 123, lister.AllScopes([project], True, True)) instances_lister = lister.MultiScopeLister( self.api_mock.adapter, aggregation_service=self.api_mock.adapter.apitools_client.instances, return_partial_success=True) result = list(instances_lister(frontend)) self.assertListEqual(result, [1, 2, 3]) self.list_json.assert_called_once_with( requests=[ (self.api_mock.adapter.apitools_client.instances, 'AggregatedList', self.api_mock.adapter.messages .ComputeInstancesAggregatedListRequest( filter='filter', maxResults=123, project='lister-project', includeAllScopes=True, returnPartialSuccess=True)) ], http=self.api_mock.adapter.apitools_client.http, batch_url=self.api_mock.adapter.batch_url, errors=[])
def testExplicitZoneList(self): # In this test fronted is provided with precise set of zones self.api_mock = utils.ComputeApiMock('v1').Start() self.addCleanup(self.api_mock.Stop) frontend = lister._Frontend('filter', 123, self.MakeZoneSet(['zone-1', 'zone-2'])) zonal_lister = lister.ZonalParallelLister( self.api_mock.adapter, self.api_mock.adapter.apitools_client.instances, 'registry') self.ExpectListerInvoke( scope_set=frontend.scope_set, filter_expr=frontend.filter, max_results=frontend.max_results, result=[1, 2, 3]) result = list(zonal_lister(frontend)) self.assertListEqual(result, [1, 2, 3])
def SetUp(self): api_mock = utils.ComputeApiMock('v1').Start() self.addCleanup(api_mock.Stop) self.implementation = lister.ZonalParallelLister( api_mock.adapter, api_mock.adapter.apitools_client.instances, api_mock.resources) self.test_resources = resource_projector.MakeSerializable( test_resources.INSTANCES_V1) self.all_project_requests = [ (self.compute_v1.instances, 'List', self.messages.ComputeInstancesListRequest(project='my-project', zone='zone-1')), (self.compute_v1.instances, 'List', self.messages.ComputeInstancesListRequest(project='my-project', zone='zone-2')), (self.compute_v1.instances, 'List', self.messages.ComputeInstancesListRequest(project='my-project', zone='zone-3')) ] def ReplicatePartialError(requests, http, batch_url, errors): # pylint: disable=unused-argument for i, resource in enumerate(self.test_resources): if i == 1: errors.append((400, six.text_type('Internal error'))) continue elif i >= len(self.test_resources): return else: yield resource list_json_patcher = mock.patch( 'googlecloudsdk.api_lib.compute.request_helper.ListJson') self.addCleanup(list_json_patcher.stop) self.list_json = list_json_patcher.start() self.list_json.side_effect = ReplicatePartialError
def testBatchList(self): lister_patcher = mock.patch( 'googlecloudsdk.api_lib.compute.lister.GetZonalResourcesDicts', autospec=True) self.addCleanup(lister_patcher.stop) self.mock_get_zonal_resources = lister_patcher.start() self.mock_get_zonal_resources.return_value = [1, 2, 3] self.api_mock = utils.ComputeApiMock('v1').Start() self.addCleanup(self.api_mock.Stop) resource_registry = resources.REGISTRY.Clone() resource_registry.RegisterApiByName('compute', 'v1') zone1 = resource_registry.Parse( 'https://compute.googleapis.com/compute/v1/projects/' 'lister-project/zones/my-zone-1') zone2 = resource_registry.Parse( 'https://compute.googleapis.com/compute/v1/projects/' 'lister-project/zones/my-zone-2') frontend = lister._Frontend('filter', 123, lister.ZoneSet([zone1, zone2])) zonal_lister = lister.ZonalLister(self.api_mock.adapter, 'service') result = list(zonal_lister(frontend)) self.assertListEqual(result, [1, 2, 3]) self.mock_get_zonal_resources.assert_called_once_with( service='service', project=self.Project(), requested_zones=['my-zone-1', 'my-zone-2'], filter_expr='filter', http=self.api_mock.adapter.apitools_client.http, batch_url=self.api_mock.adapter.batch_url, errors=[])
def SetUp(self): self.SelectApi(self.api_version) self.api_mock = utils.ComputeApiMock(self.api_version).Start() self.addCleanup(self.api_mock.Stop) # os-inventory list implementation always uses this implementation self.implementation = lister.MultiScopeLister( self.api_mock.adapter, zonal_service=self.api_mock.adapter.apitools_client.instances, aggregation_service=self.api_mock.adapter.apitools_client.instances ) if self.api_version == 'v1': self.instances = test_resources.INSTANCES_V1 elif self.api_version == 'beta': self.instances = test_resources.INSTANCES_BETA elif self.api_version == 'alpha': self.instances = test_resources.INSTANCES_ALPHA else: raise ValueError( 'api_version must be \'v1\', \'beta\' or \'alpha\', got [{0}]' .format(self.api_version))
def testGlobalList(self): lister_patcher = mock.patch( 'googlecloudsdk.api_lib.compute.request_helper.ListJson', autospec=True) self.addCleanup(lister_patcher.stop) self.list_json = lister_patcher.start() self.list_json.return_value = [1, 2, 3] self.api_mock = utils.ComputeApiMock('v1').Start() self.addCleanup(self.api_mock.Stop) resource_registry = resources.REGISTRY.Clone() resource_registry.RegisterApiByName('compute', 'v1') project = resource_registry.Parse( 'https://compute.googleapis.com/compute/v1/projects/lister-project') frontend = lister._Frontend('filter', 123, lister.GlobalScope([project])) zones_lister = lister.MultiScopeLister( self.api_mock.adapter, global_service=self.api_mock.adapter.apitools_client.zones) result = list(zones_lister(frontend)) self.assertListEqual(result, [1, 2, 3]) self.list_json.assert_called_once_with( requests=[(self.api_mock.adapter.apitools_client.zones, 'List', self.api_mock.adapter.messages.ComputeZonesListRequest( filter='filter', maxResults=123, project='lister-project'))], http=self.api_mock.adapter.apitools_client.http, batch_url=self.api_mock.adapter.batch_url, errors=[])
def SetUp(self): self._SetUpReleaseTrack() self.api_mock = utils.ComputeApiMock(self._GetApiName(self.track), project=self.Project()).Start() self.addCleanup(self.api_mock.Stop)