good start on TestSwiftInitClass
This commit is contained in:
parent
668666c18b
commit
ef487c65ef
@ -144,8 +144,6 @@ class SwiftInit():
|
||||
"""
|
||||
|
||||
def __init__(self, servers):
|
||||
self.servers = []
|
||||
|
||||
server_names = set()
|
||||
for server in servers:
|
||||
if server == 'all':
|
||||
@ -157,8 +155,9 @@ class SwiftInit():
|
||||
else:
|
||||
server_names.add(server)
|
||||
|
||||
self.servers = set()
|
||||
for name in server_names:
|
||||
self.servers.append(SwiftServer(name))
|
||||
self.servers.add(SwiftServer(name))
|
||||
|
||||
def watch_server_pids(self, server_pids, interval=0, **kwargs):
|
||||
"""Monitor a collection of server pids yeilding back those pids that
|
||||
@ -331,20 +330,17 @@ class SwiftInit():
|
||||
raise UnknownCommand(cmd)
|
||||
return f
|
||||
|
||||
def list_commands(self):
|
||||
@classmethod
|
||||
def list_commands(cls):
|
||||
"""Get all publicly accessible commands
|
||||
|
||||
:returns: a list of strings, the method names who are decorated
|
||||
as commands
|
||||
"""
|
||||
cmds = sorted([x.replace('_', '-') for x in dir(self) if \
|
||||
hasattr(getattr(self, x), 'publicly_accessible')])
|
||||
try:
|
||||
helps = [self.get_command(x).__doc__.strip() for x in cmds]
|
||||
except AttributeError:
|
||||
raise AttributeError(
|
||||
'command %s has no __doc__, please add one' % x)
|
||||
return zip(cmds, helps)
|
||||
get_method = lambda cmd: getattr(cls, cmd)
|
||||
return sorted([(x.replace('_', '-'), get_method(x).__doc__.strip())
|
||||
for x in dir(cls) if
|
||||
getattr(get_method(x), 'publicly_accessible', False)])
|
||||
|
||||
def run_command(self, cmd, **kwargs):
|
||||
"""Find the named command and run it
|
||||
@ -365,7 +361,7 @@ class SwiftServer():
|
||||
def __init__(self, server):
|
||||
if '-' not in server:
|
||||
server = '%s-server' % server
|
||||
self.server = server
|
||||
self.server = server.lower()
|
||||
self.type = '-'.join(server.split('-')[:-1])
|
||||
self.cmd = 'swift-%s' % server
|
||||
self.procs = []
|
||||
@ -373,6 +369,18 @@ class SwiftServer():
|
||||
def __str__(self):
|
||||
return self.server
|
||||
|
||||
def __repr__(self):
|
||||
return "%s(%s)" % (self.__class__.__name__, repr(str(self)))
|
||||
|
||||
def __hash__(self):
|
||||
return hash(str(self))
|
||||
|
||||
def __eq__(self, other):
|
||||
try:
|
||||
return self.server == other.server
|
||||
except AttributeError:
|
||||
return False
|
||||
|
||||
def get_pid_file_name(self, ini_file):
|
||||
"""Translate ini_file to a corresponding pid_file
|
||||
|
||||
@ -645,7 +653,7 @@ class SwiftServer():
|
||||
USAGE = """%prog <server> [<server ...] <command>
|
||||
|
||||
Commands:
|
||||
""" + '\n'.join(["%16s: %s" % x for x in SwiftInit([]).list_commands()])
|
||||
""" + '\n'.join(["%16s: %s" % x for x in SwiftInit.list_commands()])
|
||||
|
||||
|
||||
def main():
|
||||
@ -676,13 +684,13 @@ def main():
|
||||
|
||||
if len(servers) == 1:
|
||||
# this is just a stupid swap for me cause I always try to "start main"
|
||||
commands, docs = zip(*SwiftInit([]).list_commands())
|
||||
commands, docs = zip(*SwiftInit.list_commands())
|
||||
if servers[0] in commands:
|
||||
command, servers = servers[0], [command]
|
||||
|
||||
init = SwiftInit(servers)
|
||||
controller = SwiftInit(servers)
|
||||
try:
|
||||
status = init.run_command(command, **options.__dict__)
|
||||
status = controller.run_command(command, **options.__dict__)
|
||||
except UnknownCommand:
|
||||
parser.print_help()
|
||||
print 'ERROR: unknown command, %s' % command
|
||||
|
@ -14,6 +14,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
import unittest
|
||||
from nose import SkipTest
|
||||
|
||||
import os
|
||||
import sys
|
||||
@ -97,7 +98,7 @@ class TestSwiftInitModule(unittest.TestCase):
|
||||
|
||||
def test_setup_env(self):
|
||||
# TODO: tests
|
||||
pass
|
||||
raise SkipTest
|
||||
|
||||
def test_search_tree(self):
|
||||
# file match & ext miss
|
||||
@ -209,7 +210,7 @@ class TestSwiftServerClass(unittest.TestCase):
|
||||
def join_run_dir(self, path):
|
||||
return os.path.join(swift_init.RUN_DIR, path)
|
||||
|
||||
def test_server_init(self):
|
||||
def test_create_server(self):
|
||||
server = swift_init.SwiftServer('proxy')
|
||||
self.assertEquals(server.server, 'proxy-server')
|
||||
self.assertEquals(server.type, 'proxy')
|
||||
@ -219,6 +220,24 @@ class TestSwiftServerClass(unittest.TestCase):
|
||||
self.assertEquals(server.type, 'object')
|
||||
self.assertEquals(server.cmd, 'swift-object-replicator')
|
||||
|
||||
def test_server_to_string(self):
|
||||
server = swift_init.SwiftServer('Proxy')
|
||||
self.assertEquals(str(server), 'proxy-server')
|
||||
server = swift_init.SwiftServer('object-replicator')
|
||||
self.assertEquals(str(server), 'object-replicator')
|
||||
|
||||
def test_server_repr(self):
|
||||
server = swift_init.SwiftServer('proxy')
|
||||
self.assert_(server.__class__.__name__ in repr(server))
|
||||
self.assert_(str(server) in repr(server))
|
||||
|
||||
def test_server_equality(self):
|
||||
server1 = swift_init.SwiftServer('Proxy')
|
||||
server2 = swift_init.SwiftServer('proxy-server')
|
||||
self.assertEquals(server1, server2)
|
||||
# it is NOT a string
|
||||
self.assertNotEquals(server1, 'proxy-server')
|
||||
|
||||
def test_get_pid_file_name(self):
|
||||
server = swift_init.SwiftServer('proxy')
|
||||
ini_file = self.join_swift_dir('proxy-server.conf')
|
||||
@ -1026,7 +1045,6 @@ class TestSwiftServerClass(unittest.TestCase):
|
||||
finally:
|
||||
sys.stdout = old_stdout
|
||||
|
||||
#TODO: more tests
|
||||
def test_stop(self):
|
||||
ini_files = (
|
||||
'account-server/1.conf',
|
||||
@ -1082,18 +1100,193 @@ class TestSwiftServerClass(unittest.TestCase):
|
||||
self.assertFalse(os.path.exists(conf4))
|
||||
self.assertFalse(os.path.exists(conf3))
|
||||
|
||||
#TODO: test SwiftInit class
|
||||
class TestSwiftInitClass(unittest.TestCase):
|
||||
|
||||
def test_placeholder(self):
|
||||
pass
|
||||
def test_create(self):
|
||||
controller = swift_init.SwiftInit(['test'])
|
||||
self.assertEquals(len(controller.servers), 1)
|
||||
server = controller.servers.pop()
|
||||
self.assert_(isinstance(server, swift_init.SwiftServer))
|
||||
self.assertEquals(server.server, 'test-server')
|
||||
# test multi-server and simple dedupe
|
||||
servers = ['object-replicator', 'object-auditor', 'object-replicator']
|
||||
controller = swift_init.SwiftInit(servers)
|
||||
self.assertEquals(len(controller.servers), 2)
|
||||
for server in controller.servers:
|
||||
self.assert_(server.server in servers)
|
||||
# test all
|
||||
controller = swift_init.SwiftInit(['all'])
|
||||
self.assertEquals(len(controller.servers), len(swift_init.ALL_SERVERS))
|
||||
for server in controller.servers:
|
||||
self.assert_(server.server in swift_init.ALL_SERVERS)
|
||||
# test main
|
||||
controller = swift_init.SwiftInit(['main'])
|
||||
self.assertEquals(len(controller.servers), len(swift_init.MAIN_SERVERS))
|
||||
for server in controller.servers:
|
||||
self.assert_(server.server in swift_init.MAIN_SERVERS)
|
||||
# test rest
|
||||
controller = swift_init.SwiftInit(['rest'])
|
||||
self.assertEquals(len(controller.servers), len(swift_init.REST_SERVERS))
|
||||
for server in controller.servers:
|
||||
self.assert_(server.server in swift_init.REST_SERVERS)
|
||||
# test main + rest == all
|
||||
controller = swift_init.SwiftInit(['main', 'rest'])
|
||||
self.assertEquals(len(controller.servers), len(swift_init.ALL_SERVERS))
|
||||
for server in controller.servers:
|
||||
self.assert_(server.server in swift_init.ALL_SERVERS)
|
||||
# test dedupe
|
||||
controller = swift_init.SwiftInit(['main', 'rest', 'proxy', 'object',
|
||||
'container', 'account'])
|
||||
self.assertEquals(len(controller.servers), len(swift_init.ALL_SERVERS))
|
||||
for server in controller.servers:
|
||||
self.assert_(server.server in swift_init.ALL_SERVERS)
|
||||
|
||||
#TODO: more tests
|
||||
def test_watch_server_pids(self):
|
||||
raise SkipTest
|
||||
|
||||
def test_get_command(self):
|
||||
raise SkipTest
|
||||
|
||||
def test_list_commands(self):
|
||||
for cmd, help in swift_init.SwiftInit.list_commands():
|
||||
method = getattr(swift_init.SwiftInit, cmd.replace('-', '_'), None)
|
||||
self.assert_(method, '%s is not a command' % cmd)
|
||||
self.assert_(getattr(method, 'publicly_accessible', False))
|
||||
self.assertEquals(method.__doc__.strip(), help)
|
||||
|
||||
def test_run_command(self):
|
||||
raise SkipTest
|
||||
|
||||
def test_status(self):
|
||||
class MockSwiftServer():
|
||||
def __init__(self, server):
|
||||
self.server = server
|
||||
self.called_kwargs = []
|
||||
def status(self, **kwargs):
|
||||
self.called_kwargs.append(kwargs)
|
||||
if 'error' in self.server:
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
old_server_class = swift_init.SwiftServer
|
||||
try:
|
||||
swift_init.SwiftServer = MockSwiftServer
|
||||
controller = swift_init.SwiftInit(['test'])
|
||||
status = controller.status()
|
||||
self.assertEquals(status, 0)
|
||||
controller = swift_init.SwiftInit(['error'])
|
||||
status = controller.status()
|
||||
self.assertEquals(status, 1)
|
||||
# test multi-server
|
||||
controller = swift_init.SwiftInit(['test', 'error'])
|
||||
kwargs = {'key': 'value'}
|
||||
status = controller.status(**kwargs)
|
||||
self.assertEquals(status, 1)
|
||||
for server in controller.servers:
|
||||
self.assertEquals(server.called_kwargs, [kwargs])
|
||||
finally:
|
||||
swift_init.SwiftServer = old_server_class
|
||||
|
||||
def test_start(self):
|
||||
def mock_setup_env():
|
||||
getattr(mock_setup_env, 'called', []).append(True)
|
||||
class MockSwiftServer():
|
||||
|
||||
def __init__(self, server):
|
||||
self.server = server
|
||||
self.called = defaultdict(list)
|
||||
|
||||
def launch(self, **kwargs):
|
||||
self.called['launch'].append(kwargs)
|
||||
|
||||
def wait(self, **kwargs):
|
||||
self.called['wait'].append(kwargs)
|
||||
if 'error' in self.server:
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
def interact(self, **kwargs):
|
||||
self.called['interact'].append(kwargs)
|
||||
# TODO: test user quit
|
||||
"""
|
||||
if 'raise' in self.server:
|
||||
raise KeyboardInterrupt
|
||||
el
|
||||
"""
|
||||
if 'error' in self.server:
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
old_setup_env = swift_init.setup_env
|
||||
old_swift_server = swift_init.SwiftServer
|
||||
try:
|
||||
swift_init.setup_env = mock_setup_env
|
||||
swift_init.SwiftServer = MockSwiftServer
|
||||
|
||||
# test no errors on launch
|
||||
controller = swift_init.SwiftInit(['proxy', 'error'])
|
||||
status = controller.start()
|
||||
self.assertEquals(status, 0)
|
||||
for server in controller.servers:
|
||||
self.assertEquals(server.called['launch'], [{}])
|
||||
|
||||
# test wait
|
||||
controller = swift_init.SwiftInit(['proxy', 'error'])
|
||||
kwargs = {'wait': True}
|
||||
status = controller.start(**kwargs)
|
||||
self.assertEquals(status, 1)
|
||||
for server in controller.servers:
|
||||
self.assertEquals(server.called['launch'], [kwargs])
|
||||
self.assertEquals(server.called['wait'], [kwargs])
|
||||
|
||||
# test interact
|
||||
controller = swift_init.SwiftInit(['proxy', 'error'])
|
||||
kwargs = {'daemon': False}
|
||||
status = controller.start(**kwargs)
|
||||
self.assertEquals(status, 1)
|
||||
for server in controller.servers:
|
||||
self.assertEquals(server.called['launch'], [kwargs])
|
||||
self.assertEquals(server.called['interact'], [kwargs])
|
||||
finally:
|
||||
swift_init.setup_env = old_setup_env
|
||||
swift_init.SwiftServer = old_swift_server
|
||||
|
||||
|
||||
def test_wait(self):
|
||||
raise SkipTest
|
||||
|
||||
def test_no_daemon(self):
|
||||
raise SkipTest
|
||||
|
||||
def test_once(self):
|
||||
raise SkipTest
|
||||
|
||||
def test_stop(self):
|
||||
raise SkipTest
|
||||
|
||||
def test_shutdown(self):
|
||||
raise SkipTest
|
||||
|
||||
def test_restart(self):
|
||||
raise SkipTest
|
||||
|
||||
def test_reload(self):
|
||||
raise SkipTest
|
||||
|
||||
def test_force_reload(self):
|
||||
raise SkipTest
|
||||
|
||||
|
||||
|
||||
#TODO: test main
|
||||
class TestMain(unittest.TestCase):
|
||||
|
||||
def test_placeholder(self):
|
||||
pass
|
||||
raise SkipTest
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
Loading…
x
Reference in New Issue
Block a user