func (s *EnvironWatcherTests) TestWatchForEnvironConfigChanges(c *gc.C) { envConfig, err := s.state.EnvironConfig() c.Assert(err, jc.ErrorIsNil) w, err := s.facade.WatchForEnvironConfigChanges() c.Assert(err, jc.ErrorIsNil) wc := watchertest.NewNotifyWatcherC(c, w, s.state.StartSync) defer wc.AssertStops() // Initial event. wc.AssertOneChange() // Change the environment configuration by updating an existing attribute, check it's detected. newAttrs := map[string]interface{}{"logging-config": "juju=ERROR"} err = s.state.UpdateEnvironConfig(newAttrs, nil, nil) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Change the environment configuration by adding a new attribute, check it's detected. newAttrs = map[string]interface{}{"foo": "bar"} err = s.state.UpdateEnvironConfig(newAttrs, nil, nil) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Change the environment configuration by removing an attribute, check it's detected. err = s.state.UpdateEnvironConfig(map[string]interface{}{}, []string{"foo"}, nil) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Change it back to the original config. oldAttrs := map[string]interface{}{"logging-config": envConfig.AllAttrs()["logging-config"]} err = s.state.UpdateEnvironConfig(oldAttrs, nil, nil) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() }
func (s *machineUpgraderSuite) TestWatchAPIVersion(c *gc.C) { w, err := s.st.WatchAPIVersion(s.rawMachine.Tag().String()) c.Assert(err, jc.ErrorIsNil) wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync) defer wc.AssertStops() // Initial event wc.AssertOneChange() // One change noticing the new version vers := version.MustParse("10.20.34") err = statetesting.SetAgentVersion(s.BackingState, vers) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Setting the version to the same value doesn't trigger a change err = statetesting.SetAgentVersion(s.BackingState, vers) c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() // Another change noticing another new version vers = version.MustParse("10.20.35") err = statetesting.SetAgentVersion(s.BackingState, vers) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() }
func (s *meterStatusIntegrationSuite) TestWatchMeterStatus(c *gc.C) { w, err := s.status.WatchMeterStatus() c.Assert(err, jc.ErrorIsNil) wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync) defer wc.AssertStops() wc.AssertOneChange() err = s.unit.SetMeterStatus("GREEN", "ok") c.Assert(err, jc.ErrorIsNil) err = s.unit.SetMeterStatus("AMBER", "ok") c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Non-change is not reported. err = s.unit.SetMeterStatus("AMBER", "ok") c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() mm, err := s.State.MetricsManager() c.Assert(err, jc.ErrorIsNil) err = mm.SetLastSuccessfulSend(time.Now()) c.Assert(err, jc.ErrorIsNil) for i := 0; i < 3; i++ { err := mm.IncrementConsecutiveErrors() c.Assert(err, jc.ErrorIsNil) } status := mm.MeterStatus() c.Assert(status.Code, gc.Equals, state.MeterAmber) // Confirm meter status has changed wc.AssertOneChange() }
func (s *unitSuite) TestWatchAddresses(c *gc.C) { w, err := s.apiUnit.WatchAddresses() c.Assert(err, jc.ErrorIsNil) wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync) defer wc.AssertStops() // Initial event. wc.AssertOneChange() // Update config a couple of times, check a single event. err = s.wordpressMachine.SetProviderAddresses(network.NewAddress("0.1.2.3")) c.Assert(err, jc.ErrorIsNil) err = s.wordpressMachine.SetProviderAddresses(network.NewAddress("0.1.2.4")) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Non-change is not reported. err = s.wordpressMachine.SetProviderAddresses(network.NewAddress("0.1.2.4")) c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() // Change is reported for machine addresses. err = s.wordpressMachine.SetMachineAddresses(network.NewAddress("0.1.2.5")) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Set machine addresses to empty is reported. err = s.wordpressMachine.SetMachineAddresses() c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() }
func (s *unitSuite) TestWatchConfigSettings(c *gc.C) { // Make sure WatchConfigSettings returns an error when // no charm URL is set, as its state counterpart does. w, err := s.apiUnit.WatchConfigSettings() c.Assert(err, gc.ErrorMatches, "unit charm not set") // Now set the charm and try again. err = s.apiUnit.SetCharmURL(s.wordpressCharm.URL()) c.Assert(err, jc.ErrorIsNil) w, err = s.apiUnit.WatchConfigSettings() wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync) defer wc.AssertStops() // Initial event. wc.AssertOneChange() // Update config a couple of times, check a single event. err = s.wordpressService.UpdateConfigSettings(charm.Settings{ "blog-title": "superhero paparazzi", }) c.Assert(err, jc.ErrorIsNil) err = s.wordpressService.UpdateConfigSettings(charm.Settings{ "blog-title": "sauceror central", }) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Non-change is not reported. err = s.wordpressService.UpdateConfigSettings(charm.Settings{ "blog-title": "sauceror central", }) c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() }
func (s *undertakerSuite) TestWatchModelResources(c *gc.C) { undertakerClient, otherSt := s.hostedAPI(c) defer otherSt.Close() w, err := undertakerClient.WatchModelResources() c.Assert(err, jc.ErrorIsNil) defer w.Kill() wc := watchertest.NewNotifyWatcherC(c, w, nil) wc.AssertOneChange() wc.AssertStops() }
func (s *watcherSuite) TestNotifyWatcherStopsWithPendingSend(c *gc.C) { var results params.NotifyWatchResults args := params.Entities{Entities: []params.Entity{{Tag: s.rawMachine.Tag().String()}}} err := s.stateAPI.APICall("Machiner", s.stateAPI.BestFacadeVersion("Machiner"), "", "Watch", args, &results) c.Assert(err, jc.ErrorIsNil) c.Assert(results.Results, gc.HasLen, 1) result := results.Results[0] c.Assert(result.Error, gc.IsNil) // params.NotifyWatcher conforms to the watcher.NotifyWatcher interface w := watcher.NewNotifyWatcher(s.stateAPI, result) wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync) wc.AssertStops() }
func (s *keyupdaterSuite) TestWatchAuthorisedKeys(c *gc.C) { watcher, err := s.keyupdater.WatchAuthorisedKeys(s.rawMachine.Tag().(names.MachineTag)) c.Assert(err, jc.ErrorIsNil) wc := watchertest.NewNotifyWatcherC(c, watcher, s.BackingState.StartSync) defer wc.AssertStops() // Initial event wc.AssertOneChange() s.setAuthorisedKeys(c, "key1\nkey2") // One change noticing the new version wc.AssertOneChange() // Setting the version to the same value doesn't trigger a change s.setAuthorisedKeys(c, "key1\nkey2") wc.AssertNoChange() s.setAuthorisedKeys(c, "key1\nkey2\nkey3") wc.AssertOneChange() }
func (s *unitUpgraderSuite) TestWatchAPIVersion(c *gc.C) { w, err := s.st.WatchAPIVersion(s.rawUnit.Tag().String()) c.Assert(err, jc.ErrorIsNil) wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync) defer wc.AssertStops() // Initial event wc.AssertOneChange() vers := version.MustParseBinary("10.20.34-quantal-amd64") err = s.rawMachine.SetAgentVersion(vers) c.Assert(err, jc.ErrorIsNil) // One change noticing the new version wc.AssertOneChange() vers = version.MustParseBinary("10.20.35-quantal-amd64") err = s.rawMachine.SetAgentVersion(vers) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() }
func (s *loggerSuite) TestWatchLoggingConfig(c *gc.C) { watcher, err := s.logger.WatchLoggingConfig(s.rawMachine.Tag()) c.Assert(err, jc.ErrorIsNil) wc := watchertest.NewNotifyWatcherC(c, watcher, s.BackingState.StartSync) defer wc.AssertStops() // Initial event wc.AssertOneChange() loggingConfig := "<root>=WARN;juju.log.test=DEBUG" s.setLoggingConfig(c, loggingConfig) // One change noticing the new version wc.AssertOneChange() // Setting the version to the same value doesn't trigger a change s.setLoggingConfig(c, loggingConfig) wc.AssertNoChange() loggingConfig = loggingConfig + ";wibble=DEBUG" s.setLoggingConfig(c, loggingConfig) wc.AssertOneChange() }
func (s *serviceSuite) TestWatch(c *gc.C) { c.Assert(s.apiService.Life(), gc.Equals, params.Alive) w, err := s.apiService.Watch() c.Assert(err, jc.ErrorIsNil) wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync) defer wc.AssertStops() // Initial event. wc.AssertOneChange() // Change something and check it's detected. err = s.wordpressService.SetExposed() c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Destroy the service and check it's detected. err = s.wordpressService.Destroy() c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() }
func (s *unitSuite) TestWatch(c *gc.C) { c.Assert(s.apiUnit.Life(), gc.Equals, params.Alive) w, err := s.apiUnit.Watch() c.Assert(err, jc.ErrorIsNil) wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync) defer wc.AssertStops() // Initial event. wc.AssertOneChange() // Change something other than the lifecycle and make sure it's // not detected. err = s.apiUnit.SetAgentStatus(status.Idle, "not really", nil) c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() // Make the unit dead and check it's detected. err = s.apiUnit.EnsureDead() c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() }
func (s *APIAddresserTests) TestWatchAPIHostPorts(c *gc.C) { expectServerAddrs := [][]network.HostPort{ network.NewHostPorts(1234, "0.1.2.3"), } err := s.state.SetAPIHostPorts(expectServerAddrs) c.Assert(err, jc.ErrorIsNil) w, err := s.facade.WatchAPIHostPorts() c.Assert(err, jc.ErrorIsNil) wc := watchertest.NewNotifyWatcherC(c, w, s.state.StartSync) defer wc.AssertStops() // Initial event. wc.AssertOneChange() // Change the state addresses and check that we get a notification expectServerAddrs[0][0].Value = "0.1.99.99" err = s.state.SetAPIHostPorts(expectServerAddrs) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() }
func (s *machinerSuite) TestWatch(c *gc.C) { machine, err := s.machiner.Machine(names.NewMachineTag("1")) c.Assert(err, jc.ErrorIsNil) c.Assert(machine.Life(), gc.Equals, params.Alive) w, err := machine.Watch() c.Assert(err, jc.ErrorIsNil) wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync) defer wc.AssertStops() // Initial event. wc.AssertOneChange() // Change something other than the lifecycle and make sure it's // not detected. err = machine.SetStatus(status.Started, "not really", nil) c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() // Make the machine dead and check it's detected. err = machine.EnsureDead() c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() }
func (s *networkerSuite) TestWatchInterfaces(c *gc.C) { // Read dynamically generated document Ids. ifaces, err := s.machine.NetworkInterfaces() c.Assert(err, jc.ErrorIsNil) c.Assert(ifaces, gc.HasLen, 5) // Start network interface watcher. w, err := s.networker.WatchInterfaces(names.NewMachineTag("0")) wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync) defer wc.AssertStops() wc.AssertOneChange() // Disable the first interface. err = ifaces[0].Disable() c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Disable the first interface again, should not report. err = ifaces[0].Disable() c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() // Enable the first interface. err = ifaces[0].Enable() c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Enable the first interface again, should not report. err = ifaces[0].Enable() c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() // Remove the network interface. err = ifaces[0].Remove() c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Add the new interface. _, err = s.machine.AddNetworkInterface(state.NetworkInterfaceInfo{ MACAddress: "aa:bb:cc:dd:ee:f3", InterfaceName: "eth3", NetworkName: "net2", }) c.Assert(err, jc.ErrorIsNil) wc.AssertOneChange() // Add the new interface on the container, should not report. _, err = s.container.AddNetworkInterface(state.NetworkInterfaceInfo{ MACAddress: "aa:bb:cc:dd:ee:e3", InterfaceName: "eth3", NetworkName: "net2", }) c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() // Read dynamically generated document Ids. containerIfaces, err := s.container.NetworkInterfaces() c.Assert(err, jc.ErrorIsNil) c.Assert(containerIfaces, gc.HasLen, 4) // Disable the first interface on the second machine, should not report. err = containerIfaces[0].Disable() c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() // Remove the network interface on the second machine, should not report. err = containerIfaces[0].Remove() c.Assert(err, jc.ErrorIsNil) wc.AssertNoChange() }