~therve/landscape-client/285086-customgraph-acceptedtype

« back to all changes in this revision

Viewing changes to landscape/monitor/tests/test_monitor.py

  • Committer: Thomas Hervé
  • Date: 2008-10-15 12:01:07 UTC
  • mfrom: (47.1.38 custom-graph-client)
  • Revision ID: thomas@canonical.com-20081015120107-lzis3ck8liua8b31
Merge custom-graph-client [r=niemeyer,kevin-mcdermott] [f=269524]

Handle custom graph scripts addition and removal, and use a loop to run them
every 5 minutes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
    MonitorPluginRegistry, MonitorDBusObject, MonitorPlugin, DataWatcher)
6
6
from landscape.lib.persist import Persist
7
7
from landscape.lib.dbus_util import get_object
8
 
from landscape.lib.twisted_util import gather_results
9
 
from landscape.tests.test_plugin import SamplePlugin
 
8
from landscape.tests.test_plugin import ExchangePlugin
10
9
from landscape.tests.helpers import (LandscapeTest, LandscapeIsolatedTest,
11
10
                                     RemoteBrokerHelper, MonitorHelper)
12
11
from landscape.tests.mocker import ANY
13
12
 
14
13
 
15
 
class ExchangePlugin(SamplePlugin):
16
 
    """A plugin which records exchange notification events."""
17
 
 
18
 
    def __init__(self):
19
 
        super(ExchangePlugin, self).__init__()
20
 
        self.exchanged = 0
21
 
        self.waiter = None
22
 
 
23
 
    def wait_for_exchange(self):
24
 
        self.waiter = Deferred()
25
 
        return self.waiter
26
 
 
27
 
    def exchange(self):
28
 
        self.exchanged += 1
29
 
        if self.waiter is not None:
30
 
            self.waiter.callback(None)
31
 
 
32
 
 
33
14
class MonitorTest(LandscapeTest):
34
15
 
35
16
    helpers = [MonitorHelper]
47
28
        persist.load(self.monitor.persist_filename)
48
29
        self.assertEquals(persist.get("a"), 1)
49
30
 
50
 
    def test_exchange_calls_exchanges(self):
51
 
        """
52
 
        The L{Monitor.exchange} method calls C{exchange} on all
53
 
        plugins, if available.
54
 
        """
55
 
        plugin1 = SamplePlugin()
56
 
        self.assertFalse(hasattr(plugin1, "exchange"))
57
 
 
58
 
        exchange_plugin1 = ExchangePlugin()
59
 
        exchange_plugin2 = ExchangePlugin()
60
 
 
61
 
        self.monitor.add(plugin1)
62
 
        self.monitor.add(exchange_plugin1)
63
 
        self.monitor.add(exchange_plugin2)
64
 
        self.monitor.add(SamplePlugin())
65
 
 
66
 
        self.monitor.exchange()
67
 
        self.assertEquals(exchange_plugin1.exchanged, 1)
68
 
        self.assertEquals(exchange_plugin2.exchanged, 1)
69
 
 
70
 
    def test_exchange_logs_errors_and_continues(self):
71
 
        self.log_helper.ignore_errors(ZeroDivisionError)
72
 
        plugin1 = SamplePlugin()
73
 
        plugin2 = ExchangePlugin()
74
 
        plugin1.exchange = lambda: 1/0
75
 
        self.monitor.add(plugin1)
76
 
        self.monitor.add(plugin2)
77
 
 
78
 
        self.monitor.exchange()
79
 
        self.assertEquals(plugin2.exchanged, 1)
80
 
        self.assertTrue("ZeroDivisionError" in self.logfile.getvalue())
81
 
 
82
31
    def test_flush_after_exchange(self):
83
32
        """
84
33
        The L{Monitor.exchange} method flushes the monitor after
130
79
                                  MonitorDBusObject.bus_name,
131
80
                                  MonitorDBusObject.object_path)
132
81
 
133
 
    def test_exchange_notification_calls_exchange(self):
134
 
        """
135
 
        When the L{Broker} notifies the L{MonitorDBusObject} that an
136
 
        exchange is about to happen, the plugins' C{exchange} methods
137
 
        gets called.
138
 
        """
139
 
        exchange_plugin1 = ExchangePlugin()
140
 
        exchange_plugin2 = ExchangePlugin()
141
 
        self.monitor.add(exchange_plugin1)
142
 
        self.monitor.add(exchange_plugin2)
143
 
 
144
 
        self.broker_service.reactor.fire("impending-exchange")
145
 
 
146
 
        d = gather_results([exchange_plugin1.wait_for_exchange(),
147
 
                            exchange_plugin2.wait_for_exchange()])
148
 
        d.addCallback(self.assertEquals, [None, None])
149
 
        return d
150
 
 
151
82
    def test_ping(self):
152
83
        result = self.service.ping()
153
84
        def got_result(result):