From 511ffd9c2982233a1f3c6c192506f9cfdc9583a9 Mon Sep 17 00:00:00 2001 From: David Shrewsbury Date: Wed, 10 Oct 2018 14:33:31 -0400 Subject: [PATCH] Add tox functional testing for drivers Reorganizes the unit tests into a new subdirectory, and adds a new functional test subdirectory (that will be further divided into subdirs for drivers). Change-Id: I027bba619deef9379d293fdd0457df6a1377aea8 --- .../fixtures/functional/kubernetes/basic.yaml | 23 +++++++++++ nodepool/tests/functional/__init__.py | 0 .../tests/functional/kubernetes/__init__.py | 0 .../functional/kubernetes/test_kubernetes.py | 40 +++++++++++++++++++ nodepool/tests/unit/__init__.py | 0 nodepool/tests/{ => unit}/test_builder.py | 0 nodepool/tests/{ => unit}/test_commands.py | 0 .../{ => unit}/test_config_comparisons.py | 0 .../tests/{ => unit}/test_config_validator.py | 0 .../{ => unit}/test_driver_kubernetes.py | 0 .../tests/{ => unit}/test_driver_static.py | 0 nodepool/tests/{ => unit}/test_drivers.py | 3 +- nodepool/tests/{ => unit}/test_launcher.py | 0 .../tests/{ => unit}/test_sdk_integration.py | 0 nodepool/tests/{ => unit}/test_webapp.py | 0 nodepool/tests/{ => unit}/test_zk.py | 0 playbooks/nodepool-functional-k8s/pre.yaml | 1 - playbooks/nodepool-functional-k8s/run.yaml | 4 +- tox.ini | 9 ++++- 19 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 nodepool/tests/fixtures/functional/kubernetes/basic.yaml create mode 100644 nodepool/tests/functional/__init__.py create mode 100644 nodepool/tests/functional/kubernetes/__init__.py create mode 100644 nodepool/tests/functional/kubernetes/test_kubernetes.py create mode 100644 nodepool/tests/unit/__init__.py rename nodepool/tests/{ => unit}/test_builder.py (100%) rename nodepool/tests/{ => unit}/test_commands.py (100%) rename nodepool/tests/{ => unit}/test_config_comparisons.py (100%) rename nodepool/tests/{ => unit}/test_config_validator.py (100%) rename nodepool/tests/{ => unit}/test_driver_kubernetes.py (100%) rename nodepool/tests/{ => unit}/test_driver_static.py (100%) rename nodepool/tests/{ => unit}/test_drivers.py (92%) rename nodepool/tests/{ => unit}/test_launcher.py (100%) rename nodepool/tests/{ => unit}/test_sdk_integration.py (100%) rename nodepool/tests/{ => unit}/test_webapp.py (100%) rename nodepool/tests/{ => unit}/test_zk.py (100%) diff --git a/nodepool/tests/fixtures/functional/kubernetes/basic.yaml b/nodepool/tests/fixtures/functional/kubernetes/basic.yaml new file mode 100644 index 000000000..d830c177d --- /dev/null +++ b/nodepool/tests/fixtures/functional/kubernetes/basic.yaml @@ -0,0 +1,23 @@ +zookeeper-servers: + - host: {zookeeper_host} + port: {zookeeper_port} + chroot: {zookeeper_chroot} + +labels: + - name: kubernetes-namespace + min-ready: 1 + - name: pod-fedora + min-ready: 1 + +providers: + - name: minikube + driver: kubernetes + context: minikube + pools: + - name: main + labels: + - name: kubernetes-namespace + type: namespace + - name: pod-fedora + type: pod + image: docker.io/fedora:28 diff --git a/nodepool/tests/functional/__init__.py b/nodepool/tests/functional/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/nodepool/tests/functional/kubernetes/__init__.py b/nodepool/tests/functional/kubernetes/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/nodepool/tests/functional/kubernetes/test_kubernetes.py b/nodepool/tests/functional/kubernetes/test_kubernetes.py new file mode 100644 index 000000000..c7a057d7c --- /dev/null +++ b/nodepool/tests/functional/kubernetes/test_kubernetes.py @@ -0,0 +1,40 @@ +# Copyright (C) 2018 Red Hat +# +# 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 logging + +from nodepool import tests + + +class TestKubernetes(tests.DBTestCase): + log = logging.getLogger("nodepool.TestKubernetes") + + def setup_config(self, filename): + adjusted_filename = "functional/kubernetes/" + filename + return super().setup_config(adjusted_filename) + + def test_basic(self): + configfile = self.setup_config('basic.yaml') + pool = self.useNodepool(configfile, watermark_sleep=1) + pool.start() + + # Add something here to test for namespace/pods/whatever + namespace = self.waitForNodes("kubernetes-namespace", 1) + self.assertEqual(1, len(namespace)) + self.assertEqual(namespace[0].connection_type, "namespace") + + pod = self.waitForNodes("pod-fedora", 1) + self.assertEqual(1, len(pod)) + self.assertEqual(pod[0].connection_type, "kubectl") diff --git a/nodepool/tests/unit/__init__.py b/nodepool/tests/unit/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/nodepool/tests/test_builder.py b/nodepool/tests/unit/test_builder.py similarity index 100% rename from nodepool/tests/test_builder.py rename to nodepool/tests/unit/test_builder.py diff --git a/nodepool/tests/test_commands.py b/nodepool/tests/unit/test_commands.py similarity index 100% rename from nodepool/tests/test_commands.py rename to nodepool/tests/unit/test_commands.py diff --git a/nodepool/tests/test_config_comparisons.py b/nodepool/tests/unit/test_config_comparisons.py similarity index 100% rename from nodepool/tests/test_config_comparisons.py rename to nodepool/tests/unit/test_config_comparisons.py diff --git a/nodepool/tests/test_config_validator.py b/nodepool/tests/unit/test_config_validator.py similarity index 100% rename from nodepool/tests/test_config_validator.py rename to nodepool/tests/unit/test_config_validator.py diff --git a/nodepool/tests/test_driver_kubernetes.py b/nodepool/tests/unit/test_driver_kubernetes.py similarity index 100% rename from nodepool/tests/test_driver_kubernetes.py rename to nodepool/tests/unit/test_driver_kubernetes.py diff --git a/nodepool/tests/test_driver_static.py b/nodepool/tests/unit/test_driver_static.py similarity index 100% rename from nodepool/tests/test_driver_static.py rename to nodepool/tests/unit/test_driver_static.py diff --git a/nodepool/tests/test_drivers.py b/nodepool/tests/unit/test_drivers.py similarity index 92% rename from nodepool/tests/test_drivers.py rename to nodepool/tests/unit/test_drivers.py index 5f575c578..32e5e8330 100644 --- a/nodepool/tests/test_drivers.py +++ b/nodepool/tests/unit/test_drivers.py @@ -21,7 +21,8 @@ from nodepool.driver import Drivers class TestDrivers(tests.DBTestCase): def setup_config(self, filename): test_dir = os.path.dirname(__file__) - drivers_dir = os.path.join(os.path.dirname(test_dir), 'driver') + drivers_dir = os.path.join( + os.path.dirname(os.path.dirname(test_dir)), 'driver') Drivers.load([drivers_dir]) return super().setup_config(filename) diff --git a/nodepool/tests/test_launcher.py b/nodepool/tests/unit/test_launcher.py similarity index 100% rename from nodepool/tests/test_launcher.py rename to nodepool/tests/unit/test_launcher.py diff --git a/nodepool/tests/test_sdk_integration.py b/nodepool/tests/unit/test_sdk_integration.py similarity index 100% rename from nodepool/tests/test_sdk_integration.py rename to nodepool/tests/unit/test_sdk_integration.py diff --git a/nodepool/tests/test_webapp.py b/nodepool/tests/unit/test_webapp.py similarity index 100% rename from nodepool/tests/test_webapp.py rename to nodepool/tests/unit/test_webapp.py diff --git a/nodepool/tests/test_zk.py b/nodepool/tests/unit/test_zk.py similarity index 100% rename from nodepool/tests/test_zk.py rename to nodepool/tests/unit/test_zk.py diff --git a/playbooks/nodepool-functional-k8s/pre.yaml b/playbooks/nodepool-functional-k8s/pre.yaml index b0c99ac2a..5dd518d73 100644 --- a/playbooks/nodepool-functional-k8s/pre.yaml +++ b/playbooks/nodepool-functional-k8s/pre.yaml @@ -1,7 +1,6 @@ - hosts: all roles: - role: bindep - bindep_profile: dev tasks: - name: Ensure nodepool services directories diff --git a/playbooks/nodepool-functional-k8s/run.yaml b/playbooks/nodepool-functional-k8s/run.yaml index 4b8df9111..7b2d8083f 100644 --- a/playbooks/nodepool-functional-k8s/run.yaml +++ b/playbooks/nodepool-functional-k8s/run.yaml @@ -1,5 +1,5 @@ - hosts: all roles: - - install-nodepool - install-kubernetes - - nodepool-k8s-functional + - role: tox + tox_envlist: functional_kubernetes diff --git a/tox.ini b/tox.ini index 1c03cd3e4..69eda8e17 100644 --- a/tox.ini +++ b/tox.ini @@ -16,7 +16,7 @@ install_command = pip install {opts} {packages} deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt passenv = NODEPOOL_ZK_HOST -commands = stestr run --no-subunit-trace {posargs} +commands = stestr --test-path ./nodepool/tests/unit run --no-subunit-trace {posargs} stestr slowest [testenv:pep8] @@ -38,7 +38,7 @@ setenv = {[testenv]setenv} PYTHON=coverage run --source nodepool --parallel-mode commands = - stestr run --no-subunit-trace {posargs} + stestr --test-path ./nodepool/tests/unit run --no-subunit-trace {posargs} coverage combine coverage html -d cover coverage xml -o cover/coverage.xml @@ -54,6 +54,11 @@ commands = basepython = python3 commands = {posargs} +[testenv:functional_kubernetes] +basepython = python3 +commands = stestr --test-path ./nodepool/tests/functional/kubernetes run --no-subunit-trace {posargs} + stestr slowest + [flake8] # These are ignored intentionally in openstack-infra projects; # please don't submit patches that solely correct them or enable them.