diff options
author | Alexey Yelistratov <ayelistratov@mirantis.com> | 2016-08-08 19:06:34 +0300 |
---|---|---|
committer | Dina Belova <dbelova@mirantis.com> | 2016-08-08 19:55:21 +0000 |
commit | 8027a1d3b7e7b0d3cb7fbccecc20a173cc5b9ddb (patch) | |
tree | 91b29a4d4646d3df08b71f1030f9b844ee5c46c8 | |
parent | b57ebf9a2a24849abd70b856be758ac37fd92f64 (diff) | |
download | osprofiler-1.4.0.tar.gz |
Add tests for mongodb driver1.4.0
Change-Id: I2c97c0e823928c643fa1192d84cd4dc303652a36
-rw-r--r-- | osprofiler/tests/drivers/test_mongodb.py | 314 | ||||
-rw-r--r-- | test-requirements.txt | 1 |
2 files changed, 315 insertions, 0 deletions
diff --git a/osprofiler/tests/drivers/test_mongodb.py b/osprofiler/tests/drivers/test_mongodb.py new file mode 100644 index 0000000..2168b7f --- /dev/null +++ b/osprofiler/tests/drivers/test_mongodb.py @@ -0,0 +1,314 @@ +# Copyright 2016 Mirantis 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 mock + +from osprofiler.drivers.mongodb import MongoDB +from osprofiler.tests import test + + +class MongoDBParserTestCase(test.TestCase): + def setUp(self): + super(MongoDBParserTestCase, self).setUp() + self.mongodb = MongoDB("mongodb://localhost") + + def test_build_empty_tree(self): + self.assertEqual([], self.mongodb._build_tree({})) + + def test_build_complex_tree(self): + test_input = { + "2": {"parent_id": "0", "trace_id": "2", "info": {"started": 1}}, + "1": {"parent_id": "0", "trace_id": "1", "info": {"started": 0}}, + "21": {"parent_id": "2", "trace_id": "21", "info": {"started": 6}}, + "22": {"parent_id": "2", "trace_id": "22", "info": {"started": 7}}, + "11": {"parent_id": "1", "trace_id": "11", "info": {"started": 1}}, + "113": {"parent_id": "11", "trace_id": "113", + "info": {"started": 3}}, + "112": {"parent_id": "11", "trace_id": "112", + "info": {"started": 2}}, + "114": {"parent_id": "11", "trace_id": "114", + "info": {"started": 5}} + } + + expected_output = [ + { + "parent_id": "0", + "trace_id": "1", + "info": {"started": 0}, + "children": [ + { + "parent_id": "1", + "trace_id": "11", + "info": {"started": 1}, + "children": [ + {"parent_id": "11", "trace_id": "112", + "info": {"started": 2}, "children": []}, + {"parent_id": "11", "trace_id": "113", + "info": {"started": 3}, "children": []}, + {"parent_id": "11", "trace_id": "114", + "info": {"started": 5}, "children": []} + ] + } + ] + }, + { + "parent_id": "0", + "trace_id": "2", + "info": {"started": 1}, + "children": [ + {"parent_id": "2", "trace_id": "21", + "info": {"started": 6}, "children": []}, + {"parent_id": "2", "trace_id": "22", + "info": {"started": 7}, "children": []} + ] + } + ] + + result = self.mongodb._build_tree(test_input) + self.assertEqual(expected_output, result) + + def test_get_report_empty(self): + self.mongodb.db = mock.MagicMock() + self.mongodb.db.profiler.find.return_value = [] + + expected = { + "info": { + "name": "total", + "started": 0, + "finished": None + }, + "children": [], + "stats": {}, + } + + base_id = "10" + self.assertEqual(expected, self.mongodb.get_report(base_id)) + + def test_get_report(self): + self.mongodb.db = mock.MagicMock() + results = [ + { + "info": { + "project": None, + "host": "ubuntu", + "request": { + "path": "/v2/a322b5049d224a90bf8786c644409400/volumes", + "scheme": "http", + "method": "POST", + "query": "" + }, + "service": None + }, + "name": "wsgi-start", + "service": "main", + "timestamp": "2015-12-23T14:02:22.338776", + "trace_id": "06320327-2c2c-45ae-923a-515de890276a", + "project": "keystone", + "parent_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "base_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4" + }, + + { + "info": { + "project": None, + "host": "ubuntu", + "service": None + }, + "name": "wsgi-stop", + "service": "main", + "timestamp": "2015-12-23T14:02:22.380405", + "trace_id": "839ca3f1-afcb-45be-a4a1-679124c552bf", + "project": "keystone", + "parent_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "base_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4" + }, + + { + "info": { + "project": None, + "host": "ubuntu", + "db": { + "params": { + + }, + "statement": "SELECT 1" + }, + "service": None + }, + "name": "db-start", + "service": "main", + "timestamp": "2015-12-23T14:02:22.395365", + "trace_id": "1baf1d24-9ca9-4f4c-bd3f-01b7e0c0735a", + "project": "keystone", + "parent_id": "06320327-2c2c-45ae-923a-515de890276a", + "base_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4" + }, + + { + "info": { + "project": None, + "host": "ubuntu", + "service": None + }, + "name": "db-stop", + "service": "main", + "timestamp": "2015-12-23T14:02:22.415486", + "trace_id": "1baf1d24-9ca9-4f4c-bd3f-01b7e0c0735a", + "project": "keystone", + "parent_id": "06320327-2c2c-45ae-923a-515de890276a", + "base_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4" + }, + + { + "info": { + "project": None, + "host": "ubuntu", + "request": { + "path": "/v2/a322b5049d224a90bf8786c644409400/volumes", + "scheme": "http", + "method": "GET", + "query": "" + }, + "service": None + }, + "name": "wsgi-start", + "service": "main", + "timestamp": "2015-12-23T14:02:22.427444", + "trace_id": "016c97fd-87f3-40b2-9b55-e431156b694b", + "project": "keystone", + "parent_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "base_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4" + }] + + expected = {"children": [{"children": [{ + "children": [], + "info": {"finished": 76, + "host": "ubuntu", + "meta.raw_payload.db-start": { + "base_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "info": {"db": {"params": {}, + "statement": "SELECT 1"}, + "host": "ubuntu", + "project": None, + "service": None}, + "name": "db-start", + "parent_id": "06320327-2c2c-45ae-923a-515de890276a", + "project": "keystone", + "service": "main", + "timestamp": "2015-12-23T14:02:22.395365", + "trace_id": "1baf1d24-9ca9-4f4c-bd3f-01b7e0c0735a"}, + "meta.raw_payload.db-stop": { + "base_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "info": {"host": "ubuntu", + "project": None, + "service": None}, + "name": "db-stop", + "parent_id": "06320327-2c2c-45ae-923a-515de890276a", + "project": "keystone", + "service": "main", + "timestamp": "2015-12-23T14:02:22.415486", + "trace_id": "1baf1d24-9ca9-4f4c-bd3f-01b7e0c0735a"}, + "name": "db", + "project": "keystone", + "service": "main", + "started": 56}, + "parent_id": "06320327-2c2c-45ae-923a-515de890276a", + "trace_id": "1baf1d24-9ca9-4f4c-bd3f-01b7e0c0735a"}], + + "info": {"finished": 0, + "host": "ubuntu", + "meta.raw_payload.wsgi-start": { + "base_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "info": {"host": "ubuntu", + "project": None, + "request": {"method": "POST", + "path": "/v2/a322b5049d224a90bf8" + "786c644409400/volumes", + "query": "", + "scheme": "http"}, + "service": None}, + "name": "wsgi-start", + "parent_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "project": "keystone", + "service": "main", + "timestamp": "2015-12-23T14:02:22.338776", + "trace_id": "06320327-2c2c-45ae-923a-515de890276a"}, + "name": "wsgi", + "project": "keystone", + "service": "main", + "started": 0}, + "parent_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "trace_id": "06320327-2c2c-45ae-923a-515de890276a"}, + + {"children": [], + "info": {"finished": 41, + "host": "ubuntu", + "meta.raw_payload.wsgi-stop": { + "base_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "info": {"host": "ubuntu", + "project": None, + "service": None}, + "name": "wsgi-stop", + "parent_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "project": "keystone", + "service": "main", + "timestamp": "2015-12-23T14:02:22.380405", + "trace_id": "839ca3f1-afcb-45be-a4a1-679124c552bf"}, + "name": "wsgi", + "project": "keystone", + "service": "main", + "started": 41}, + "parent_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "trace_id": "839ca3f1-afcb-45be-a4a1-679124c552bf"}, + + {"children": [], + "info": {"finished": 88, + "host": "ubuntu", + "meta.raw_payload.wsgi-start": { + "base_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "info": {"host": "ubuntu", + "project": None, + "request": {"method": "GET", + "path": "/v2/a322b5049d224a90bf" + "8786c644409400/volumes", + "query": "", + "scheme": "http"}, + "service": None}, + "name": "wsgi-start", + "parent_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "project": "keystone", + "service": "main", + "timestamp": "2015-12-23T14:02:22.427444", + "trace_id": "016c97fd-87f3-40b2-9b55-e431156b694b"}, + "name": "wsgi", + "project": "keystone", + "service": "main", + "started": 88}, + "parent_id": "7253ca8c-33b3-4f84-b4f1-f5a4311ddfa4", + "trace_id": "016c97fd-87f3-40b2-9b55-e431156b694b"}], + "info": {"finished": 88, "name": "total", "started": 0}, + "stats": {"db": {"count": 1, "duration": 20}, + "wsgi": {"count": 3, "duration": 0}}} + + self.mongodb.db.profiler.find.return_value = results + + base_id = "10" + + result = self.mongodb.get_report(base_id) + + expected_filter = [{"base_id": base_id}, {"_id": 0}] + self.mongodb.db.profiler.find.assert_called_once_with( + *expected_filter) + self.assertEqual(expected, result) diff --git a/test-requirements.txt b/test-requirements.txt index 2dff41b..aa8aa1e 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -13,3 +13,4 @@ sphinx>=1.1.2,!=1.2.0,!=1.3b1,<1.3 bandit>=0.17.3 # Apache-2.0 python-ceilometerclient>=2.2.1 # Apache-2.0 +pymongo>=3.0.2,!=3.1 # Apache-2.0 |