1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
11
"github.com/juju/errors"
12
"github.com/juju/testing"
13
jc "github.com/juju/testing/checkers"
14
gc "gopkg.in/check.v1"
15
"gopkg.in/juju/charm.v6-unstable"
17
"github.com/juju/juju/payload"
20
type registerSuite struct {
21
testing.IsolationSuite
24
var _ = gc.Suite(®isterSuite{})
26
func (registerSuite) TestInitNilArgs(c *gc.C) {
29
c.Assert(err, gc.NotNil)
32
func (registerSuite) TestInitTooFewArgs(c *gc.C) {
34
err := r.Init([]string{"foo", "bar"})
35
c.Assert(err, gc.NotNil)
38
func (registerSuite) TestInit(c *gc.C) {
40
err := r.Init([]string{"type", "class", "id"})
41
c.Assert(err, jc.ErrorIsNil)
42
c.Assert(r.typ, gc.Equals, "type")
43
c.Assert(r.class, gc.Equals, "class")
44
c.Assert(r.id, gc.Equals, "id")
45
c.Assert(r.labels, gc.HasLen, 0)
48
func (registerSuite) TestInitWithLabels(c *gc.C) {
50
err := r.Init([]string{"type", "class", "id", "tag1", "tag 2"})
51
c.Assert(err, jc.ErrorIsNil)
52
c.Assert(r.typ, gc.Equals, "type")
53
c.Assert(r.class, gc.Equals, "class")
54
c.Assert(r.id, gc.Equals, "id")
55
c.Assert(r.labels, gc.DeepEquals, []string{"tag1", "tag 2"})
58
func (registerSuite) TestRun(c *gc.C) {
59
f := &stubRegisterContext{}
60
r := RegisterCmd{hctx: f}
61
err := r.Init([]string{"type", "class", "id", "tag1", "tag 2"})
62
c.Assert(err, jc.ErrorIsNil)
64
ctx := setupMetadata(c)
66
c.Assert(err, jc.ErrorIsNil)
67
c.Check(f.flushed, jc.IsTrue)
68
c.Check(f.payload, jc.DeepEquals, payload.Payload{
69
PayloadClass: charm.PayloadClass{
74
Status: payload.StateRunning,
75
Labels: []string{"tag1", "tag 2"},
76
Unit: "a-application/0",
78
// TODO (natefinch): we need to do something with the labels
81
func (registerSuite) TestRunUnknownClass(c *gc.C) {
82
f := &stubRegisterContext{}
83
r := RegisterCmd{hctx: f}
84
err := r.Init([]string{"type", "badclass", "id"})
85
c.Assert(err, jc.ErrorIsNil)
87
ctx := setupMetadata(c)
89
c.Assert(err, gc.ErrorMatches, "payload \"badclass\" not found in metadata.yaml")
92
func (registerSuite) TestRunUnknownType(c *gc.C) {
93
f := &stubRegisterContext{}
94
r := RegisterCmd{hctx: f}
95
err := r.Init([]string{"badtype", "class", "id"})
96
c.Assert(err, jc.ErrorIsNil)
98
ctx := setupMetadata(c)
100
c.Assert(err, gc.ErrorMatches, "incorrect type \"badtype\" for payload \"class\", expected \"type\"")
103
func (registerSuite) TestRunTrackErr(c *gc.C) {
104
f := &stubRegisterContext{trackerr: errors.Errorf("boo")}
105
r := RegisterCmd{hctx: f}
106
err := r.Init([]string{"type", "class", "id", "tag1", "tag 2"})
107
c.Assert(err, jc.ErrorIsNil)
109
ctx := setupMetadata(c)
111
c.Assert(err, gc.ErrorMatches, "boo")
114
func (registerSuite) TestRunFlushErr(c *gc.C) {
115
f := &stubRegisterContext{flusherr: errors.Errorf("boo")}
116
r := RegisterCmd{hctx: f}
117
err := r.Init([]string{"type", "class", "id", "tag1", "tag 2"})
118
c.Assert(err, jc.ErrorIsNil)
120
ctx := setupMetadata(c)
122
c.Assert(err, gc.ErrorMatches, "boo")
125
type stubRegisterContext struct {
127
payload payload.Payload
133
func (f *stubRegisterContext) Track(pl payload.Payload) error {
138
func (f *stubRegisterContext) Flush() error {
143
func setupMetadata(c *gc.C) *cmd.Context {
145
path := filepath.Join(dir, "metadata.yaml")
146
ioutil.WriteFile(path, []byte(metadataContents), 0660)
147
return &cmd.Context{Dir: dir}
150
const metadataContents = `name: ducksay
151
summary: Testing charm payload management
152
maintainer: juju@canonical.com <Juju>
159
lifecycle: ["restart"]