Esempio n. 1
0
    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
Esempio n. 2
0
  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
Esempio n. 4
0
  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=[])
Esempio n. 5
0
  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=[])
Esempio n. 6
0
    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)
Esempio n. 7
0
    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
Esempio n. 8
0
    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
Esempio n. 9
0
    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()
Esempio n. 10
0
  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)
Esempio n. 11
0
    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')])
Esempio n. 12
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, [])
Esempio n. 13
0
  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=[])
Esempio n. 14
0
  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])
Esempio n. 15
0
    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
Esempio n. 16
0
  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=[])
Esempio n. 17
0
    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))
Esempio n. 18
0
  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=[])
Esempio n. 19
0
 def SetUp(self):
     self._SetUpReleaseTrack()
     self.api_mock = utils.ComputeApiMock(self._GetApiName(self.track),
                                          project=self.Project()).Start()
     self.addCleanup(self.api_mock.Stop)