Vehicle-Anti-Theft-Face-Rec.../venv/Lib/site-packages/gcloud/logging/test_client.py

495 lines
17 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 TestClient(unittest2.TestCase):
PROJECT = 'PROJECT'
LOGGER_NAME = 'LOGGER_NAME'
SINK_NAME = 'SINK_NAME'
FILTER = 'logName:syslog AND severity>=ERROR'
DESTINATION_URI = 'faux.googleapis.com/destination'
METRIC_NAME = 'metric_name'
FILTER = 'logName:syslog AND severity>=ERROR'
DESCRIPTION = 'DESCRIPTION'
def _getTargetClass(self):
from gcloud.logging.client import Client
return Client
def _makeOne(self, *args, **kw):
return self._getTargetClass()(*args, **kw)
def test_ctor(self):
creds = _Credentials()
client = self._makeOne(project=self.PROJECT, credentials=creds)
self.assertEqual(client.project, self.PROJECT)
def test_logging_api_wo_gax(self):
from gcloud.logging.connection import _LoggingAPI
from gcloud.logging import client as MUT
from gcloud._testing import _Monkey
client = self._makeOne(self.PROJECT, credentials=_Credentials())
conn = client.connection = object()
with _Monkey(MUT, _USE_GAX=False):
api = client.logging_api
self.assertTrue(isinstance(api, _LoggingAPI))
self.assertTrue(api._connection is conn)
# API instance is cached
again = client.logging_api
self.assertTrue(again is api)
def test_logging_api_w_gax(self):
from gcloud.logging import client as MUT
from gcloud._testing import _Monkey
wrapped = object()
_called_with = []
def _generated_api(*args, **kw):
_called_with.append((args, kw))
return wrapped
class _GaxLoggingAPI(object):
def __init__(self, _wrapped):
self._wrapped = _wrapped
creds = _Credentials()
client = self._makeOne(project=self.PROJECT, credentials=creds)
with _Monkey(MUT,
_USE_GAX=True,
GeneratedLoggingAPI=_generated_api,
GAXLoggingAPI=_GaxLoggingAPI):
api = client.logging_api
self.assertIsInstance(api, _GaxLoggingAPI)
self.assertTrue(api._wrapped is wrapped)
# API instance is cached
again = client.logging_api
self.assertTrue(again is api)
def test_sinks_api_wo_gax(self):
from gcloud.logging.connection import _SinksAPI
from gcloud.logging import client as MUT
from gcloud._testing import _Monkey
client = self._makeOne(self.PROJECT, credentials=_Credentials())
conn = client.connection = object()
with _Monkey(MUT, _USE_GAX=False):
api = client.sinks_api
self.assertTrue(isinstance(api, _SinksAPI))
self.assertTrue(api._connection is conn)
# API instance is cached
again = client.sinks_api
self.assertTrue(again is api)
def test_sinks_api_w_gax(self):
from gcloud.logging import client as MUT
from gcloud._testing import _Monkey
wrapped = object()
_called_with = []
def _generated_api(*args, **kw):
_called_with.append((args, kw))
return wrapped
class _GaxSinksAPI(object):
def __init__(self, _wrapped):
self._wrapped = _wrapped
creds = _Credentials()
client = self._makeOne(project=self.PROJECT, credentials=creds)
with _Monkey(MUT,
_USE_GAX=True,
GeneratedSinksAPI=_generated_api,
GAXSinksAPI=_GaxSinksAPI):
api = client.sinks_api
self.assertIsInstance(api, _GaxSinksAPI)
self.assertTrue(api._wrapped is wrapped)
# API instance is cached
again = client.sinks_api
self.assertTrue(again is api)
def test_metrics_api_wo_gax(self):
from gcloud.logging.connection import _MetricsAPI
from gcloud.logging import client as MUT
from gcloud._testing import _Monkey
client = self._makeOne(self.PROJECT, credentials=_Credentials())
conn = client.connection = object()
with _Monkey(MUT, _USE_GAX=False):
api = client.metrics_api
self.assertTrue(isinstance(api, _MetricsAPI))
self.assertTrue(api._connection is conn)
# API instance is cached
again = client.metrics_api
self.assertTrue(again is api)
def test_metrics_api_w_gax(self):
from gcloud.logging import client as MUT
from gcloud._testing import _Monkey
wrapped = object()
_called_with = []
def _generated_api(*args, **kw):
_called_with.append((args, kw))
return wrapped
class _GaxMetricsAPI(object):
def __init__(self, _wrapped):
self._wrapped = _wrapped
creds = _Credentials()
client = self._makeOne(project=self.PROJECT, credentials=creds)
with _Monkey(MUT,
_USE_GAX=True,
GeneratedMetricsAPI=_generated_api,
GAXMetricsAPI=_GaxMetricsAPI):
api = client.metrics_api
self.assertIsInstance(api, _GaxMetricsAPI)
self.assertTrue(api._wrapped is wrapped)
# API instance is cached
again = client.metrics_api
self.assertTrue(again is api)
def test_logger(self):
from gcloud.logging.logger import Logger
creds = _Credentials()
client = self._makeOne(project=self.PROJECT, credentials=creds)
logger = client.logger(self.LOGGER_NAME)
self.assertTrue(isinstance(logger, Logger))
self.assertEqual(logger.name, self.LOGGER_NAME)
self.assertTrue(logger.client is client)
self.assertEqual(logger.project, self.PROJECT)
def test__entry_from_resource_unknown_type(self):
PROJECT = 'PROJECT'
creds = _Credentials()
client = self._makeOne(PROJECT, creds)
loggers = {}
with self.assertRaises(ValueError):
client._entry_from_resource({'unknownPayload': {}}, loggers)
def test_list_entries_defaults(self):
from gcloud.logging.entries import TextEntry
IID = 'IID'
TEXT = 'TEXT'
TOKEN = 'TOKEN'
ENTRIES = [{
'textPayload': TEXT,
'insertId': IID,
'resource': {
'type': 'global',
},
'logName': 'projects/%s/logs/%s' % (
self.PROJECT, self.LOGGER_NAME),
}]
creds = _Credentials()
client = self._makeOne(project=self.PROJECT, credentials=creds)
api = client._logging_api = _DummyLoggingAPI()
api._list_entries_response = ENTRIES, TOKEN
entries, token = client.list_entries()
self.assertEqual(len(entries), 1)
entry = entries[0]
self.assertTrue(isinstance(entry, TextEntry))
self.assertEqual(entry.insert_id, IID)
self.assertEqual(entry.payload, TEXT)
logger = entry.logger
self.assertEqual(logger.name, self.LOGGER_NAME)
self.assertTrue(logger.client is client)
self.assertEqual(logger.project, self.PROJECT)
self.assertEqual(token, TOKEN)
self.assertEqual(
api._list_entries_called_with,
([self.PROJECT], None, None, None, None))
def test_list_entries_explicit(self):
from gcloud.logging import DESCENDING
from gcloud.logging.entries import ProtobufEntry
from gcloud.logging.entries import StructEntry
from gcloud.logging.logger import Logger
PROJECT1 = 'PROJECT1'
PROJECT2 = 'PROJECT2'
FILTER = 'logName:LOGNAME'
IID1 = 'IID1'
IID2 = 'IID2'
PAYLOAD = {'message': 'MESSAGE', 'weather': 'partly cloudy'}
PROTO_PAYLOAD = PAYLOAD.copy()
PROTO_PAYLOAD['@type'] = 'type.googleapis.com/testing.example'
TOKEN = 'TOKEN'
PAGE_SIZE = 42
ENTRIES = [{
'jsonPayload': PAYLOAD,
'insertId': IID1,
'resource': {
'type': 'global',
},
'logName': 'projects/%s/logs/%s' % (
self.PROJECT, self.LOGGER_NAME),
}, {
'protoPayload': PROTO_PAYLOAD,
'insertId': IID2,
'resource': {
'type': 'global',
},
'logName': 'projects/%s/logs/%s' % (
self.PROJECT, self.LOGGER_NAME),
}]
client = self._makeOne(self.PROJECT, credentials=_Credentials())
api = client._logging_api = _DummyLoggingAPI()
api._list_entries_response = ENTRIES, None
entries, token = client.list_entries(
projects=[PROJECT1, PROJECT2], filter_=FILTER, order_by=DESCENDING,
page_size=PAGE_SIZE, page_token=TOKEN)
self.assertEqual(len(entries), 2)
entry = entries[0]
self.assertTrue(isinstance(entry, StructEntry))
self.assertEqual(entry.insert_id, IID1)
self.assertEqual(entry.payload, PAYLOAD)
logger = entry.logger
self.assertTrue(isinstance(logger, Logger))
self.assertEqual(logger.name, self.LOGGER_NAME)
self.assertTrue(logger.client is client)
self.assertEqual(logger.project, self.PROJECT)
entry = entries[1]
self.assertTrue(isinstance(entry, ProtobufEntry))
self.assertEqual(entry.insert_id, IID2)
self.assertEqual(entry.payload, PROTO_PAYLOAD)
logger = entry.logger
self.assertEqual(logger.name, self.LOGGER_NAME)
self.assertTrue(logger.client is client)
self.assertEqual(logger.project, self.PROJECT)
self.assertTrue(entries[0].logger is entries[1].logger)
self.assertEqual(token, None)
self.assertEqual(
api._list_entries_called_with,
([PROJECT1, PROJECT2], FILTER, DESCENDING, PAGE_SIZE, TOKEN))
def test_sink_defaults(self):
from gcloud.logging.sink import Sink
creds = _Credentials()
client = self._makeOne(project=self.PROJECT, credentials=creds)
sink = client.sink(self.SINK_NAME)
self.assertTrue(isinstance(sink, Sink))
self.assertEqual(sink.name, self.SINK_NAME)
self.assertEqual(sink.filter_, None)
self.assertEqual(sink.destination, None)
self.assertTrue(sink.client is client)
self.assertEqual(sink.project, self.PROJECT)
def test_sink_explicit(self):
from gcloud.logging.sink import Sink
creds = _Credentials()
client = self._makeOne(project=self.PROJECT, credentials=creds)
sink = client.sink(self.SINK_NAME, self.FILTER, self.DESTINATION_URI)
self.assertTrue(isinstance(sink, Sink))
self.assertEqual(sink.name, self.SINK_NAME)
self.assertEqual(sink.filter_, self.FILTER)
self.assertEqual(sink.destination, self.DESTINATION_URI)
self.assertTrue(sink.client is client)
self.assertEqual(sink.project, self.PROJECT)
def test_list_sinks_no_paging(self):
from gcloud.logging.sink import Sink
PROJECT = 'PROJECT'
TOKEN = 'TOKEN'
SINK_NAME = 'sink_name'
FILTER = 'logName:syslog AND severity>=ERROR'
SINKS = [{
'name': SINK_NAME,
'filter': FILTER,
'destination': self.DESTINATION_URI,
}]
client = self._makeOne(project=PROJECT, credentials=_Credentials())
api = client._sinks_api = _DummySinksAPI()
api._list_sinks_response = SINKS, TOKEN
sinks, token = client.list_sinks()
self.assertEqual(len(sinks), 1)
sink = sinks[0]
self.assertTrue(isinstance(sink, Sink))
self.assertEqual(sink.name, SINK_NAME)
self.assertEqual(sink.filter_, FILTER)
self.assertEqual(sink.destination, self.DESTINATION_URI)
self.assertEqual(token, TOKEN)
self.assertEqual(api._list_sinks_called_with,
(PROJECT, None, None))
def test_list_sinks_with_paging(self):
from gcloud.logging.sink import Sink
PROJECT = 'PROJECT'
SINK_NAME = 'sink_name'
FILTER = 'logName:syslog AND severity>=ERROR'
TOKEN = 'TOKEN'
PAGE_SIZE = 42
SINKS = [{
'name': SINK_NAME,
'filter': FILTER,
'destination': self.DESTINATION_URI,
}]
client = self._makeOne(project=PROJECT, credentials=_Credentials())
api = client._sinks_api = _DummySinksAPI()
api._list_sinks_response = SINKS, None
sinks, token = client.list_sinks(PAGE_SIZE, TOKEN)
self.assertEqual(len(sinks), 1)
sink = sinks[0]
self.assertTrue(isinstance(sink, Sink))
self.assertEqual(sink.name, SINK_NAME)
self.assertEqual(sink.filter_, FILTER)
self.assertEqual(sink.destination, self.DESTINATION_URI)
self.assertEqual(token, None)
self.assertEqual(api._list_sinks_called_with,
(PROJECT, PAGE_SIZE, TOKEN))
def test_metric_defaults(self):
from gcloud.logging.metric import Metric
creds = _Credentials()
client_obj = self._makeOne(project=self.PROJECT, credentials=creds)
metric = client_obj.metric(self.METRIC_NAME)
self.assertTrue(isinstance(metric, Metric))
self.assertEqual(metric.name, self.METRIC_NAME)
self.assertEqual(metric.filter_, None)
self.assertEqual(metric.description, '')
self.assertTrue(metric.client is client_obj)
self.assertEqual(metric.project, self.PROJECT)
def test_metric_explicit(self):
from gcloud.logging.metric import Metric
creds = _Credentials()
client_obj = self._makeOne(project=self.PROJECT, credentials=creds)
metric = client_obj.metric(self.METRIC_NAME, self.FILTER,
description=self.DESCRIPTION)
self.assertTrue(isinstance(metric, Metric))
self.assertEqual(metric.name, self.METRIC_NAME)
self.assertEqual(metric.filter_, self.FILTER)
self.assertEqual(metric.description, self.DESCRIPTION)
self.assertTrue(metric.client is client_obj)
self.assertEqual(metric.project, self.PROJECT)
def test_list_metrics_no_paging(self):
from gcloud.logging.metric import Metric
PROJECT = 'PROJECT'
TOKEN = 'TOKEN'
METRICS = [{
'name': self.METRIC_NAME,
'filter': self.FILTER,
'description': self.DESCRIPTION,
}]
client = self._makeOne(project=PROJECT, credentials=_Credentials())
api = client._metrics_api = _DummyMetricsAPI()
api._list_metrics_response = METRICS, TOKEN
metrics, token = client.list_metrics()
self.assertEqual(len(metrics), 1)
metric = metrics[0]
self.assertTrue(isinstance(metric, Metric))
self.assertEqual(metric.name, self.METRIC_NAME)
self.assertEqual(metric.filter_, self.FILTER)
self.assertEqual(metric.description, self.DESCRIPTION)
self.assertEqual(token, TOKEN)
self.assertEqual(api._list_metrics_called_with,
(PROJECT, None, None))
def test_list_metrics_with_paging(self):
from gcloud.logging.metric import Metric
PROJECT = 'PROJECT'
TOKEN = 'TOKEN'
PAGE_SIZE = 42
METRICS = [{
'name': self.METRIC_NAME,
'filter': self.FILTER,
'description': self.DESCRIPTION,
}]
client = self._makeOne(project=PROJECT, credentials=_Credentials())
api = client._metrics_api = _DummyMetricsAPI()
api._list_metrics_response = METRICS, None
# Execute request.
metrics, token = client.list_metrics(PAGE_SIZE, TOKEN)
# Test values are correct.
self.assertEqual(len(metrics), 1)
metric = metrics[0]
self.assertTrue(isinstance(metric, Metric))
self.assertEqual(metric.name, self.METRIC_NAME)
self.assertEqual(metric.filter_, self.FILTER)
self.assertEqual(metric.description, self.DESCRIPTION)
self.assertEqual(token, None)
self.assertEqual(api._list_metrics_called_with,
(PROJECT, PAGE_SIZE, TOKEN))
class _Credentials(object):
_scopes = None
@staticmethod
def create_scoped_required():
return True
def create_scoped(self, scope):
self._scopes = scope
return self
class _DummyLoggingAPI(object):
def list_entries(self, projects, filter_, order_by, page_size, page_token):
self._list_entries_called_with = (
projects, filter_, order_by, page_size, page_token)
return self._list_entries_response
class _DummySinksAPI(object):
def list_sinks(self, project, page_size, page_token):
self._list_sinks_called_with = (project, page_size, page_token)
return self._list_sinks_response
class _DummyMetricsAPI(object):
def list_metrics(self, project, page_size, page_token):
self._list_metrics_called_with = (project, page_size, page_token)
return self._list_metrics_response