3
from unittest import TestCase
4
from tempfile import mkdtemp
8
from pida.core.interfaces import IService
9
from pida.core.servicemanager import ServiceLoader, ServiceManager
11
from pida.utils.testing.mock import Mock
13
from pida.core.environment import get_glade_path
15
class ServiceLoadTest(TestCase):
19
self._tdir = mkdtemp()
20
self._spath = os.path.join(self._tdir, 'testservice')
22
for name in ['__init__.py', 'testservice.py', 'service.pida']:
23
f = open(os.path.join(self._spath, name), 'w')
24
if name == 'testservice.py':
25
f.write('class Service(object):\n')
26
f.write(' def __init__(self, boss):\n')
27
f.write(' """A test"""\n')
30
self._spath = os.path.join(self._tdir, 'testservice2')
32
for name in ['__init__.py', 'testservice2.py', 'service.pida']:
33
f = open(os.path.join(self._spath, name), 'w')
34
if name == 'testservice2.py':
35
f.write('class Service(object):\n')
36
f.write(' def __init__(self, boss):\n')
37
f.write(' """A test"""\n')
40
self._tdir2 = mkdtemp()
41
self._spath2 = os.path.join(self._tdir2, 'testservice')
42
os.mkdir(self._spath2)
43
for name in ['__init__.py', 'testservice.py', 'service.pida']:
44
f = open(os.path.join(self._spath2, name), 'w')
45
if name == 'testservice.py':
46
f.write('class NoService(object):\n')
47
f.write(' def __init__(self, boss):\n')
48
f.write(' """A test"""\n')
51
self._tdir3 = mkdtemp()
52
self._spath3 = os.path.join(self._tdir3, 'testservice')
53
os.mkdir(self._spath3)
54
for name in ['__init__.py', 'testservice.py']:
55
f = open(os.path.join(self._spath3, name), 'w')
56
if name == 'testservice.py':
57
f.write('class Service(object):\n')
58
f.write(' def __init__(self, boss):\n')
59
f.write(' """A test"""\n')
62
self._tdir4 = mkdtemp()
63
self._spath4 = os.path.join(self._tdir4, 'nottestservice')
64
os.mkdir(self._spath4)
65
for name in ['__init__.py', 'testservice.py', 'service.pida']:
66
f = open(os.path.join(self._spath4, name), 'w')
67
if name == 'testservice.py':
68
f.write('class Service(object):\n')
69
f.write(' def __init__(self, boss):\n')
70
f.write(' """A test"""\n')
73
self._tdir5 = mkdtemp()
74
self._spath5 = os.path.join(self._tdir5, 'testservice')
75
os.mkdir(self._spath5)
76
for name in ['__init__.py', 'testservice.py', 'service.pida']:
77
f = open(os.path.join(self._spath5, name), 'w')
78
if name == 'testservice.py':
79
f.write('class Service(object):\n')
80
f.write(' def __init__(self, boss):\n')
81
f.write(' """A test"""\n')
83
self._gladedir = os.path.join(self._spath5, 'glade')
84
os.mkdir(self._gladedir)
85
self._dumglade = os.path.join(self._gladedir, 'banana.glade')
86
f = open(self._dumglade, 'w')
88
self.loader = ServiceLoader()
91
services = [svc for svc in self.loader.get_all_services([self._tdir])]
92
self.assertEqual(services[0].__name__, 'Service')
94
def test_get_both(self):
95
services = [svc for svc in self.loader.get_all_services([self._tdir])]
96
self.assertEqual(len(services), 2)
99
services = [svc for svc in self.loader.load_all_services([self._tdir], None)]
100
self.assertEqual(services[0].__class__.__name__, 'Service')
102
def test_bad_load(self):
103
services = [svc for svc in self.loader.get_all_services([self._tdir2])]
104
self.assertEqual(services, [])
106
def test_no_pidafile(self):
107
services = [svc for svc in self.loader.get_all_services([self._tdir3])]
108
self.assertEqual(services, [])
110
def test_import_error(self):
111
services = [svc for svc in self.loader.get_all_services([self._tdir4])]
112
self.assertEqual(services, [])
115
self.loader.load_all_services([self._tdir5], None)
116
gp = get_glade_path('banana.glade')
117
self.assertEqual(gp, self._dumglade)
120
shutil.rmtree(self._tdir)
121
shutil.rmtree(self._tdir2)
122
shutil.rmtree(self._tdir3)
123
shutil.rmtree(self._tdir4)
126
class ServiceManagerTest(TestCase):
130
self._tdir = mkdtemp()
131
self._spath = os.path.join(self._tdir, 'testservice')
132
os.mkdir(self._spath)
133
for name in ['__init__.py', 'testservice.py', 'service.pida']:
134
f = open(os.path.join(self._spath, name), 'w')
135
if name == 'testservice.py':
136
f.write('class Service(object):\n')
137
f.write(' def __init__(self, boss):\n')
138
f.write(' """A test"""\n')
142
servicename = 'MyService'
144
self._svc = MyService()
148
get_service_dirs = [self._tdir]
151
self._sm = ServiceManager(self._boss)
155
shutil.rmtree(self._tdir)
157
def test_service_manager_register(self):
158
self._sm.register_service(self._svc)
160
self._sm.get_service('MyService').servicename,
161
self._svc.servicename
164
[s for s in self._sm.get_services()][0],
168
def test_service_manager_load(self):
169
self._sm.load_services()
171
self._sm.get_service('testservice').__class__.__name__,
175
[s for s in self._sm.get_services()][0].__class__.__name__,