From f791897449e4ae6bfc3f9b07d4c413af3983ea01 Mon Sep 17 00:00:00 2001 From: Joao Gilberto Magalhaes Date: Wed, 8 Feb 2023 17:18:03 -0600 Subject: [PATCH] Fix errors in the test --- .vscode/launch.json | 16 +++++++ src/processor/__init__.py | 11 ++++- src/tests/test_docker.py | 90 +++++++++++++++++++++++---------------- 3 files changed, 79 insertions(+), 38 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 9cb10c6..7dc1ae9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,6 +4,22 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ + { + "name": "PyTest Current File", + "type": "python", + "request": "launch", + "module": "pytest", + "justMyCode": true, + "console": "integratedTerminal", + "cwd": "${workspaceFolder}/src", + "args": [ + "-vv", + "${file}" + ], + "env": { + "PYTHONPATH": "${cwd}/src" + } + }, { "name": "Python: Current File", "type": "python", diff --git a/src/processor/__init__.py b/src/processor/__init__.py index 1ad8db7..748ad1e 100644 --- a/src/processor/__init__.py +++ b/src/processor/__init__.py @@ -128,7 +128,14 @@ class Docker(ProcessorInterface): super().__init__() def inspect_network(self): - ha_proxy_network_name = next(iter(self.client.containers.get(socket.gethostname()).attrs["NetworkSettings"]["Networks"])) + try: + ha_proxy_network_name = next(iter(self.client.containers.get(socket.gethostname()).attrs["NetworkSettings"]["Networks"])) + except: + # HAProxy is not running in a container, get first container network + if len(self.client.containers.list()) == 0: + return + ha_proxy_network_name = next(iter(self.client.containers.get(self.client.containers.list()[0].name).attrs["NetworkSettings"]["Networks"])) + ha_proxy_network = self.client.networks.get(ha_proxy_network_name) self.parsed_object = {} @@ -192,6 +199,8 @@ class Kubernetes(ProcessorInterface): self.parsed_object = {} for ingress in ret.items: + if 'kubernetes.io/ingress.class' not in ingress.metadata.annotations: + continue if ingress.metadata.annotations['kubernetes.io/ingress.class'] != "easyhaproxy-ingress": continue diff --git a/src/tests/test_docker.py b/src/tests/test_docker.py index d65a08b..da0c60d 100644 --- a/src/tests/test_docker.py +++ b/src/tests/test_docker.py @@ -6,15 +6,24 @@ from functions import Functions from processor import ProcessorInterface from processor import Docker -def _get_hydrated_object(parsed_objects, key): - assert key in parsed_objects.keys() + +def _get_hydrated_object(parsed_objects, lookup_key): hydrated_object = {} - for keys in parsed_objects[key]: - if "easyhaproxy" in keys: - hydrated_object[keys] = parsed_objects[key][keys] + for key in parsed_objects: + for keys in parsed_objects[key]: + if lookup_key in keys: + hydrated_object[keys] = parsed_objects[key][keys] return hydrated_object +def _get_ip_host(parsed_objects, lookup_key): + hydrated_object = {} + for key in parsed_objects: + for keys in parsed_objects[key]: + if lookup_key in keys: + return key + + def test_processor_docker(): try: client = docker.from_env() @@ -24,32 +33,32 @@ def test_processor_docker(): if len(client.containers.list()) > 0: pytest.skip("I cannot run this test with other containers running.") - container = client.containers.run("byjg/static-httpserver", - name="test_processor_docker", - detach=True, - auto_remove=True, - remove=True, - labels={ - "easyhaproxy.http.port": "80", - "easyhaproxy.http.localport": "8080", - "easyhaproxy.http.host": "host1.local", + container = client.containers.run("byjg/static-httpserver", + name="test_processor_docker", + detach=True, + auto_remove=True, + remove=True, + labels={ + "easyhaproxy.http.port": "80", + "easyhaproxy.http.localport": "8080", + "easyhaproxy.http.host": "host1.local", - "easyhaproxy.http2.port": "90", - "easyhaproxy.http2.localport": "9000", - "easyhaproxy.http2.host": "host2.local", - "easyhaproxy.http2.letsencrypt": "true", - }) - container2 = client.containers.run("byjg/static-httpserver", - name="test2_processor_docker", - detach=True, - auto_remove=True, - remove=True, - labels={ - "easyhaproxy.ssl.port": "443", - "easyhaproxy.ssl.localport": "8080", - "easyhaproxy.ssl.host": "hostssl.local", - "easyhaproxy.ssl.sslcert": "U29tZSBQRU0gQ2VydGlmaWNhdGU=" - }) + "easyhaproxy.http2.port": "90", + "easyhaproxy.http2.localport": "9000", + "easyhaproxy.http2.host": "host2.local", + "easyhaproxy.http2.letsencrypt": "true", + }) + container2 = client.containers.run("byjg/static-httpserver", + name="test2_processor_docker", + detach=True, + auto_remove=True, + remove=True, + labels={ + "easyhaproxy.ssl.port": "443", + "easyhaproxy.ssl.localport": "8080", + "easyhaproxy.ssl.host": "hostssl.local", + "easyhaproxy.ssl.sslcert": "U29tZSBQRU0gQ2VydGlmaWNhdGU=" + }) try: time.sleep(1) @@ -57,7 +66,7 @@ def test_processor_docker(): static = ProcessorInterface.factory("docker") assert static.get_letsencrypt_hosts() is None - + assert { 'easyhaproxy.http.host': 'host1.local', 'easyhaproxy.http.localport': '8080', @@ -66,27 +75,34 @@ def test_processor_docker(): 'easyhaproxy.http2.localport': '9000', 'easyhaproxy.http2.port': '90', 'easyhaproxy.http2.letsencrypt': 'true', - } == _get_hydrated_object(static.get_parsed_object(), "test_processor_docker") + } == _get_hydrated_object(static.get_parsed_object(), "easyhaproxy.http") assert { 'easyhaproxy.ssl.host': 'hostssl.local', 'easyhaproxy.ssl.localport': '8080', 'easyhaproxy.ssl.port': '443', 'easyhaproxy.ssl.sslcert': 'U29tZSBQRU0gQ2VydGlmaWNhdGU=' - } == _get_hydrated_object(static.get_parsed_object(), "test2_processor_docker") + } == _get_hydrated_object(static.get_parsed_object(), "easyhaproxy.ssl.") assert static.get_hosts() is None assert static.get_certs() == {} haproxy_cfg = static.get_haproxy_conf() - assert haproxy_cfg == Functions.load(os.path.join(os.path.dirname(os.path.realpath(__file__)), "./expected/docker.txt")) + assert haproxy_cfg == Functions.load(os.path.join(os.path.dirname(os.path.realpath(__file__)), "./expected/docker.txt")).replace("test_processor_docker", _get_ip_host( + static.get_parsed_object(), "easyhaproxy.http")).replace("test2_processor_docker", _get_ip_host(static.get_parsed_object(), "easyhaproxy.ssl")) assert static.get_letsencrypt_hosts() == ['host2.local'] - assert static.get_hosts() == ['hostssl.local:443', 'host1.local:80', 'host2.local:90'] - assert static.get_certs() == {'hostssl.local.pem': 'Some PEM Certificate'} + assert static.get_hosts() == [ + 'hostssl.local:443', + 'host1.local:80', + 'host2.local:90' + ] + assert static.get_certs() == { + 'hostssl.local.pem': 'Some PEM Certificate' + } finally: os.environ['EASYHAPROXY_LETSENCRYPT_EMAIL'] = '' container.stop() container2.stop() -#test_processor_docker() \ No newline at end of file +# test_processor_docker()