github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/api/firewaller/state_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package firewaller_test
     5  
     6  import (
     7  	gc "launchpad.net/gocheck"
     8  
     9  	"launchpad.net/juju-core/environs/config"
    10  	"launchpad.net/juju-core/instance"
    11  	"launchpad.net/juju-core/state"
    12  	statetesting "launchpad.net/juju-core/state/testing"
    13  	jc "launchpad.net/juju-core/testing/checkers"
    14  )
    15  
    16  type stateSuite struct {
    17  	firewallerSuite
    18  }
    19  
    20  var _ = gc.Suite(&stateSuite{})
    21  
    22  func (s *stateSuite) SetUpTest(c *gc.C) {
    23  	s.firewallerSuite.SetUpTest(c)
    24  }
    25  
    26  func (s *stateSuite) TearDownTest(c *gc.C) {
    27  	s.firewallerSuite.TearDownTest(c)
    28  }
    29  
    30  func (s *stateSuite) TestWatchEnvironMachines(c *gc.C) {
    31  	w, err := s.firewaller.WatchEnvironMachines()
    32  	c.Assert(err, gc.IsNil)
    33  	defer statetesting.AssertStop(c, w)
    34  	wc := statetesting.NewStringsWatcherC(c, s.BackingState, w)
    35  
    36  	// Initial event.
    37  	wc.AssertChange(s.machines[0].Id(), s.machines[1].Id(), s.machines[2].Id())
    38  
    39  	// Add another machine make sure they are detected.
    40  	otherMachine, err := s.State.AddMachine("quantal", state.JobHostUnits)
    41  	c.Assert(err, gc.IsNil)
    42  	wc.AssertChange(otherMachine.Id())
    43  
    44  	// Change the life cycle of last machine.
    45  	err = otherMachine.EnsureDead()
    46  	c.Assert(err, gc.IsNil)
    47  	wc.AssertChange(otherMachine.Id())
    48  
    49  	// Add a container and make sure it's not detected.
    50  	template := state.MachineTemplate{
    51  		Series: "quantal",
    52  		Jobs:   []state.MachineJob{state.JobHostUnits},
    53  	}
    54  	_, err = s.State.AddMachineInsideMachine(template, s.machines[0].Id(), instance.LXC)
    55  	c.Assert(err, gc.IsNil)
    56  	wc.AssertNoChange()
    57  
    58  	statetesting.AssertStop(c, w)
    59  	wc.AssertClosed()
    60  }
    61  
    62  func (s *stateSuite) TestEnvironConfig(c *gc.C) {
    63  	envConfig, err := s.State.EnvironConfig()
    64  	c.Assert(err, gc.IsNil)
    65  
    66  	conf, err := s.firewaller.EnvironConfig()
    67  	c.Assert(err, gc.IsNil)
    68  	c.Assert(conf, jc.DeepEquals, envConfig)
    69  }
    70  
    71  func (s *stateSuite) TestWatchForEnvironConfigChanges(c *gc.C) {
    72  	envConfig, err := s.State.EnvironConfig()
    73  	c.Assert(err, gc.IsNil)
    74  
    75  	w, err := s.firewaller.WatchForEnvironConfigChanges()
    76  	c.Assert(err, gc.IsNil)
    77  	defer statetesting.AssertStop(c, w)
    78  	wc := statetesting.NewNotifyWatcherC(c, s.BackingState, w)
    79  
    80  	// Initial event.
    81  	wc.AssertOneChange()
    82  
    83  	// Change the environment configuration, check it's detected.
    84  	attrs := envConfig.AllAttrs()
    85  	attrs["type"] = "blah"
    86  	newConfig, err := config.New(config.NoDefaults, attrs)
    87  	c.Assert(err, gc.IsNil)
    88  	err = s.State.SetEnvironConfig(newConfig, envConfig)
    89  	c.Assert(err, gc.IsNil)
    90  	wc.AssertOneChange()
    91  
    92  	// Change it back to the original config.
    93  	err = s.State.SetEnvironConfig(envConfig, newConfig)
    94  	c.Assert(err, gc.IsNil)
    95  	wc.AssertOneChange()
    96  
    97  	statetesting.AssertStop(c, w)
    98  	wc.AssertClosed()
    99  }