Vehicle-Anti-Theft-Face-Rec.../venv/Lib/site-packages/gcloud/monitoring/test_resource.py

339 lines
12 KiB
Python

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import unittest2
class TestResourceDescriptor(unittest2.TestCase):
def _getTargetClass(self):
from gcloud.monitoring.resource import ResourceDescriptor
return ResourceDescriptor
def _makeOne(self, *args, **kwargs):
return self._getTargetClass()(*args, **kwargs)
def test_constructor(self):
from gcloud.monitoring.label import LabelDescriptor
TYPE = 'gce_instance'
NAME = 'projects/my-project/monitoredResourceDescriptors/' + TYPE
DISPLAY_NAME = 'GCE Instance'
DESCRIPTION = 'A VM instance hosted in Google Compute Engine.'
LABELS = [
LabelDescriptor(key='project_id', value_type='STRING',
description='The ID of the GCP project...'),
LabelDescriptor(key='instance_id', value_type='STRING',
description='The VM instance identifier...'),
LabelDescriptor(key='zone', value_type='STRING',
description='The GCE zone...'),
]
descriptor = self._makeOne(
name=NAME,
type_=TYPE,
display_name=DISPLAY_NAME,
description=DESCRIPTION,
labels=LABELS,
)
self.assertEqual(descriptor.name, NAME)
self.assertEqual(descriptor.type, TYPE)
self.assertEqual(descriptor.display_name, DISPLAY_NAME)
self.assertEqual(descriptor.description, DESCRIPTION)
self.assertEqual(descriptor.labels, LABELS)
def test_from_dict(self):
TYPE = 'gce_instance'
NAME = 'projects/my-project/monitoredResourceDescriptors/' + TYPE
DISPLAY_NAME = 'GCE Instance'
DESCRIPTION = 'A VM instance hosted in Google Compute Engine.'
LABEL1 = {'key': 'project_id', 'valueType': 'STRING',
'description': 'The ID of the GCP project...'}
LABEL2 = {'key': 'instance_id', 'valueType': 'STRING',
'description': 'The VM instance identifier...'}
LABEL3 = {'key': 'zone', 'valueType': 'STRING',
'description': 'The GCE zone...'}
info = {
'name': NAME,
'type': TYPE,
'displayName': DISPLAY_NAME,
'description': DESCRIPTION,
'labels': [LABEL1, LABEL2, LABEL3],
}
descriptor = self._getTargetClass()._from_dict(info)
self.assertEqual(descriptor.name, NAME)
self.assertEqual(descriptor.type, TYPE)
self.assertEqual(descriptor.display_name, DISPLAY_NAME)
self.assertEqual(descriptor.description, DESCRIPTION)
self.assertEqual(len(descriptor.labels), 3)
label1, label2, label3 = descriptor.labels
self.assertEqual(label1.key, LABEL1['key'])
self.assertEqual(label2.key, LABEL2['key'])
self.assertEqual(label3.key, LABEL3['key'])
def test_from_dict_defaults(self):
TYPE = 'gce_instance'
NAME = 'projects/my-project/monitoredResourceDescriptors/' + TYPE
info = {
'name': NAME,
'type': TYPE,
}
descriptor = self._getTargetClass()._from_dict(info)
self.assertEqual(descriptor.name, NAME)
self.assertEqual(descriptor.type, TYPE)
self.assertEqual(descriptor.display_name, '')
self.assertEqual(descriptor.description, '')
self.assertEqual(descriptor.labels, ())
def test_fetch(self):
PROJECT = 'my-project'
TYPE = 'gce_instance'
NAME = 'projects/{project}/monitoredResourceDescriptors/{type}'.format(
project=PROJECT, type=TYPE)
DISPLAY_NAME = 'GCE Instance'
DESCRIPTION = 'A VM instance hosted in Google Compute Engine.'
LABEL1 = {'key': 'project_id', 'valueType': 'STRING',
'description': 'The ID of the GCP project...'}
LABEL2 = {'key': 'instance_id', 'valueType': 'STRING',
'description': 'The VM instance identifier...'}
LABEL3 = {'key': 'zone', 'valueType': 'STRING',
'description': 'The GCE zone...'}
RESOURCE_DESCRIPTOR = {
'name': NAME,
'type': TYPE,
'displayName': DISPLAY_NAME,
'description': DESCRIPTION,
'labels': [LABEL1, LABEL2, LABEL3],
}
connection = _Connection(RESOURCE_DESCRIPTOR)
client = _Client(project=PROJECT, connection=connection)
descriptor = self._getTargetClass()._fetch(client, TYPE)
self.assertEqual(descriptor.name, NAME)
self.assertEqual(descriptor.type, TYPE)
self.assertEqual(descriptor.display_name, DISPLAY_NAME)
self.assertEqual(descriptor.description, DESCRIPTION)
self.assertEqual(len(descriptor.labels), 3)
label1, label2, label3 = descriptor.labels
self.assertEqual(label1.key, LABEL1['key'])
self.assertEqual(label2.key, LABEL2['key'])
self.assertEqual(label3.key, LABEL3['key'])
request, = connection._requested
expected_request = {'method': 'GET', 'path': '/' + NAME}
self.assertEqual(request, expected_request)
def test_list(self):
PROJECT = 'my-project'
PATH = 'projects/{project}/monitoredResourceDescriptors/'.format(
project=PROJECT)
TYPE1 = 'custom.googleapis.com/resource-1'
DESCRIPTION1 = 'This is the first resource.'
NAME1 = PATH + TYPE1
RESOURCE_DESCRIPTOR1 = {
'name': NAME1,
'type': TYPE1,
'description': DESCRIPTION1,
}
TYPE2 = 'custom.googleapis.com/resource-2'
DESCRIPTION2 = 'This is the second resource.'
NAME2 = PATH + TYPE2
RESOURCE_DESCRIPTOR2 = {
'name': NAME2,
'type': TYPE2,
'description': DESCRIPTION2,
}
RESPONSE = {
'resourceDescriptors':
[RESOURCE_DESCRIPTOR1, RESOURCE_DESCRIPTOR2],
}
connection = _Connection(RESPONSE)
client = _Client(project=PROJECT, connection=connection)
descriptors = self._getTargetClass()._list(client)
self.assertEqual(len(descriptors), 2)
descriptor1, descriptor2 = descriptors
self.assertEqual(descriptor1.name, NAME1)
self.assertEqual(descriptor1.type, TYPE1)
self.assertEqual(descriptor1.description, DESCRIPTION1)
self.assertEqual(descriptor2.name, NAME2)
self.assertEqual(descriptor2.type, TYPE2)
self.assertEqual(descriptor2.description, DESCRIPTION2)
request, = connection._requested
expected_request = {'method': 'GET', 'path': '/' + PATH,
'query_params': {}}
self.assertEqual(request, expected_request)
def test_list_paged(self):
from gcloud.exceptions import NotFound
PROJECT = 'my-project'
PATH = 'projects/{project}/monitoredResourceDescriptors/'.format(
project=PROJECT)
TYPE1 = 'custom.googleapis.com/resource-1'
DESCRIPTION1 = 'This is the first resource.'
NAME1 = PATH + TYPE1
RESOURCE_DESCRIPTOR1 = {
'name': NAME1,
'type': TYPE1,
'description': DESCRIPTION1,
}
TYPE2 = 'custom.googleapis.com/resource-2'
DESCRIPTION2 = 'This is the second resource.'
NAME2 = PATH + TYPE2
RESOURCE_DESCRIPTOR2 = {
'name': NAME2,
'type': TYPE2,
'description': DESCRIPTION2,
}
TOKEN = 'second-page-please'
RESPONSE1 = {
'resourceDescriptors': [RESOURCE_DESCRIPTOR1],
'nextPageToken': TOKEN,
}
RESPONSE2 = {
'resourceDescriptors': [RESOURCE_DESCRIPTOR2],
}
connection = _Connection(RESPONSE1, RESPONSE2)
client = _Client(project=PROJECT, connection=connection)
descriptors = self._getTargetClass()._list(client)
self.assertEqual(len(descriptors), 2)
descriptor1, descriptor2 = descriptors
self.assertEqual(descriptor1.name, NAME1)
self.assertEqual(descriptor1.type, TYPE1)
self.assertEqual(descriptor1.description, DESCRIPTION1)
self.assertEqual(descriptor2.name, NAME2)
self.assertEqual(descriptor2.type, TYPE2)
self.assertEqual(descriptor2.description, DESCRIPTION2)
request1, request2 = connection._requested
expected_request1 = {'method': 'GET', 'path': '/' + PATH,
'query_params': {}}
expected_request2 = {'method': 'GET', 'path': '/' + PATH,
'query_params': {'pageToken': TOKEN}}
self.assertEqual(request1, expected_request1)
self.assertEqual(request2, expected_request2)
with self.assertRaises(NotFound):
self._getTargetClass()._list(client)
def test_list_filtered(self):
PROJECT = 'my-project'
PATH = 'projects/{project}/monitoredResourceDescriptors/'.format(
project=PROJECT)
# Request only resources with type names that start with "foobar_".
FILTER = 'resource.type = starts_with("foobar_")'
# But there are none.
RESPONSE = {'resourceDescriptors': []}
connection = _Connection(RESPONSE)
client = _Client(project=PROJECT, connection=connection)
descriptors = self._getTargetClass()._list(client, FILTER)
self.assertEqual(len(descriptors), 0)
request, = connection._requested
expected_request = {'method': 'GET', 'path': '/' + PATH,
'query_params': {'filter': FILTER}}
self.assertEqual(request, expected_request)
class TestResource(unittest2.TestCase):
def _getTargetClass(self):
from gcloud.monitoring.resource import Resource
return Resource
def _makeOne(self, *args, **kwargs):
return self._getTargetClass()(*args, **kwargs)
def test_constructor(self):
TYPE = 'gce_instance'
LABELS = {
'project_id': 'my-project',
'instance_id': '1234567890123456789',
'zone': 'us-central1-a',
}
resource = self._makeOne(type=TYPE, labels=LABELS)
self.assertEqual(resource.type, TYPE)
self.assertEqual(resource.labels, LABELS)
def test_from_dict(self):
TYPE = 'gce_instance'
LABELS = {
'project_id': 'my-project',
'instance_id': '1234567890123456789',
'zone': 'us-central1-a',
}
info = {
'type': TYPE,
'labels': LABELS,
}
resource = self._getTargetClass()._from_dict(info)
self.assertEqual(resource.type, TYPE)
self.assertEqual(resource.labels, LABELS)
def test_from_dict_defaults(self):
TYPE = 'gce_instance'
info = {'type': TYPE}
resource = self._getTargetClass()._from_dict(info)
self.assertEqual(resource.type, TYPE)
self.assertEqual(resource.labels, {})
class _Connection(object):
def __init__(self, *responses):
self._responses = list(responses)
self._requested = []
def api_request(self, **kwargs):
from gcloud.exceptions import NotFound
self._requested.append(kwargs)
try:
return self._responses.pop(0)
except IndexError:
raise NotFound('miss')
class _Client(object):
def __init__(self, project, connection):
self.project = project
self.connection = connection