mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
selftest: Add base classes for Target/Environment and their management.
This commit is contained in:
parent
164d3f6641
commit
5f74fa3511
138
selftest/target/__init__.py
Normal file
138
selftest/target/__init__.py
Normal file
@ -0,0 +1,138 @@
|
||||
# target.py -- Targets
|
||||
# Copyright (C) 2012 Jelmer Vernooij <jelmer@samba.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; version 3
|
||||
# of the License or (at your option) any later version of
|
||||
# the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
# MA 02110-1301, USA.
|
||||
|
||||
"""Selftest target management."""
|
||||
|
||||
__all__ = ['Target', 'Environment', 'EnvironmentManager']
|
||||
|
||||
|
||||
class EnvironmentDown(Exception):
|
||||
"""Indicates an environment has gone down."""
|
||||
|
||||
def __init__(self, msg):
|
||||
super(EnvironmentDown, self).__init__("environment went down: %s" % msg)
|
||||
|
||||
class Target(object):
|
||||
"""A target for Samba tests."""
|
||||
|
||||
def setup_env(self, name, prefix):
|
||||
"""Setup an environment.
|
||||
|
||||
:param name: name of the environment
|
||||
:param prefix: directory to create it in
|
||||
"""
|
||||
raise NotImplementedError(self.setup_env)
|
||||
|
||||
|
||||
class Environment(object):
|
||||
"""An environment for Samba tests.
|
||||
|
||||
Tests often need to run against a server with particular things set up,
|
||||
a "environment". This environment is provided by the test target.
|
||||
"""
|
||||
|
||||
def check(self):
|
||||
"""Check if this environment is still up and running.
|
||||
|
||||
:return: Boolean indicating whether environment is still running
|
||||
"""
|
||||
raise NotImplementedError(self.check)
|
||||
|
||||
def get_log(self):
|
||||
"""Retrieve the last log for this environment.
|
||||
|
||||
:return: String with log
|
||||
"""
|
||||
raise NotImplementedError(self.get_log)
|
||||
|
||||
def teardown(self):
|
||||
"""Tear down an environment.
|
||||
|
||||
"""
|
||||
raise NotImplementedError(self.teardown)
|
||||
|
||||
|
||||
class NoneEnvironment(Environment):
|
||||
"""Empty environment.
|
||||
"""
|
||||
|
||||
def check(self):
|
||||
return True
|
||||
|
||||
def get_log(self):
|
||||
return ""
|
||||
|
||||
def teardown(self):
|
||||
return
|
||||
|
||||
|
||||
class EnvironmentManager(object):
|
||||
"""Manager of environments."""
|
||||
|
||||
def __init__(self, target):
|
||||
self.target = target
|
||||
self.running_envs = {}
|
||||
|
||||
def get_running_env(self, name):
|
||||
envname = name.split(":")[0]
|
||||
return self.running_envs[envname]
|
||||
|
||||
def getlog_env(self, envname):
|
||||
env = self.get_running_env(envname)
|
||||
return env.get_log()
|
||||
|
||||
def check_env(envname):
|
||||
"""Check if an environment is still up.
|
||||
|
||||
:param envname: Environment to check
|
||||
"""
|
||||
env = self.get_running_env(envname)
|
||||
return env.check()
|
||||
|
||||
def teardown_env(self, envname):
|
||||
"""Tear down an environment.
|
||||
|
||||
:param envname: Name of the environment
|
||||
"""
|
||||
env = self.get_running_env(envname)
|
||||
env.teardown()
|
||||
del self.running_envs[envname]
|
||||
|
||||
def teardown_all(self):
|
||||
for env in self.running_envs.iterkeys():
|
||||
self.teardown_env(env)
|
||||
|
||||
def setup_env(self, envname, prefix):
|
||||
if envname == "none":
|
||||
return NoneEnvironment()
|
||||
|
||||
running_env = self.get_running_env(envname)
|
||||
if running_env is not None:
|
||||
if not running_env.check():
|
||||
raise EnvironmentDown(running_env.get_log())
|
||||
return running_env
|
||||
|
||||
|
||||
env = self.target.setup_env(envname, prefix)
|
||||
if env is None:
|
||||
return None
|
||||
|
||||
self.running_envs[env] = env
|
||||
|
||||
return env
|
@ -23,7 +23,7 @@ import unittest
|
||||
|
||||
def test_suite():
|
||||
result = unittest.TestSuite()
|
||||
names = ['socket_wrapper']
|
||||
names = ['socket_wrapper', 'target']
|
||||
module_names = ['selftest.tests.test_' + name for name in names]
|
||||
loader = unittest.TestLoader()
|
||||
result.addTests(loader.loadTestsFromNames(module_names))
|
||||
|
60
selftest/tests/test_target.py
Normal file
60
selftest/tests/test_target.py
Normal file
@ -0,0 +1,60 @@
|
||||
# test_target.py -- The tests for selftest target code
|
||||
# Copyright (C) 2012 Jelmer Vernooij <jelmer@samba.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; version 3
|
||||
# of the License or (at your option) any later version of
|
||||
# the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
# MA 02110-1301, USA.
|
||||
|
||||
"""Tests for selftest.target."""
|
||||
|
||||
from selftest.target import (
|
||||
EnvironmentManager,
|
||||
NoneEnvironment,
|
||||
Environment,
|
||||
Target,
|
||||
)
|
||||
|
||||
import os
|
||||
import unittest
|
||||
|
||||
|
||||
class DummyEnvironment(Environment):
|
||||
|
||||
def __init__(self, name, prefix):
|
||||
self.name = name
|
||||
self.prefix = prefix
|
||||
self.check_ret = True
|
||||
self.log_ret = ""
|
||||
|
||||
def check(self):
|
||||
return self.check_ret
|
||||
|
||||
def get_log(self):
|
||||
return self.log_ret
|
||||
|
||||
|
||||
class DummyTarget(Target):
|
||||
|
||||
def get_target(self, name, prefix):
|
||||
return DummyTarget(name, prefix)
|
||||
|
||||
|
||||
class EnvironmentManagerTests(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.mgr = EnvironmentManager(DummyTarget())
|
||||
|
||||
def test_none(self):
|
||||
self.assertIs(NoneEnvironment, type(self.mgr.setup_env("none", "prefix")))
|
Loading…
Reference in New Issue
Block a user