adding more unit tests for configuration module 43/49943/2
authorsgdt6900 <rhanafy.ext@orange.com>
Wed, 3 Jan 2018 14:54:18 +0000 (16:54 +0200)
committersgdt6900 <rhanafy.ext@orange.com>
Wed, 3 Jan 2018 15:09:50 +0000 (17:09 +0200)
undo deleted exception by mistake

Change-Id: I6c0246a938035f5542634e33311ad4b02973f67b
Signed-off-by: sgdt6900 <rhanafy.ext@orange.com>
python_moonutilities/python_moonutilities/configuration.py
python_moonutilities/python_moonutilities/exceptions.py
python_moonutilities/tests/unit_python/mock_repo/components_utilities.py
python_moonutilities/tests/unit_python/mock_repo/urls.py
python_moonutilities/tests/unit_python/test_configuration.py

index 9a044db..c31432c 100644 (file)
@@ -52,10 +52,13 @@ def get_configuration(key):
             return {data["Key"]: json.loads(base64.b64decode(data["Value"]).decode("utf-8"))}
         raise exceptions.ConsulComponentContentError("error={}".format(data))
     else:
+        for item in data:
+            if not all(k in item for k in ("Key", "Value")):
+                logger.warning("invalidate content {}".format(item))
+                raise exceptions.ConsulComponentContentError("error={}".format(data))
         return [
             {
                 item["Key"]: json.loads(base64.b64decode(item["Value"]).decode("utf-8"))
-                if all(k in item for k in ("Key", "Value")) else logger.warning("invalidate content {}".format(item))
             } for item in data
         ]
 
@@ -93,9 +96,12 @@ def get_plugins():
             return {data["Key"].replace("plugins/", ""): json.loads(base64.b64decode(data["Value"]).decode("utf-8"))}
         raise exceptions.ConsulComponentContentError("error={}".format(data))
     else:
+        for item in data:
+            if not all(k in item for k in ("Key", "Value")):
+                logger.warning("invalidate content {}".format(item))
+                raise exceptions.ConsulComponentContentError("error={}".format(data))
         return {
             item["Key"].replace("plugins/", ""): json.loads(base64.b64decode(item["Value"]).decode("utf-8"))
-            if all(k in item for k in ("Key", "Value")) else logger.warning("invalidate content {}".format(item))
             for item in data
         }
 
@@ -112,9 +118,12 @@ def get_components():
             return {data["Key"].replace("components/", ""): json.loads(base64.b64decode(data["Value"]).decode("utf-8"))}
         raise exceptions.ConsulComponentContentError("error={}".format(data))
     else:
+        for item in data:
+            if not all(k in item for k in ("Key", "Value")):
+                logger.warning("invalidate content {}".format(item))
+                raise exceptions.ConsulComponentContentError("error={}".format(data))
         return {
             item["Key"].replace("components/", ""): json.loads(base64.b64decode(item["Value"]).decode("utf-8"))
-            if all(k in item for k in ("Key", "Value")) else logger.warning("invalidate content {}".format(item))
             for item in data
         }
 
index e6c9f6d..d85cef4 100644 (file)
@@ -507,7 +507,7 @@ class ConsulComponentNotFound(ConsulError):
 class ConsulComponentContentError(ConsulError):
     description = _("invalid content of component .")
     code = 500
-    title = 'Consul error'
+    title = 'Consul Content error'
     logger = "WARNING"
 
 # Containers exceptions
index 1d79d89..53c5134 100644 (file)
@@ -134,3 +134,5 @@ def get_b64_conf(component=None):
         return base64.b64encode(
             json.dumps(
                 CONF[key1][key2]).encode('utf-8')+b"\n").decode('utf-8')
+    else:
+        return base64.b64encode(component.encode('utf-8')+b"\n").decode('utf-8')
index 75b5592..ff7976d 100644 (file)
@@ -12,6 +12,19 @@ def register_components(m):
         'GET', 'http://consul:8500/v1/kv/components/port_start',
         json=[{'Key': 'port_start', 'Value': comp_util.get_b64_conf("components/port_start")}]
     )
