def test__tryUpdate_logs_errors_from_broken_method(self): service = syslog.RegionSyslogService(reactor) broken_method = self.patch_autospec(service, self.method) broken_method.side_effect = factory.make_exception() # Don't actually write the file. self.patch_autospec(syslog, "write_config") # Ensure that we never actually execute against systemd. self.patch_autospec(service_monitor, "restartService") with TwistedLoggerFixture() as logger: yield service._tryUpdate() self.assertThat( logger.output, DocTestMatches( """ Failed to update syslog configuration. Traceback (most recent call last): ... maastesting.factory.TestException#... """ ), )
def test__tryUpdate_updates_syslog_server(self): service = syslog.RegionSyslogService(reactor) port, peers = yield deferToDatabase(self.make_example_configuration) write_config = self.patch_autospec(syslog, "write_config") restartService = self.patch_autospec(service_monitor, "restartService") yield service._tryUpdate() self.assertThat( write_config, MockCalledOnceWith( True, Matches( ContainsAll( [ { "ip": service._formatIP(ip), "name": node.hostname, } for node, ip in peers ] ) ), port=port, ), ) self.assertThat(restartService, MockCalledOnceWith("syslog_region")) # If the configuration has not changed then a second call to # `_tryUpdate` does not result in another call to `write_config`. yield service._tryUpdate() self.assertThat(write_config, MockCalledOnce()) self.assertThat(restartService, MockCalledOnceWith("syslog_region"))
def test__getConfiguration_returns_configuration_object(self): service = syslog.RegionSyslogService(reactor) # Put all addresses in the same space so they're mutually routable. space = factory.make_Space() # Populate the database with "this" region rack and an example peer. region_rack, _, _ = make_region_rack_with_address(space) self.useFixture(MAASIDFixture(region_rack.system_id)) peer, addr4, addr6 = make_region_rack_with_address(space) observed = service._getConfiguration() self.assertThat(observed, IsInstance(syslog._Configuration)) expected_peers = AllMatch(Equals((peer.hostname, IPAddress(addr4.ip)))) self.assertThat(observed, MatchesStructure(peers=expected_peers))
def make_SyslogService(): from maasserver.regiondservices import syslog return syslog.RegionSyslogService(reactor)
def test_service_iterates_every_30_seconds(self): service = syslog.RegionSyslogService(reactor) self.assertThat(service.step, Equals(30.0))
def test_service_uses__tryUpdate_as_periodic_function(self): service = syslog.RegionSyslogService(reactor) self.assertThat(service.call, Equals((service._tryUpdate, (), {})))