def test_with_update_cluster_metadata(self):
        from gcloud.bigtable._generated import any_pb2
        from gcloud.bigtable._generated import (
            bigtable_cluster_data_pb2 as data_pb2)
        from gcloud.bigtable._generated import (
            bigtable_cluster_service_messages_pb2 as messages_pb2)
        from gcloud.bigtable._generated.timestamp_pb2 import Timestamp

        type_url = ('type.googleapis.com/' +
                    messages_pb2._UPDATECLUSTERMETADATA.full_name)
        metadata = messages_pb2.UpdateClusterMetadata(
            request_time=Timestamp(seconds=1, nanos=1234),
            finish_time=Timestamp(seconds=10, nanos=891011),
            cancel_time=Timestamp(seconds=100, nanos=76543),
            original_request=data_pb2.Cluster(
                display_name='the-end',
                serve_nodes=42,
            ),
        )

        any_val = any_pb2.Any(
            type_url=type_url,
            value=metadata.SerializeToString(),
        )
        result = self._callFUT(any_val)
        self.assertEqual(result, metadata)
    def test_unknown_type_url(self):
        from gcloud._testing import _Monkey
        from gcloud.bigtable._generated import any_pb2
        from gcloud.bigtable import cluster as MUT

        fake_type_url_map = {}
        any_val = any_pb2.Any()
        with _Monkey(MUT, _TYPE_URL_MAP=fake_type_url_map):
            with self.assertRaises(KeyError):
                self._callFUT(any_val)
    def test_disagreeing_type_url(self):
        from gcloud._testing import _Monkey
        from gcloud.bigtable._generated import any_pb2
        from gcloud.bigtable import cluster as MUT

        type_url1 = 'foo'
        type_url2 = 'bar'
        fake_type_url_map = {type_url1: None}
        any_val = any_pb2.Any(type_url=type_url2)
        with _Monkey(MUT, _TYPE_URL_MAP=fake_type_url_map):
            with self.assertRaises(ValueError):
                self._callFUT(any_val, expected_type=type_url1)
    def test_with_undelete_cluster_metadata(self):
        from gcloud.bigtable._generated import any_pb2
        from gcloud.bigtable._generated import (
            bigtable_cluster_data_pb2 as data_pb2)
        from gcloud.bigtable._generated import (
            bigtable_cluster_service_messages_pb2 as messages_pb2)
        from gcloud.bigtable._generated.timestamp_pb2 import Timestamp

        type_url = ('type.googleapis.com/' +
                    messages_pb2._UNDELETECLUSTERMETADATA.full_name)
        metadata = messages_pb2.UndeleteClusterMetadata(
            request_time=Timestamp(seconds=1, nanos=1234),
            finish_time=Timestamp(seconds=10, nanos=891011),
        )

        any_val = any_pb2.Any(
            type_url=type_url,
            value=metadata.SerializeToString(),
        )
        result = self._callFUT(any_val)
        self.assertEqual(result, metadata)
    def test_with_known_type_url(self):
        from gcloud._testing import _Monkey
        from gcloud.bigtable._generated import any_pb2
        from gcloud.bigtable._generated import bigtable_data_pb2 as data_pb2
        from gcloud.bigtable import cluster as MUT

        type_url = 'type.googleapis.com/' + data_pb2._CELL.full_name
        fake_type_url_map = {type_url: data_pb2.Cell}

        cell = data_pb2.Cell(
            timestamp_micros=0,
            value=b'foobar',
        )
        any_val = any_pb2.Any(
            type_url=type_url,
            value=cell.SerializeToString(),
        )
        with _Monkey(MUT, _TYPE_URL_MAP=fake_type_url_map):
            result = self._callFUT(any_val)

        self.assertEqual(result, cell)