+    m.register_uri(
+        'GET', 'http://consul:8500/v1/kv/plugins?recurse=true',
+        json=[
+            {
+                "LockIndex": 0,
+                "Key": "plugins/authz",
+                "Flags": 0,
+                "Value": "eyJjb250YWluZXIiOiAid3Vrb25nc3VuL21vb25fYXV0aHo6djQuMyIsICJwb3J0IjogODA4MX0=",
+                "CreateIndex": 14,
+                "ModifyIndex": 656
+            }
+        ],
+    )
     m.register_uri(
         'PUT', 'http://consul:8500/v1/kv/components/port_start',
         json=[]
index 8ca389b..87ebb53 100644 (file)
@@ -7,6 +7,32 @@ def test_get_configuration_success():
     from python_moonutilities import configuration
     assert configuration.get_configuration("components/port_start")["port_start"] == comp_util.CONF["components"]["port_start"]
 
+@requests_mock.Mocker(kw='mock')
+def test_get_configuration_mutliple_list_success(**kwargs):
+    from python_moonutilities import configuration
+
+    kwargs['mock'].get('http://consul:8500/v1/kv/components/port_start',
+                       json=[
+                           {'Key': 'port_start', 'Value': comp_util.get_b64_conf("components/port_start")},
+                           {'Key': 'port_start', 'Value': comp_util.get_b64_conf("components/port_start")}
+                             ]
+                       )
+
+    assert len(configuration.get_configuration("components/port_start")) == 2
+
+@requests_mock.Mocker(kw='mock')
+def test_get_configuration_mutliple_list_failure(**kwargs):
+    from python_moonutilities import configuration
+
+    kwargs['mock'].get('http://consul:8500/v1/kv/components/port_start',
+                       json=[
+                           {'Key': 'port_start', 'Value': comp_util.get_b64_conf("components/port_start")},
+                           {'invalidKey': 'port_start', 'Value': comp_util.get_b64_conf("components/port_start")}
+                             ]
+                       )
+    with pytest.raises(Exception) as exception_info:
+        configuration.get_configuration("components/port_start")
+    assert str(exception_info.value) == '500: Consul Content error'
 
 @requests_mock.Mocker(kw='mock')
 def test_get_configuration_not_found(**kwargs):
@@ -27,8 +53,19 @@ def test_get_configuration_invalid_response(**kwargs):
     ])
     with pytest.raises(Exception) as exception_info:
         configuration.get_configuration("components/port_start")
-    assert str(exception_info.value) == '500: Consul error'
+    assert str(exception_info.value) == '500: Consul Content error'
 
+################################ increment_port ####################################
+@requests_mock.Mocker(kw='mock')
+def test_put_increment_port_invalidkey_failure(**kwargs):
+    from python_moonutilities import configuration
+
+    kwargs['mock'].get('http://consul:8500/v1/kv/components/port_start', json=[
+        {'Key': 'invalidkey', 'Value': comp_util.get_b64_conf("components/port_start")}
+    ], status_code=200)
+    with pytest.raises(Exception) as exception_info:
+        configuration.increment_port()
+    assert str(exception_info.value) == '500: Consul Content error'
 
 @requests_mock.Mocker(kw='mock')
 def test_put_increment_port_failure(**kwargs):
@@ -48,7 +85,111 @@ def test_increment_port_success():
     incremented_port = configuration.increment_port()
     assert incremented_port  == cur_port + 1
 
+################################ plugin ####################################
+def test_get_plugins_success():
+    from python_moonutilities import configuration
+    plugin = configuration.get_plugins()
+    assert plugin is not None
+
+@requests_mock.Mocker(kw='mock')
+def test_get_plugins_mutliple_list_success(**kwargs):
+    from python_moonutilities import configuration
+
+    kwargs['mock'].get('http://consul:8500/v1/kv/plugins?recurse=true',
+                       json=[
+                           {'Key': 'plugins/authz', 'Value': 'eyJjb250YWluZXIiOiAid3Vrb25nc3VuL21vb25fYXV0aHo6djQuMyIsICJwb3J0IjogODA4MX0='},
+                           {'Key': 'plugins/authz', 'Value': 'eyJjb250YWluZXIiOiAid3Vrb25nc3VuL21vb25fYXV0aHo6djQuMyIsICJwb3J0IjogODA4MX0='}
+                             ]
+                       )
+
+    res = configuration.get_plugins()
+    assert bool(res)
+
+@requests_mock.Mocker(kw='mock')
+def test_get_plugins_mutliple_list_failure(**kwargs):
+    from python_moonutilities import configuration
+
+    kwargs['mock'].get('http://consul:8500/v1/kv/plugins?recurse=true',
+                       json=[
+                           {'Key': 'plugins/authz', 'Value': "eyJjb250YWluZXIiOiAid3Vrb25"},
+                           {'invalidKey': 'plugins/authz', 'Value': "eyJjb250YWluZXIiOiAid3Vrb25"}
+                             ]
+                       )
+    with pytest.raises(Exception) as exception_info:
+        configuration.get_plugins()
+    assert str(exception_info.value) == '500: Consul Content error'
 
