github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/container/kvm/mock/mock-kvm_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package mock_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/container/kvm"
    11  	"github.com/juju/juju/container/kvm/mock"
    12  	"github.com/juju/juju/testing"
    13  )
    14  
    15  type MockSuite struct {
    16  	testing.BaseSuite
    17  }
    18  
    19  var _ = gc.Suite(&MockSuite{})
    20  
    21  func (*MockSuite) TestListInitiallyEmpty(c *gc.C) {
    22  	factory := mock.MockFactory()
    23  	containers, err := factory.List()
    24  	c.Assert(err, jc.ErrorIsNil)
    25  	c.Assert(containers, gc.HasLen, 0)
    26  }
    27  
    28  func (*MockSuite) TestNewContainersInList(c *gc.C) {
    29  	factory := mock.MockFactory()
    30  	added := []kvm.Container{}
    31  	added = append(added, factory.New("first"))
    32  	added = append(added, factory.New("second"))
    33  	containers, err := factory.List()
    34  	c.Assert(err, jc.ErrorIsNil)
    35  	c.Assert(containers, jc.SameContents, added)
    36  }
    37  
    38  func (*MockSuite) TestContainers(c *gc.C) {
    39  	factory := mock.MockFactory()
    40  	container := factory.New("first")
    41  	c.Assert(container.Name(), gc.Equals, "first")
    42  	c.Assert(container.IsRunning(), jc.IsFalse)
    43  }
    44  
    45  func (*MockSuite) TestContainerStoppingStoppedErrors(c *gc.C) {
    46  	factory := mock.MockFactory()
    47  	container := factory.New("first")
    48  	err := container.Stop()
    49  	c.Assert(err, gc.ErrorMatches, "container is not running")
    50  }
    51  
    52  func (*MockSuite) TestContainerStartStarts(c *gc.C) {
    53  	factory := mock.MockFactory()
    54  	container := factory.New("first")
    55  	err := container.Start(kvm.StartParams{})
    56  	c.Assert(err, jc.ErrorIsNil)
    57  	c.Assert(container.IsRunning(), jc.IsTrue)
    58  }
    59  
    60  func (*MockSuite) TestContainerStartingRunningErrors(c *gc.C) {
    61  	factory := mock.MockFactory()
    62  	container := factory.New("first")
    63  	err := container.Start(kvm.StartParams{})
    64  	c.Assert(err, jc.ErrorIsNil)
    65  	err = container.Start(kvm.StartParams{})
    66  	c.Assert(err, gc.ErrorMatches, "container is already running")
    67  }
    68  
    69  func (*MockSuite) TestContainerStoppingRunningStops(c *gc.C) {
    70  	factory := mock.MockFactory()
    71  	container := factory.New("first")
    72  	err := container.Start(kvm.StartParams{})
    73  	c.Assert(err, jc.ErrorIsNil)
    74  	err = container.Stop()
    75  	c.Assert(err, jc.ErrorIsNil)
    76  	c.Assert(container.IsRunning(), jc.IsFalse)
    77  }
    78  
    79  func (*MockSuite) TestAddListener(c *gc.C) {
    80  	listener := make(chan mock.Event)
    81  	factory := mock.MockFactory()
    82  	factory.AddListener(listener)
    83  	c.Assert(factory.HasListener(listener), jc.IsTrue)
    84  }
    85  
    86  func (*MockSuite) TestRemoveFirstListener(c *gc.C) {
    87  	factory := mock.MockFactory()
    88  	first := make(chan mock.Event)
    89  	factory.AddListener(first)
    90  	second := make(chan mock.Event)
    91  	factory.AddListener(second)
    92  	third := make(chan mock.Event)
    93  	factory.AddListener(third)
    94  	factory.RemoveListener(first)
    95  	c.Assert(factory.HasListener(first), jc.IsFalse)
    96  	c.Assert(factory.HasListener(second), jc.IsTrue)
    97  	c.Assert(factory.HasListener(third), jc.IsTrue)
    98  }
    99  
   100  func (*MockSuite) TestRemoveMiddleListener(c *gc.C) {
   101  	factory := mock.MockFactory()
   102  	first := make(chan mock.Event)
   103  	factory.AddListener(first)
   104  	second := make(chan mock.Event)
   105  	factory.AddListener(second)
   106  	third := make(chan mock.Event)
   107  	factory.AddListener(third)
   108  	factory.RemoveListener(second)
   109  	c.Assert(factory.HasListener(first), jc.IsTrue)
   110  	c.Assert(factory.HasListener(second), jc.IsFalse)
   111  	c.Assert(factory.HasListener(third), jc.IsTrue)
   112  }
   113  
   114  func (*MockSuite) TestRemoveLastListener(c *gc.C) {
   115  	factory := mock.MockFactory()
   116  	first := make(chan mock.Event)
   117  	factory.AddListener(first)
   118  	second := make(chan mock.Event)
   119  	factory.AddListener(second)
   120  	third := make(chan mock.Event)
   121  	factory.AddListener(third)
   122  	factory.RemoveListener(third)
   123  	c.Assert(factory.HasListener(first), jc.IsTrue)
   124  	c.Assert(factory.HasListener(second), jc.IsTrue)
   125  	c.Assert(factory.HasListener(third), jc.IsFalse)
   126  }
   127  
   128  func (*MockSuite) TestEvents(c *gc.C) {
   129  	factory := mock.MockFactory()
   130  	listener := make(chan mock.Event, 5)
   131  	factory.AddListener(listener)
   132  
   133  	first := factory.New("first")
   134  	second := factory.New("second")
   135  	first.Start(kvm.StartParams{})
   136  	second.Start(kvm.StartParams{})
   137  	second.Stop()
   138  	first.Stop()
   139  
   140  	c.Assert(<-listener, gc.Equals, mock.Event{mock.Started, "first"})
   141  	c.Assert(<-listener, gc.Equals, mock.Event{mock.Started, "second"})
   142  	c.Assert(<-listener, gc.Equals, mock.Event{mock.Stopped, "second"})
   143  	c.Assert(<-listener, gc.Equals, mock.Event{mock.Stopped, "first"})
   144  }
   145  
   146  func (*MockSuite) TestEventsGoToAllListeners(c *gc.C) {
   147  	factory := mock.MockFactory()
   148  	first := make(chan mock.Event, 5)
   149  	factory.AddListener(first)
   150  	second := make(chan mock.Event, 5)
   151  	factory.AddListener(second)
   152  
   153  	container := factory.New("container")
   154  	container.Start(kvm.StartParams{})
   155  	container.Stop()
   156  
   157  	c.Assert(<-first, gc.Equals, mock.Event{mock.Started, "container"})
   158  	c.Assert(<-second, gc.Equals, mock.Event{mock.Started, "container"})
   159  	c.Assert(<-first, gc.Equals, mock.Event{mock.Stopped, "container"})
   160  	c.Assert(<-second, gc.Equals, mock.Event{mock.Stopped, "container"})
   161  }