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 }