+@requests_mock.Mocker(kw='mock')
+def test_get_plugins_not_found(**kwargs):
+    from python_moonutilities import configuration
+
+    kwargs['mock'].get('http://consul:8500/v1/kv/plugins?recurse=true', json=[
+    ], status_code=500)
+    with pytest.raises(Exception) as exception_info:
+        configuration.get_plugins()
+    assert str(exception_info.value) == '400: Consul error'
+
+@requests_mock.Mocker(kw='mock')
+def test_get_plugins_invalid_response(**kwargs):
+    from python_moonutilities import configuration
+
+    kwargs['mock'].get('http://consul:8500/v1/kv/plugins?recurse=true', json=[
+        {"invalidKey":'invalid', 'Value': "jb250"}
+    ])
+    with pytest.raises(Exception) as exception_info:
+        configuration.get_plugins()
+    assert str(exception_info.value) == '500: Consul Content error'
+
+################################ component ####################################
 def test_get_components():
     from python_moonutilities import configuration
-    assert isinstance(configuration.get_components(), dict)
\ No newline at end of file
+    assert isinstance(configuration.get_components(), dict)
+
+@requests_mock.Mocker(kw='mock')
+def test_get_components_mutliple_list_success(**kwargs):
+    from python_moonutilities import configuration
+
+    kwargs['mock'].get('http://consul:8500/v1/kv/components?recurse=true',
+                       json=[
+                           {'Key': 'components/c1', 'Value': 'eyJjb250YWluZXIiOiAid3Vrb25nc3VuL21vb25fYXV0aHo6djQuMyIsICJwb3J0IjogODA4MX0='},
+                           {'Key': 'components/c2', 'Value': 'eyJjb250YWluZXIiOiAid3Vrb25nc3VuL21vb25fYXV0aHo6djQuMyIsICJwb3J0IjogODA4MX0='}
+                             ]
+                       )
+
+    res = configuration.get_components()
+    assert bool(res)
+
+@requests_mock.Mocker(kw='mock')
+def test_get_components_mutliple_list_failure(**kwargs):
+    from python_moonutilities import configuration
+
+    kwargs['mock'].get('http://consul:8500/v1/kv/components?recurse=true',
+                       json=[
+                           {'Key': 'components/c1', 'Value': "eyJjb250YWluZXIiOiAid3Vrb25"},
+                           {'invalidKey': 'components/c2', 'Value': "eyJjb250YWluZXIiOiAid3Vrb25"}
+                             ]
+                       )
+    with pytest.raises(Exception) as exception_info:
+        configuration.get_components()
+    assert str(exception_info.value) == '500: Consul Content error'
+
+@requests_mock.Mocker(kw='mock')
+def test_get_components_not_found(**kwargs):
+    from python_moonutilities import configuration
+
+    kwargs['mock'].get('http://consul:8500/v1/kv/components?recurse=true', json=[
+    ], status_code=500)
+    with pytest.raises(Exception) as exception_info:
+        configuration.get_components()
+    assert str(exception_info.value) == '400: Consul error'
+
+@requests_mock.Mocker(kw='mock')
+def test_get_components_invalid_response(**kwargs):
+    from python_moonutilities import configuration
+
+    kwargs['mock'].get('http://consul:8500/v1/kv/components?recurse=true', json=[
+        {"invalidKey":'invalid', 'Value': "jb250"}
+    ])
+    with pytest.raises(Exception) as exception_info:
+        configuration.get_components()
+    assert str(exception_info.value) == '500: Consul Content error'