1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
11
"github.com/juju/errors"
12
jc "github.com/juju/testing/checkers"
13
gc "gopkg.in/check.v1"
15
"github.com/juju/juju/testing"
18
type FlagsSuite struct {
19
testing.FakeJujuXDGDataHomeSuite
22
var _ = gc.Suite(&FlagsSuite{})
24
func (*FlagsSuite) TestConfigFlagSet(c *gc.C) {
26
c.Assert(f.Set("a.yaml"), jc.ErrorIsNil)
27
assertConfigFlag(c, f, []string{"a.yaml"}, nil)
28
c.Assert(f.Set("b.yaml"), jc.ErrorIsNil)
29
assertConfigFlag(c, f, []string{"a.yaml", "b.yaml"}, nil)
30
c.Assert(f.Set("k1=v1"), jc.ErrorIsNil)
31
assertConfigFlag(c, f, []string{"a.yaml", "b.yaml"}, map[string]interface{}{"k1": "v1"})
32
c.Assert(f.Set("k1==v2"), jc.ErrorIsNil)
33
assertConfigFlag(c, f, []string{"a.yaml", "b.yaml"}, map[string]interface{}{"k1": "=v2"})
34
c.Assert(f.Set("k2=3"), jc.ErrorIsNil)
35
assertConfigFlag(c, f, []string{"a.yaml", "b.yaml"}, map[string]interface{}{"k1": "=v2", "k2": 3})
38
func (*FlagsSuite) TestConfigFlagSetErrors(c *gc.C) {
40
c.Assert(f.Set(""), gc.ErrorMatches, "empty string not valid")
41
c.Assert(f.Set("x=!"), gc.ErrorMatches, "yaml: did not find URI escaped octet")
44
func (*FlagsSuite) TestConfigFlagString(c *gc.C) {
46
c.Assert(f.String(), gc.Equals, "")
47
f.files = append(f.files, "a.yaml")
48
c.Assert(f.String(), gc.Equals, "a.yaml")
49
f.files = append(f.files, "b.yaml")
50
c.Assert(f.String(), gc.Equals, "a.yaml b.yaml")
51
f.files = append(f.files, "x=y")
52
c.Assert(f.String(), gc.Equals, "a.yaml b.yaml x=y")
53
f.files = append(f.files, "zz=y")
54
c.Assert(f.String(), gc.Equals, "a.yaml b.yaml x=y zz=y")
57
func (*FlagsSuite) TestConfigFlagReadAttrs(c *gc.C) {
59
configFile1 := filepath.Join(tmpdir, "config-1.yaml")
60
configFile2 := filepath.Join(tmpdir, "config-2.yaml")
61
err := ioutil.WriteFile(configFile1, []byte(`over: "'n'out"`+"\n"), 0644)
62
c.Assert(err, jc.ErrorIsNil)
63
err = ioutil.WriteFile(configFile2, []byte(`over: "'n'under"`+"\n"), 0644)
64
c.Assert(err, jc.ErrorIsNil)
67
assertConfigFlagReadAttrs(c, f, map[string]interface{}{})
68
f.files = append(f.files, configFile1)
69
assertConfigFlagReadAttrs(c, f, map[string]interface{}{"over": "'n'out"})
70
f.files = append(f.files, configFile2)
71
assertConfigFlagReadAttrs(c, f, map[string]interface{}{"over": "'n'under"})
72
f.attrs = map[string]interface{}{"over": "ridden"}
73
assertConfigFlagReadAttrs(c, f, map[string]interface{}{"over": "ridden"})
76
func (*FlagsSuite) TestConfigFlagReadAttrsErrors(c *gc.C) {
78
configFile := filepath.Join(tmpdir, "config.yaml")
81
f.files = append(f.files, configFile)
82
ctx := testing.Context(c)
83
attrs, err := f.ReadAttrs(ctx)
84
c.Assert(errors.Cause(err), jc.Satisfies, os.IsNotExist)
85
c.Assert(attrs, gc.IsNil)
88
func assertConfigFlag(c *gc.C, f configFlag, files []string, attrs map[string]interface{}) {
89
c.Assert(f.files, jc.DeepEquals, files)
90
c.Assert(f.attrs, jc.DeepEquals, attrs)
93
func assertConfigFlagReadAttrs(c *gc.C, f configFlag, expect map[string]interface{}) {
94
ctx := testing.Context(c)
95
attrs, err := f.ReadAttrs(ctx)
96
c.Assert(err, jc.ErrorIsNil)
97
c.Assert(attrs, jc.DeepEquals, expect)