1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
jc "github.com/juju/testing/checkers"
10
"github.com/juju/juju/container/kvm"
11
"github.com/juju/juju/container/kvm/mock"
12
"github.com/juju/juju/testing"
15
type MockSuite struct {
19
var _ = gc.Suite(&MockSuite{})
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)
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)
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)
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")
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)
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")
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)
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)
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)
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)
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)
128
func (*MockSuite) TestEvents(c *gc.C) {
129
factory := mock.MockFactory()
130
listener := make(chan mock.Event, 5)
131
factory.AddListener(listener)
133
first := factory.New("first")
134
second := factory.New("second")
135
first.Start(kvm.StartParams{})
136
second.Start(kvm.StartParams{})
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"})
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)
153
container := factory.New("container")
154
container.Start(kvm.StartParams{})
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"})