def testMultipleFiltersGetTranslated(self, track): self.track = track expected_filter = ('metadata.common.operation_type=IMPORT_ENTITIES ' 'AND (metadata.entity_filter.namespace_id=n ' 'AND (metadata.common.labels.k=v ' 'AND (metadata.common.labels.k2=v2 ' 'AND metadata.entity_filter.kind=k)))') request = self.GetMockListRequest(operation_filter=expected_filter) operation_name = 'export operation name' operation_list = [ operations.GetMessages().GoogleLongrunningOperation( done=False, name=operation_name) ] response = operations.GetMessages( ).GoogleLongrunningListOperationsResponse(operations=operation_list) self.mock_datastore_v1.projects_operations.List.Expect( request, response=response) actual = list( self.RunDatastoreTest('operations list --filter=\'%s\'' % ('type:IMPORT_ENTITIES AND namespace:n AND ' 'label.k:v AND label.k2:v2 AND kind:k'))) self.assertEqual(1, len(actual)) self.assertEqual(operation_name, actual[0].name)
def testExportNonAsync(self): output_url_prefix = 'gs://gcs_bucket' expected_request = admin_api.GetExportEntitiesRequest( self.Project(), output_url_prefix) operation_name = 'projects/{}/operations/exportoperationname'.format( self.Project()) mock_response = operations.GetMessages().GoogleLongrunningOperation( done=False, name=operation_name) expected_operation_get = ( operations.GetMessages().DatastoreProjectsOperationsGetRequest()) expected_operation_get.name = operation_name # Expect several calls while done=False, then we get a response from the # command once the export is complete. self.mock_datastore_v1.projects.Export.Expect(expected_request, response=mock_response) self.mock_datastore_v1.projects_operations.Get.Expect( expected_operation_get, response=mock_response) self.mock_datastore_v1.projects_operations.Get.Expect( expected_operation_get, response=mock_response) mock_response = operations.GetMessages().GoogleLongrunningOperation( done=True, name=operation_name) self.mock_datastore_v1.projects_operations.Get.Expect( expected_operation_get, response=mock_response) # Call RunDatastoreTest directly, because we don't want --async. resp = self.RunDatastoreTest('export {}'.format(output_url_prefix)) self.assertEqual(operation_name, resp.name) self.AssertErrContains( 'Waiting for [{}] to finish'.format(operation_name))
def testImportWithEntitySpecAndLabels(self): input_url = 'gs://gcs_bucket/gcs_file' labels = {'a_key': 'a_value', 'b_key': 'b_value'} kinds = ['Customer', 'Orders'] namespaces = ['APAC', 'EMEA', '(default)'] expected_namespaces = ['APAC', 'EMEA', ''] expected_request = admin_api.GetImportEntitiesRequest( self.Project(), input_url, labels=labels, kinds=kinds, namespaces=expected_namespaces) operation_name = 'import operation name' mock_response = operations.GetMessages().GoogleLongrunningOperation( done=False, name=operation_name) self.mock_datastore_v1.projects.Import.Expect(expected_request, response=mock_response) actual = self.RunImportTest(labels=labels, kinds=kinds, namespaces=namespaces, input_url=input_url) self.assertEqual(operation_name, actual.name)
def GetMockListRequest(self, operation_filter=None, page_size=operations.DEFAULT_PAGE_SIZE, page_token=None): return operations.GetMessages().DatastoreProjectsOperationsListRequest( filter=operation_filter, name='projects/%s' % (self.Project()), pageSize=page_size, pageToken=page_token)
def testList(self, track): self.track = track request = self.GetMockListRequest() operation_name = 'export operation name' operation_list = [ operations.GetMessages().GoogleLongrunningOperation( done=False, name=operation_name) ] response = operations.GetMessages( ).GoogleLongrunningListOperationsResponse(operations=operation_list) self.mock_datastore_v1.projects_operations.List.Expect( request, response=response) actual = list(self.RunDatastoreTest('operations list')) self.assertEqual(1, len(actual)) self.assertEqual(operation_name, actual[0].name)
def testDeleteAbsolutePath(self, track): self.track = track operation_name_full = 'projects/my-test-project/operations/doomed' request = self._GetMockDeleteRequest(operation_name_full) response = operations.GetMessages().Empty() self.mock_datastore_v1.projects_operations.Delete.Expect( request, response=response) self.RunDatastoreTest( 'operations delete {}'.format(operation_name_full))
def testListWithLabelCorrectUsageGetsTranslated(self, track): self.track = track expected_filter = 'metadata.common.labels.k=v' request = self.GetMockListRequest(operation_filter=expected_filter) operation_name = 'export operation name' operation_list = [ operations.GetMessages().GoogleLongrunningOperation( done=False, name=operation_name) ] response = operations.GetMessages( ).GoogleLongrunningListOperationsResponse(operations=operation_list) self.mock_datastore_v1.projects_operations.List.Expect( request, response=response) actual = list( self.RunDatastoreTest('operations list --filter=\'labels.k:v\'')) self.assertEqual(1, len(actual)) self.assertEqual(operation_name, actual[0].name)
def testExport(self): output_url_prefix = 'gs://gcs_bucket' expected_request = admin_api.GetExportEntitiesRequest( self.Project(), output_url_prefix) operation_name = 'export operation name' mock_response = operations.GetMessages().GoogleLongrunningOperation( done=False, name=operation_name) self.mock_datastore_v1.projects.Export.Expect(expected_request, response=mock_response) resp = self.RunExportTest(output_url_prefix=output_url_prefix) self.assertEqual(operation_name, resp.name)
def testCancelRelativeResourcePath(self, track): self.track = track operation_name_relative = 'doomed' operation_name_full = 'projects/my-test-project/operations/doomed' request = self._GetMockCancelRequest(operation_name_full) response = operations.GetMessages().Empty() self.mock_datastore_v1.projects_operations.Cancel.Expect( request, response=response) self.RunDatastoreTest( 'operations cancel {}'.format(operation_name_relative))
def testImport(self): input_url = 'gs://gcs_bucket/gcs_object' expected_request = admin_api.GetImportEntitiesRequest( self.Project(), input_url) operation_name = 'import operation name' mock_response = operations.GetMessages().GoogleLongrunningOperation( done=False, name=operation_name) self.mock_datastore_v1.projects.Import.Expect(expected_request, response=mock_response) actual = self.RunImportTest(input_url=input_url) self.assertEqual(operation_name, actual.name)
def testListWithDefaultNamespaceGetsTranslated(self, track): self.track = track expected_filter = 'metadata.entity_filter.namespace_id=""' request = self.GetMockListRequest(operation_filter=expected_filter) operation_name = 'export operation name' operation_list = [ operations.GetMessages().GoogleLongrunningOperation( done=False, name=operation_name) ] response = operations.GetMessages( ).GoogleLongrunningListOperationsResponse(operations=operation_list) self.mock_datastore_v1.projects_operations.List.Expect( request, response=response) actual = list( self.RunDatastoreTest( 'operations list --filter=\'namespace:"(default)"\'')) self.assertEqual(1, len(actual)) self.assertEqual(operation_name, actual[0].name)
def testGetAbsoluteResource(self, track): self.track = track operation_name_full = ( 'projects/my-test-project/operations/export_operation_name') request = self.GetMockGetRequest(operation_name_full) response = operations.GetMessages().GoogleLongrunningOperation( done=False, name=operation_name_full) self.mock_datastore_v1.projects_operations.Get.Expect( request, response=response) actual = self.RunDatastoreTest('operations describe %s' % operation_name_full) self.assertEqual(operation_name_full, actual.name)
def _GetMockDeleteRequest(self, name): messages = operations.GetMessages() request = messages.DatastoreProjectsOperationsDeleteRequest() request.name = name return request