From dfcd983ee3efd0d288f3c6c14dd8b8bf2d11f2d8 Mon Sep 17 00:00:00 2001 From: Ben Nemec Date: Thu, 21 Feb 2019 17:45:19 +0000 Subject: [PATCH] Add functional tests These add some coverage to functionality not covered by the regular unit tests, but I think they can't be run in the gate because they use sudo. Change-Id: Ic62c95b83f68f94328deb00227b7eabf249ce898 --- .stestr.conf | 2 +- oslo_privsep/functional/__init__.py | 8 +++ oslo_privsep/functional/test_daemon.py | 74 ++++++++++++++++++++++++++ tox.ini | 6 +++ 4 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 oslo_privsep/functional/__init__.py create mode 100644 oslo_privsep/functional/test_daemon.py diff --git a/.stestr.conf b/.stestr.conf index e3a2fc5..65d70c7 100644 --- a/.stestr.conf +++ b/.stestr.conf @@ -1,3 +1,3 @@ [DEFAULT] -test_path=./oslo_privsep/tests +test_path=${OS_TEST_PATH:-./oslo_privsep/tests} top_path=./ diff --git a/oslo_privsep/functional/__init__.py b/oslo_privsep/functional/__init__.py new file mode 100644 index 0000000..63f1123 --- /dev/null +++ b/oslo_privsep/functional/__init__.py @@ -0,0 +1,8 @@ +import os.path + + +def load_tests(loader, tests, pattern): + this_dir = os.path.dirname(__file__) + new_tests = loader.discover(start_dir=this_dir, pattern=pattern) + tests.addTests(new_tests) + return tests diff --git a/oslo_privsep/functional/test_daemon.py b/oslo_privsep/functional/test_daemon.py new file mode 100644 index 0000000..2c7a5ef --- /dev/null +++ b/oslo_privsep/functional/test_daemon.py @@ -0,0 +1,74 @@ +# Copyright 2019 Red Hat, Inc. +# +# 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 +import os +import time +import unittest + +from oslo_config import fixture as config_fixture +from oslotest import base + +from oslo_privsep import priv_context + + +test_context = priv_context.PrivContext( + __name__, + cfg_section='privsep', + pypath=__name__ + '.test_context', + capabilities=[], +) + + +@test_context.entrypoint +def sleep(): + # We don't want the daemon to be able to handle these calls too fast. + time.sleep(.001) + + +@test_context.entrypoint +def one(): + return 1 + + +@test_context.entrypoint +def logs(): + logging.warning('foo') + + +class TestDaemon(base.BaseTestCase): + def setUp(self): + super(TestDaemon, self).setUp() + venv_path = os.environ['VIRTUAL_ENV'] + self.cfg_fixture = self.useFixture(config_fixture.Config()) + self.cfg_fixture.config( + group='privsep', + helper_command='sudo -E %s/bin/privsep-helper' % venv_path) + priv_context.init() + + def test_concurrency(self): + # Throw a large number of simultaneous requests at the daemon to make + # sure it can can handle them. + for i in range(1000): + sleep() + # Make sure the daemon is still working + self.assertEqual(1, one()) + + def test_logging(self): + logs() + self.assertIn('foo', self.log_fixture.logger.output) + + +if __name__ == '__main__': + unittest.main() diff --git a/tox.ini b/tox.ini index 67fe9e6..f680210 100644 --- a/tox.ini +++ b/tox.ini @@ -78,3 +78,9 @@ deps = -c{toxinidir}/lower-constraints.txt -r{toxinidir}/test-requirements.txt -r{toxinidir}/requirements.txt + +[testenv:functional] +basepython = python3 +setenv = + OS_TEST_PATH=./oslo_privsep/functional + OS_LOG_CAPTURE=1