def test_create_instance(self):
        # Setup Expected Response
        name = "name3373707"
        display_name = "displayName1615086568"
        location_id = "locationId552319461"
        alternative_location_id = "alternativeLocationId-718920621"
        redis_version = "redisVersion-685310444"
        reserved_ip_range = "reservedIpRange-1082940580"
        host = "host3208616"
        port = 3446913
        current_location_id = "currentLocationId1312712735"
        status_message = "statusMessage-239442758"
        memory_size_gb_2 = 1493816946
        authorized_network = "authorizedNetwork-1733809270"
        persistence_iam_identity = "persistenceIamIdentity1061944584"
        expected_response = {
            "name": name,
            "display_name": display_name,
            "location_id": location_id,
            "alternative_location_id": alternative_location_id,
            "redis_version": redis_version,
            "reserved_ip_range": reserved_ip_range,
            "host": host,
            "port": port,
            "current_location_id": current_location_id,
            "status_message": status_message,
            "memory_size_gb": memory_size_gb_2,
            "authorized_network": authorized_network,
            "persistence_iam_identity": persistence_iam_identity,
        }
        expected_response = cloud_redis_pb2.Instance(**expected_response)
        operation = operations_pb2.Operation(
            name="operations/test_create_instance", done=True
        )
        operation.response.Pack(expected_response)

        # Mock the API response
        channel = ChannelStub(responses=[operation])
        patch = mock.patch("google.api_core.grpc_helpers.create_channel")
        with patch as create_channel:
            create_channel.return_value = channel
            client = redis_v1.CloudRedisClient()

        # Setup Request
        parent = client.location_path("[PROJECT]", "[LOCATION]")
        instance_id = "test_instance"
        tier = enums.Instance.Tier.BASIC
        memory_size_gb = 1
        instance = {"tier": tier, "memory_size_gb": memory_size_gb}

        response = client.create_instance(parent, instance_id, instance)
        result = response.result()
        assert expected_response == result

        assert len(channel.requests) == 1
        expected_request = cloud_redis_pb2.CreateInstanceRequest(
            parent=parent, instance_id=instance_id, instance=instance
        )
        actual_request = channel.requests[0][1]
        assert expected_request == actual_request
    def test_create_instance(self):
        # Setup Expected Response
        name = 'name3373707'
        display_name = 'displayName1615086568'
        location_id = 'locationId552319461'
        alternative_location_id = 'alternativeLocationId-718920621'
        redis_version = 'redisVersion-685310444'
        reserved_ip_range = 'reservedIpRange-1082940580'
        host = 'host3208616'
        port = 3446913
        current_location_id = 'currentLocationId1312712735'
        status_message = 'statusMessage-239442758'
        memory_size_gb_2 = 1493816946
        authorized_network = 'authorizedNetwork-1733809270'
        expected_response = {
            'name': name,
            'display_name': display_name,
            'location_id': location_id,
            'alternative_location_id': alternative_location_id,
            'redis_version': redis_version,
            'reserved_ip_range': reserved_ip_range,
            'host': host,
            'port': port,
            'current_location_id': current_location_id,
            'status_message': status_message,
            'memory_size_gb': memory_size_gb_2,
            'authorized_network': authorized_network
        }
        expected_response = cloud_redis_pb2.Instance(**expected_response)
        operation = operations_pb2.Operation(
            name='operations/test_create_instance', done=True)
        operation.response.Pack(expected_response)

        # Mock the API response
        channel = ChannelStub(responses=[operation])
        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
        with patch as create_channel:
            create_channel.return_value = channel
            client = redis_v1.CloudRedisClient()

        # Setup Request
        parent = client.location_path('[PROJECT]', '[LOCATION]')
        instance_id = 'test_instance'
        tier = enums.Instance.Tier.BASIC
        memory_size_gb = 1
        instance = {'tier': tier, 'memory_size_gb': memory_size_gb}

        response = client.create_instance(parent, instance_id, instance)
        result = response.result()
        assert expected_response == result

        assert len(channel.requests) == 1
        expected_request = cloud_redis_pb2.CreateInstanceRequest(
            parent=parent, instance_id=instance_id, instance=instance)
        actual_request = channel.requests[0][1]
        assert expected_request == actual_request
    def create_instance(
        self,
        parent,
        instance_id,
        instance,
        retry=google.api_core.gapic_v1.method.DEFAULT,
        timeout=google.api_core.gapic_v1.method.DEFAULT,
        metadata=None,
    ):
        """
        Creates a Redis instance based on the specified tier and memory size.

        By default, the instance is accessible from the project's `default
        network <https://cloud.google.com/compute/docs/networks-and-firewalls#networks>`__.

        The creation is executed asynchronously and callers may check the
        returned operation to track its progress. Once the operation is
        completed the Redis instance will be fully functional. Completed
        longrunning.Operation will contain the new instance object in the
        response field.

        The returned operation is automatically deleted after a few hours, so
        there is no need to call DeleteOperation.

        Example:
            >>> from google.cloud import redis_v1
            >>> from google.cloud.redis_v1 import enums
            >>>
            >>> client = redis_v1.CloudRedisClient()
            >>>
            >>> parent = client.location_path('[PROJECT]', '[LOCATION]')
            >>> instance_id = 'test_instance'
            >>> tier = enums.Instance.Tier.BASIC
            >>> memory_size_gb = 1
            >>> instance = {'tier': tier, 'memory_size_gb': memory_size_gb}
            >>>
            >>> response = client.create_instance(parent, instance_id, instance)
            >>>
            >>> def callback(operation_future):
            ...     # Handle result.
            ...     result = operation_future.result()
            >>>
            >>> response.add_done_callback(callback)
            >>>
            >>> # Handle metadata.
            >>> metadata = response.metadata()

        Args:
            parent (str): Required. The resource name of the instance location using the form:
                ``projects/{project_id}/locations/{location_id}`` where ``location_id``
                refers to a GCP region
            instance_id (str): Required. The logical name of the Redis instance in the customer project
                with the following restrictions:

                -  Must contain only lowercase letters, numbers, and hyphens.
                -  Must start with a letter.
                -  Must be between 1-40 characters.
                -  Must end with a number or a letter.
                -  Must be unique within the customer project / location
            instance (Union[dict, ~google.cloud.redis_v1.types.Instance]): Required. A Redis [Instance] resource

                If a dict is provided, it must be of the same form as the protobuf
                message :class:`~google.cloud.redis_v1.types.Instance`
            retry (Optional[google.api_core.retry.Retry]):  A retry object used
                to retry requests. If ``None`` is specified, requests will not
                be retried.
            timeout (Optional[float]): The amount of time, in seconds, to wait
                for the request to complete. Note that if ``retry`` is
                specified, the timeout applies to each individual attempt.
            metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
                that is provided to the method.

        Returns:
            A :class:`~google.cloud.redis_v1.types._OperationFuture` instance.

        Raises:
            google.api_core.exceptions.GoogleAPICallError: If the request
                    failed for any reason.
            google.api_core.exceptions.RetryError: If the request failed due
                    to a retryable error and retry attempts failed.
            ValueError: If the parameters are invalid.
        """
        # Wrap the transport method to add retry and timeout logic.
        if "create_instance" not in self._inner_api_calls:
            self._inner_api_calls[
                "create_instance"] = google.api_core.gapic_v1.method.wrap_method(
                    self.transport.create_instance,
                    default_retry=self._method_configs["CreateInstance"].retry,
                    default_timeout=self._method_configs["CreateInstance"].
                    timeout,
                    client_info=self._client_info,
                )

        request = cloud_redis_pb2.CreateInstanceRequest(
            parent=parent, instance_id=instance_id, instance=instance)
        operation = self._inner_api_calls["create_instance"](request,
                                                             retry=retry,
                                                             timeout=timeout,
                                                             metadata=metadata)
        return google.api_core.operation.from_gapic(
            operation,
            self.transport._operations_client,
            cloud_redis_pb2.Instance,
            metadata_type=cloud_redis_pb2.OperationMetadata,
        )