~ubuntu-branches/ubuntu/karmic/pida/karmic

« back to all changes in this revision

Viewing changes to tests/core/test_servicemanager.py

  • Committer: Bazaar Package Importer
  • Author(s): Jan Luebbe
  • Date: 2007-09-05 17:54:09 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20070905175409-ty9f6qpuctyjv1sd
Tags: 0.5.1-2
* Depend on librsvg2-common, which is not pulled in by the other depends
  (closes: #394860)
* gvim is no alternative for python-gnome2 and python-gnome2-extras
  (closes: #436431)
* Pida now uses ~/.pida2, so it can no longer be confused by old
  configurations (closes: #421378)
* Culebra is no longer supported by upstream (closes: #349009)
* Update manpage (closes: #440375)
* Update watchfile (pida is now called PIDA)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
 
 
3
from unittest import TestCase
 
4
from tempfile import mkdtemp
 
5
import shutil
 
6
import os
 
7
 
 
8
from pida.core.interfaces import IService
 
9
from pida.core.servicemanager import ServiceLoader, ServiceManager
 
10
 
 
11
from pida.utils.testing.mock import Mock
 
12
 
 
13
from pida.core.environment import get_glade_path
 
14
 
 
15
class ServiceLoadTest(TestCase):
 
16
 
 
17
    def setUp(self):
 
18
        # A working service
 
19
        self._tdir = mkdtemp()
 
20
        self._spath = os.path.join(self._tdir, 'testservice')
 
21
        os.mkdir(self._spath)
 
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')
 
28
            f.close()
 
29
 
 
30
        self._spath = os.path.join(self._tdir, 'testservice2')
 
31
        os.mkdir(self._spath)
 
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')
 
38
            f.close()
 
39
 
 
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')
 
49
            f.close()
 
50
 
 
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')
 
60
            f.close()
 
61
 
 
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')
 
71
            f.close()
 
72
 
 
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')
 
82
            f.close()
 
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')
 
87
        f.close()
 
88
        self.loader = ServiceLoader()
 
89
 
 
90
    def test_get(self):
 
91
        services = [svc for svc in self.loader.get_all_services([self._tdir])]
 
92
        self.assertEqual(services[0].__name__, 'Service')
 
93
 
 
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)
 
97
        
 
98
    def test_load(self):
 
99
        services = [svc for svc in self.loader.load_all_services([self._tdir], None)]
 
100
        self.assertEqual(services[0].__class__.__name__, 'Service')
 
101
 
 
102
    def test_bad_load(self):
 
103
        services = [svc for svc in self.loader.get_all_services([self._tdir2])]
 
104
        self.assertEqual(services, [])
 
105
 
 
106
    def test_no_pidafile(self):
 
107
        services = [svc for svc in self.loader.get_all_services([self._tdir3])]
 
108
        self.assertEqual(services, [])
 
109
 
 
110
    def test_import_error(self):
 
111
        services = [svc for svc in self.loader.get_all_services([self._tdir4])]
 
112
        self.assertEqual(services, [])
 
113
 
 
114
    def test_env(self):
 
115
        self.loader.load_all_services([self._tdir5], None)
 
116
        gp = get_glade_path('banana.glade')
 
117
        self.assertEqual(gp, self._dumglade)
 
118
 
 
119
    def tearDown(self):
 
120
        shutil.rmtree(self._tdir)
 
121
        shutil.rmtree(self._tdir2)
 
122
        shutil.rmtree(self._tdir3)
 
123
        shutil.rmtree(self._tdir4)
 
124
 
 
125
 
 
126
class ServiceManagerTest(TestCase):
 
127
 
 
128
    def setUp(self):
 
129
        # A working service
 
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')
 
139
            f.close()
 
140
 
 
141
        class MyService:
 
142
            servicename = 'MyService'
 
143
 
 
144
        self._svc = MyService()
 
145
 
 
146
        self._boss = Mock(
 
147
            dict(
 
148
                get_service_dirs = [self._tdir]
 
149
            )
 
150
        )
 
151
        self._sm = ServiceManager(self._boss)
 
152
 
 
153
 
 
154
    def tearDown(self):
 
155
        shutil.rmtree(self._tdir)
 
156
 
 
157
    def test_service_manager_register(self):
 
158
        self._sm.register_service(self._svc)
 
159
        self.assertEqual(
 
160
            self._sm.get_service('MyService').servicename,
 
161
            self._svc.servicename
 
162
        )
 
163
        self.assertEqual(
 
164
            [s for s in self._sm.get_services()][0],
 
165
            self._svc
 
166
        )
 
167
 
 
168
    def test_service_manager_load(self):
 
169
        self._sm.load_services()
 
170
        self.assertEqual(
 
171
            self._sm.get_service('testservice').__class__.__name__,
 
172
            'Service'
 
173
        )
 
174
        self.assertEqual(
 
175
            [s for s in self._sm.get_services()][0].__class__.__name__,
 
176
            'Service'
 
177
        )
 
178