Merge lp:~allenap/maas/rack-controller-service--bug-1578800--service-monitor into lp:~maas-committers/maas/trunk

Proposed by Gavin Panella
Status: Merged
Approved by: Gavin Panella
Approved revision: no longer in the source branch.
Merged at revision: 5006
Proposed branch: lp:~allenap/maas/rack-controller-service--bug-1578800--service-monitor
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 157 lines (+26/-27)
3 files modified
src/maasserver/service_monitor.py (+3/-2)
src/maasserver/tests/test_rack_controller.py (+14/-15)
src/maasserver/tests/test_service_monitor.py (+9/-10)
To merge this branch: bzr merge lp:~allenap/maas/rack-controller-service--bug-1578800--service-monitor
Reviewer Review Type Date Requested Status
LaMont Jones (community) Approve
Review via email: mp+294218@code.launchpad.net

Commit message

Update ServiceMonitorService to use the new RegionAdvertisingService API.

In addition, improve testing for the other consumer of RegionAdvertisingService such that future API changes will result in test failures.

To post a comment you must log in.
Revision history for this message
LaMont Jones (lamont) wrote :

I especially like the testing changes! +1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/maasserver/service_monitor.py'
--- src/maasserver/service_monitor.py 2016-04-15 20:43:22 +0000
+++ src/maasserver/service_monitor.py 2016-05-10 10:27:58 +0000
@@ -98,9 +98,10 @@
98 @inlineCallbacks98 @inlineCallbacks
99 def _updateDatabase(self, services):99 def _updateDatabase(self, services):
100 """Update database about services status."""100 """Update database about services status."""
101 processId = yield self.advertisingService.processId.get()101 advertising = yield self.advertisingService.advertising.get()
102 services = yield self._buildServices(services)102 services = yield self._buildServices(services)
103 yield deferToDatabase(self._saveIntoDatabase, processId, services)103 yield deferToDatabase(
104 self._saveIntoDatabase, advertising.process_id, services)
104105
105 @transactional106 @transactional
106 def _saveIntoDatabase(self, processId, services):107 def _saveIntoDatabase(self, processId, services):
107108
=== modified file 'src/maasserver/tests/test_rack_controller.py'
--- src/maasserver/tests/test_rack_controller.py 2016-05-06 10:23:49 +0000
+++ src/maasserver/tests/test_rack_controller.py 2016-05-10 10:27:58 +0000
@@ -8,6 +8,7 @@
8import random8import random
9from unittest.mock import (9from unittest.mock import (
10 call,10 call,
11 create_autospec,
11 Mock,12 Mock,
12 sentinel,13 sentinel,
13)14)
@@ -29,7 +30,6 @@
29 MockCallsMatch,30 MockCallsMatch,
30 MockNotCalled,31 MockNotCalled,
31)32)
32from provisioningserver.utils.twisted import DeferredValue
33from testtools import ExpectedException33from testtools import ExpectedException
34from testtools.matchers import MatchesStructure34from testtools.matchers import MatchesStructure
35from twisted.internet import reactor35from twisted.internet import reactor
@@ -58,11 +58,11 @@
58 postgresListener=sentinel.listener,58 postgresListener=sentinel.listener,
59 advertisingService=sentinel.advertiser))59 advertisingService=sentinel.advertiser))
6060
61 def test_startService_sets_starting_to_result_of_processId_get(self):61 def test_startService_sets_starting_to_result_of_advertising_get(self):
62 advertising = Mock(DeferredValue, get=Mock())62 advertiser = create_autospec(RegionAdvertisingService(), spec_set=True)
63 advertiser = Mock(RegionAdvertisingService, advertising=advertising)
64 service = RackControllerService(sentinel.listener, advertiser)63 service = RackControllerService(sentinel.listener, advertiser)
65 observed = service.startService()64 observed = service.startService()
65 advertising = advertiser.advertising
66 self.assertEqual(advertising.get.return_value, observed)66 self.assertEqual(advertising.get.return_value, observed)
67 self.assertEqual(advertising.get.return_value, service.starting)67 self.assertEqual(advertising.get.return_value, service.starting)
6868
@@ -71,9 +71,9 @@
71 def test_startService_registers_with_postgres_listener(self):71 def test_startService_registers_with_postgres_listener(self):
72 regionProcessId = random.randint(0, 100)72 regionProcessId = random.randint(0, 100)
7373
74 advertising = DeferredValue()74 advertiser = RegionAdvertisingService()
75 advertising.set(RegionAdvertising(sentinel.region_id, regionProcessId))75 advertiser.advertising.set(
76 advertiser = Mock(RegionAdvertisingService, advertising=advertising)76 RegionAdvertising(sentinel.region_id, regionProcessId))
7777
78 listener = Mock()78 listener = Mock()
79 service = RackControllerService(listener, advertiser)79 service = RackControllerService(listener, advertiser)
@@ -90,9 +90,9 @@
90 def test_startService_clears_starting_once_complete(self):90 def test_startService_clears_starting_once_complete(self):
91 regionProcessId = random.randint(0, 100)91 regionProcessId = random.randint(0, 100)
9292
93 advertising = DeferredValue()93 advertiser = RegionAdvertisingService()
94 advertising.set(RegionAdvertising(sentinel.region_id, regionProcessId))94 advertiser.advertising.set(
95 advertiser = Mock(RegionAdvertisingService, advertising=advertising)95 RegionAdvertising(sentinel.region_id, regionProcessId))
9696
97 listener = Mock()97 listener = Mock()
98 service = RackControllerService(listener, advertiser)98 service = RackControllerService(listener, advertiser)
@@ -101,8 +101,7 @@
101101
102 @wait_for_reactor102 @wait_for_reactor
103 def test_startService_handles_cancel(self):103 def test_startService_handles_cancel(self):
104 advertising = DeferredValue()104 advertiser = RegionAdvertisingService()
105 advertiser = Mock(RegionAdvertisingService, advertising=advertising)
106105
107 listener = Mock()106 listener = Mock()
108 service = RackControllerService(listener, advertiser)107 service = RackControllerService(listener, advertiser)
@@ -128,9 +127,9 @@
128 process, rack_controllers = yield deferToDatabase(127 process, rack_controllers = yield deferToDatabase(
129 create_process_and_racks)128 create_process_and_racks)
130129
131 advertising = DeferredValue()130 advertiser = RegionAdvertisingService()
132 advertising.set(RegionAdvertising(sentinel.region_id, process.id))131 advertiser.advertising.set(
133 advertiser = Mock(RegionAdvertisingService, advertising=advertising)132 RegionAdvertising(sentinel.region_id, process.id))
134133
135 listener = Mock()134 listener = Mock()
136 service = RackControllerService(listener, advertiser)135 service = RackControllerService(listener, advertiser)
137136
=== modified file 'src/maasserver/tests/test_service_monitor.py'
--- src/maasserver/tests/test_service_monitor.py 2016-05-06 11:41:05 +0000
+++ src/maasserver/tests/test_service_monitor.py 2016-05-10 10:27:58 +0000
@@ -7,10 +7,7 @@
77
8import os8import os
9import random9import random
10from unittest.mock import (10from unittest.mock import sentinel
11 Mock,
12 sentinel,
13)
1411
15from crochet import wait_for12from crochet import wait_for
16from maasserver import (13from maasserver import (
@@ -20,6 +17,10 @@
20from maasserver.enum import SERVICE_STATUS17from maasserver.enum import SERVICE_STATUS
21from maasserver.models.config import Config18from maasserver.models.config import Config
22from maasserver.models.service import Service19from maasserver.models.service import Service
20from maasserver.rpc.regionservice import (
21 RegionAdvertising,
22 RegionAdvertisingService,
23)
23from maasserver.service_monitor import (24from maasserver.service_monitor import (
24 ProxyService,25 ProxyService,
25 service_monitor,26 service_monitor,
@@ -39,7 +40,6 @@
39 SERVICE_STATE,40 SERVICE_STATE,
40 ServiceState,41 ServiceState,
41)42)
42from provisioningserver.utils.twisted import DeferredValue
43from testtools.matchers import MatchesStructure43from testtools.matchers import MatchesStructure
44from twisted.internet.defer import (44from twisted.internet.defer import (
45 fail,45 fail,
@@ -131,17 +131,16 @@
131 service.name: state131 service.name: state
132 })132 })
133133
134 advertisingService = Mock()134 advertiser = RegionAdvertisingService()
135 advertisingService.processId = DeferredValue()135 monitor_service = ServiceMonitorService(advertiser, Clock())
136 monitor_service = ServiceMonitorService(
137 advertisingService, Clock())
138 yield monitor_service.startService()136 yield monitor_service.startService()
139137
140 region = yield deferToDatabase(138 region = yield deferToDatabase(
141 transactional(factory.make_RegionController))139 transactional(factory.make_RegionController))
142 region_process = yield deferToDatabase(140 region_process = yield deferToDatabase(
143 transactional(factory.make_RegionControllerProcess), region)141 transactional(factory.make_RegionControllerProcess), region)
144 advertisingService.processId.set(region_process.id)142 advertiser.advertising.set(
143 RegionAdvertising(region.id, region_process.id))
145 yield monitor_service.stopService()144 yield monitor_service.stopService()
146145
147 service = yield deferToDatabase(146 service = yield deferToDatabase(