Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(1319)

Unified Diff: state/apiserver/state_test.go

Issue 9742044: state/api: Split to multiple files (Closed)
Patch Set: state/api: Split to multiple files Created 11 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « state/apiserver/state.go ('k') | state/apiserver/unit.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: state/apiserver/state_test.go
=== added file 'state/apiserver/state_test.go'
--- state/apiserver/state_test.go 1970-01-01 00:00:00 +0000
+++ state/apiserver/state_test.go 2013-05-24 19:03:39 +0000
@@ -0,0 +1,144 @@
+// Copyright 2012, 2013 Canonical Ltd.
+// Licensed under the AGPLv3, see LICENCE file for details.
+
+package apiserver_test
+
+import (
+ "fmt"
+ . "launchpad.net/gocheck"
+ "launchpad.net/juju-core/environs/config"
+ "launchpad.net/juju-core/state"
+ "time"
+)
+
+func (s *suite) TestStateAllMachines(c *C) {
+ stMachines := make([]*state.Machine, 3)
+ var err error
+ for i := 0; i < len(stMachines); i++ {
+ job := state.JobHostUnits
+ if i == 0 {
+ job = state.JobManageEnviron
+ }
+ stMachines[i], err = s.State.AddMachine("series", job)
+ c.Assert(err, IsNil)
+ setDefaultPassword(c, stMachines[i])
+ }
+ // TODO (dimitern): If we change the permissions for
+ // State.AllMachines to be laxer, change this test accordingly.
+ st := s.openAs(c, stMachines[0].Tag())
+ defer st.Close()
+
+ ids, err := st.AllMachines()
+ c.Assert(err, IsNil)
+ c.Assert(ids, HasLen, 3)
+ for i := 0; i < len(ids); i++ {
+ c.Assert(ids[i].Id(), Equals, fmt.Sprintf("%d", i))
+ }
+
+ err = stMachines[1].EnsureDead()
+ c.Assert(err, IsNil)
+ err = stMachines[1].Remove()
+ c.Assert(err, IsNil)
+
+ ids, err = st.AllMachines()
+ c.Assert(err, IsNil)
+ c.Assert(ids, HasLen, 2)
+ c.Assert(ids[0].Id(), Equals, "0")
+ c.Assert(ids[1].Id(), Equals, "2")
+}
+
+func (s *suite) TestStateWatchMachines(c *C) {
+ stMachines := make([]*state.Machine, 3)
+ var err error
+ for i := range stMachines {
+ job := state.JobHostUnits
+ if i == 0 {
+ job = state.JobManageEnviron
+ }
+ stMachines[i], err = s.State.AddMachine("series", job)
+ c.Assert(err, IsNil)
+ setDefaultPassword(c, stMachines[i])
+ }
+ st := s.openAs(c, stMachines[0].Tag())
+ defer st.Close()
+
+ // Start watching.
+ machinesWatcher := st.WatchMachines()
+
+ // Initial event.
+ ids, ok := chanReadStrings(c, machinesWatcher.Changes(), "machines watcher")
+ c.Assert(ok, Equals, true)
+ c.Assert(ids, DeepEquals, []string{"0", "1", "2"})
+
+ // No subsequent event until something changes.
+ select {
+ case <-machinesWatcher.Changes():
+ c.Fatalf("unexpected value on machines watcher")
+ case <-time.After(20 * time.Millisecond):
+ }
+
+ // Trigger a change.
+ m, err := st.Machine(stMachines[1].Id())
+ c.Assert(err, IsNil)
+ err = m.EnsureDead()
+ c.Assert(err, IsNil)
+
+ // Next event.
+ ids, ok = chanReadStrings(c, machinesWatcher.Changes(), "machines watcher")
+ c.Assert(ok, Equals, true)
+ c.Assert(ids, DeepEquals, []string{"1"})
+
+ // Check the watcher stops cleanly.
+ err = machinesWatcher.Stop()
+ c.Check(err, IsNil)
+
+ _, ok = chanReadStrings(c, machinesWatcher.Changes(), "machines watcher")
+ c.Assert(ok, Equals, false)
+}
+
+func (s *suite) TestStateWatchEnvironConfig(c *C) {
+ stm, err := s.State.AddMachine("series", state.JobManageEnviron)
+ c.Assert(err, IsNil)
+ setDefaultPassword(c, stm)
+
+ st := s.openAs(c, stm.Tag())
+ defer st.Close()
+
+ currentConfig, err := s.State.EnvironConfig()
+ c.Assert(err, IsNil)
+
+ // Start watching.
+ envConfigWatcher := st.WatchEnvironConfig()
+
+ // Initial event.
+ envConfig, ok := chanReadConfig(c, envConfigWatcher.Changes(), "environ config watcher")
+ c.Assert(ok, Equals, true)
+ c.Assert(envConfig, DeepEquals, currentConfig)
+
+ // No subsequent event until something changes.
+ select {
+ case <-envConfigWatcher.Changes():
+ c.Fatalf("unexpected value on environ config watcher")
+ case <-time.After(200 * time.Millisecond):
+ }
+
+ // Trigger a change.
+ attrs := currentConfig.AllAttrs()
+ attrs["foo"] = "bar"
+ currentConfig, err = config.New(attrs)
+ c.Assert(err, IsNil)
+ err = s.State.SetEnvironConfig(currentConfig)
+ c.Assert(err, IsNil)
+
+ // Next event.
+ envConfig, ok = chanReadConfig(c, envConfigWatcher.Changes(), "environ config watcher")
+ c.Assert(ok, Equals, true)
+ c.Assert(envConfig, DeepEquals, currentConfig)
+
+ // Check the watcher stops cleanly.
+ err = envConfigWatcher.Stop()
+ c.Assert(err, IsNil)
+
+ _, ok = chanReadConfig(c, envConfigWatcher.Changes(), "environ config watcher")
+ c.Assert(ok, Equals, false)
+}
« no previous file with comments | « state/apiserver/state.go ('k') | state/apiserver/unit.go » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b