def test_list_instances(self): from google.cloud.spanner_admin_instance_v1 import InstanceAdminClient from google.cloud.spanner_admin_instance_v1 import Instance as InstancePB from google.cloud.spanner_admin_instance_v1 import ListInstancesRequest from google.cloud.spanner_admin_instance_v1 import ListInstancesResponse api = InstanceAdminClient(credentials=mock.Mock()) credentials = _make_credentials() client = self._make_one(project=self.PROJECT, credentials=credentials) client._instance_admin_api = api instance_pbs = ListInstancesResponse( instances=[ InstancePB( name=self.INSTANCE_NAME, config=self.CONFIGURATION_NAME, display_name=self.DISPLAY_NAME, node_count=self.NODE_COUNT, processing_units=self.PROCESSING_UNITS, ) ] ) li_api = api._transport._wrapped_methods[ api._transport.list_instances ] = mock.Mock(return_value=instance_pbs) response = client.list_instances() instances = list(response) instance = instances[0] self.assertIsInstance(instance, InstancePB) self.assertEqual(instance.name, self.INSTANCE_NAME) self.assertEqual(instance.config, self.CONFIGURATION_NAME) self.assertEqual(instance.display_name, self.DISPLAY_NAME) self.assertEqual(instance.node_count, self.NODE_COUNT) self.assertEqual(instance.processing_units, self.PROCESSING_UNITS) expected_metadata = ( ("google-cloud-resource-prefix", client.project_name), ("x-goog-request-params", "parent={}".format(client.project_name)), ) li_api.assert_called_once_with( ListInstancesRequest(parent=self.PATH), metadata=expected_metadata, retry=mock.ANY, timeout=mock.ANY, )
def update(self): """Update this instance. See https://cloud.google.com/spanner/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstance .. note:: Updates the ``display_name``, ``node_count``, ``processing_units`` and ``labels``. To change those values before updating, set them via .. code:: python instance.display_name = 'New display name' instance.node_count = 5 before calling :meth:`update`. :rtype: :class:`google.api_core.operation.Operation` :returns: an operation instance :raises NotFound: if the instance does not exist """ api = self._client.instance_admin_api instance_pb = InstancePB( name=self.name, config=self.configuration_name, display_name=self.display_name, node_count=self._node_count, processing_units=self._processing_units, labels=self.labels, ) # Always update only processing_units, not nodes field_mask = FieldMask( paths=["config", "display_name", "processing_units", "labels"] ) metadata = _metadata_with_prefix(self.name) future = api.update_instance( instance=instance_pb, field_mask=field_mask, metadata=metadata ) return future
def create(self): """Create this instance. See https://cloud.google.com/spanner/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.CreateInstance .. note:: Uses the ``project`` and ``instance_id`` on the current :class:`Instance` in addition to the ``display_name``. To change them before creating, reset the values via .. code:: python instance.display_name = 'New display name' instance.instance_id = 'i-changed-my-mind' before calling :meth:`create`. :rtype: :class:`~google.api_core.operation.Operation` :returns: an operation instance :raises Conflict: if the instance already exists """ api = self._client.instance_admin_api instance_pb = InstancePB( name=self.name, config=self.configuration_name, display_name=self.display_name, node_count=self.node_count, labels=self.labels, ) metadata = _metadata_with_prefix(self.name) future = api.create_instance( parent=self._client.project_name, instance_id=self.instance_id, instance=instance_pb, metadata=metadata, ) return future