Skip to content

Commit

Permalink
Add functional tests
Browse files Browse the repository at this point in the history
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
  • Loading branch information
cybertron authored and stephenfin committed Dec 11, 2019
1 parent 795dcbe commit dfcd983
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .stestr.conf
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[DEFAULT]
test_path=./oslo_privsep/tests
test_path=${OS_TEST_PATH:-./oslo_privsep/tests}
top_path=./
8 changes: 8 additions & 0 deletions oslo_privsep/functional/__init__.py
Original file line number Diff line number Diff line change
@@ -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
74 changes: 74 additions & 0 deletions oslo_privsep/functional/test_daemon.py
Original file line number Diff line number Diff line change
@@ -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()
6 changes: 6 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit dfcd983

Please sign in to comment.