~sinzui/ubuntu/wily/juju-core/wily-1.24.7

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/cmd/jujud/reboot/reboot_nix_test.go

  • Committer: Package Import Robot
  • Author(s): Oleg Strikov
  • Date: 2015-03-26 15:54:39 UTC
  • mfrom: (1.1.32)
  • Revision ID: package-import@ubuntu.com-20150326155439-ot7bwwyoomq13btm
Tags: 1.22.0-0ubuntu1
* New upstream release (LP: #1416051).
* d/patches/fix-detect-new-release.patch: Added upstream patch to redeem
  the ability to handle future Ubuntu releases (LP: #1427879, #1434092).
* d/tests/fake-future.sh: New ability to generate fake /etc/os-release.
* d/copyright: Updated to reflect changes in the codebase.
* d/control:
  - Change build dependency from gccgo to gccgo-go.
  - Use either cloud-image-utils or cloud-utils as dependency for juju-local
    because cloud-image-utils is not available on precise.
  - Compliance to Debian Policy 3.9.6 was declared.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// +build !windows
 
2
 
 
3
package reboot_test
 
4
 
 
5
import (
 
6
        "time"
 
7
 
 
8
        "github.com/juju/testing"
 
9
        jc "github.com/juju/testing/checkers"
 
10
        ft "github.com/juju/testing/filetesting"
 
11
        gc "gopkg.in/check.v1"
 
12
 
 
13
        "github.com/juju/juju/apiserver/params"
 
14
        "github.com/juju/juju/cmd/jujud/reboot"
 
15
)
 
16
 
 
17
// on linux we use the "at" command to schedule a reboot
 
18
var rebootBin = "at"
 
19
 
 
20
var expectedRebootScript = `#!/bin/bash
 
21
sleep 15
 
22
shutdown -r now`
 
23
 
 
24
var expectedShutdownScript = `#!/bin/bash
 
25
sleep 15
 
26
shutdown -h now`
 
27
 
 
28
var lxcLsScript = `#!/bin/bash
 
29
echo juju-machine-1-lxc-0
 
30
`
 
31
 
 
32
var lxcInfoScriptMissbehave = `#!/bin/bash
 
33
echo '
 
34
Name:           juju-machine-1-lxc-0
 
35
State:          RUNNING
 
36
PID:            13955
 
37
IP:             192.168.200.85
 
38
CPU use:        186.37 seconds
 
39
BlkIO use:      175.29 MiB
 
40
Memory use:     202.45 MiB
 
41
Link:           vethXUAOWB
 
42
 TX bytes:      516.81 KiB
 
43
 RX bytes:      12.31 MiB
 
44
 Total bytes:   12.82 MiB
 
45
'
 
46
`
 
47
 
 
48
var lxcInfoScript = `#!/bin/bash
 
49
LINE_COUNT=$(wc -l "$TEMP/empty-lxc-response" 2>/dev/null | awk '{print $1}')
 
50
RAN=${LINE_COUNT:-0}
 
51
 
 
52
if [ "$RAN" -ge 3 ]
 
53
then
 
54
    echo ""
 
55
else
 
56
    echo '
 
57
Name:           juju-machine-1-lxc-0
 
58
State:          RUNNING
 
59
PID:            13955
 
60
IP:             192.168.200.85
 
61
CPU use:        186.37 seconds
 
62
BlkIO use:      175.29 MiB
 
63
Memory use:     202.45 MiB
 
64
Link:           vethXUAOWB
 
65
 TX bytes:      516.81 KiB
 
66
 RX bytes:      12.31 MiB
 
67
 Total bytes:   12.82 MiB
 
68
'
 
69
    echo 1 >> "$TEMP/empty-lxc-response"
 
70
fi
 
71
`
 
72
 
 
73
func (s *RebootSuite) rebootCommandParams(c *gc.C) []string {
 
74
        return []string{
 
75
                "-f",
 
76
                s.rebootScript(c),
 
77
                "now",
 
78
        }
 
79
}
 
80
 
 
81
func (s *RebootSuite) shutdownCommandParams(c *gc.C) []string {
 
82
        return []string{
 
83
                "-f",
 
84
                s.rebootScript(c),
 
85
                "now",
 
86
        }
 
87
}
 
88
 
 
89
func (s *RebootSuite) TestRebootWithContainers(c *gc.C) {
 
90
        testing.PatchExecutable(c, s, "lxc-ls", lxcLsScript)
 
91
        testing.PatchExecutable(c, s, "lxc-info", lxcInfoScript)
 
92
        expectedRebootParams := s.rebootCommandParams(c)
 
93
 
 
94
        // Timeout after 5 seconds
 
95
        s.PatchValue(reboot.Timeout, time.Duration(5*time.Second))
 
96
        w, err := reboot.NewRebootWaiter(s.st, s.acfg)
 
97
        c.Assert(err, jc.ErrorIsNil)
 
98
 
 
99
        err = w.ExecuteReboot(params.ShouldReboot)
 
100
        c.Assert(err, jc.ErrorIsNil)
 
101
        testing.AssertEchoArgs(c, rebootBin, expectedRebootParams...)
 
102
        ft.File{s.rebootScriptName, expectedRebootScript, 0755}.Check(c, s.tmpDir)
 
103
}
 
104
 
 
105
func (s *RebootSuite) TestRebootWithMissbehavingContainers(c *gc.C) {
 
106
        testing.PatchExecutable(c, s, "lxc-ls", lxcLsScript)
 
107
        testing.PatchExecutable(c, s, "lxc-info", lxcInfoScriptMissbehave)
 
108
        expectedRebootParams := s.rebootCommandParams(c)
 
109
 
 
110
        // Timeout after 5 seconds
 
111
        s.PatchValue(reboot.Timeout, time.Duration(5*time.Second))
 
112
        w, err := reboot.NewRebootWaiter(s.st, s.acfg)
 
113
        c.Assert(err, jc.ErrorIsNil)
 
114
 
 
115
        err = w.ExecuteReboot(params.ShouldReboot)
 
116
        c.Assert(err, jc.ErrorIsNil)
 
117
        testing.AssertEchoArgs(c, rebootBin, expectedRebootParams...)
 
118
        ft.File{s.rebootScriptName, expectedRebootScript, 0755}.Check(c, s.tmpDir)
 
119
}
 
120
 
 
121
func (s *RebootSuite) TestRebootNoContainers(c *gc.C) {
 
122
        w, err := reboot.NewRebootWaiter(s.st, s.acfg)
 
123
        c.Assert(err, jc.ErrorIsNil)
 
124
        expectedRebootParams := s.rebootCommandParams(c)
 
125
 
 
126
        err = w.ExecuteReboot(params.ShouldReboot)
 
127
        c.Assert(err, jc.ErrorIsNil)
 
128
        testing.AssertEchoArgs(c, rebootBin, expectedRebootParams...)
 
129
        ft.File{s.rebootScriptName, expectedRebootScript, 0755}.Check(c, s.tmpDir)
 
130
}
 
131
 
 
132
func (s *RebootSuite) TestShutdownNoContainers(c *gc.C) {
 
133
        w, err := reboot.NewRebootWaiter(s.st, s.acfg)
 
134
        c.Assert(err, jc.ErrorIsNil)
 
135
        expectedShutdownParams := s.shutdownCommandParams(c)
 
136
 
 
137
        err = w.ExecuteReboot(params.ShouldShutdown)
 
138
        c.Assert(err, jc.ErrorIsNil)
 
139
        testing.AssertEchoArgs(c, rebootBin, expectedShutdownParams...)
 
140
        ft.File{s.rebootScriptName, expectedShutdownScript, 0755}.Check(c, s.tmpDir)
 
141
}