OLD | NEW |
1 package charm_test | 1 package charm_test |
2 | 2 |
3 import ( | 3 import ( |
4 "bytes" | 4 "bytes" |
5 "io" | 5 "io" |
6 "io/ioutil" | 6 "io/ioutil" |
7 . "launchpad.net/gocheck" | 7 . "launchpad.net/gocheck" |
8 "launchpad.net/goyaml" | 8 "launchpad.net/goyaml" |
9 "launchpad.net/juju/go/charm" | 9 "launchpad.net/juju/go/charm" |
10 "os" | |
11 "path/filepath" | |
12 "testing" | 10 "testing" |
13 ) | 11 ) |
14 | 12 |
15 func Test(t *testing.T) { | 13 func Test(t *testing.T) { |
16 TestingT(t) | 14 TestingT(t) |
17 } | 15 } |
18 | 16 |
19 type S struct{} | 17 type S struct{} |
20 | 18 |
21 var _ = Suite(&S{}) | 19 var _ = Suite(&S{}) |
22 | 20 |
23 func init() { | 21 func (s *S) SetUpSuite(c *C) {} |
24 » // Bazaar can't hold subtle mode differences, so we enforce | |
25 » // them here to run more interesting checks below. | |
26 » modes := []struct { | |
27 » » path string | |
28 » » mode os.FileMode | |
29 » }{ | |
30 » » {"hooks/install", 0751}, | |
31 » » {"empty", 0750}, | |
32 » » {"src/hello.c", 0614}, | |
33 » } | |
34 » for _, m := range modes { | |
35 » » err := os.Chmod(filepath.Join(repoDir("dummy"), m.path), m.mode) | |
36 » » if err != nil { | |
37 » » » panic(err) | |
38 » » } | |
39 » } | |
40 } | |
41 | 22 |
42 func checkDummy(c *C, f charm.Charm, path string) { | 23 func checkDummy(c *C, f charm.Charm, path string) { |
43 c.Assert(f.Revision(), Equals, 1) | 24 c.Assert(f.Revision(), Equals, 1) |
44 c.Assert(f.Meta().Name, Equals, "dummy") | 25 c.Assert(f.Meta().Name, Equals, "dummy") |
45 c.Assert(f.Config().Options["title"].Default, Equals, "My Title") | 26 c.Assert(f.Config().Options["title"].Default, Equals, "My Title") |
46 switch f := f.(type) { | 27 switch f := f.(type) { |
47 case *charm.Bundle: | 28 case *charm.Bundle: |
48 c.Assert(f.Path, Equals, path) | 29 c.Assert(f.Path, Equals, path) |
49 | 30 |
50 case *charm.Dir: | 31 case *charm.Dir: |
51 c.Assert(f.Path, Equals, path) | 32 c.Assert(f.Path, Equals, path) |
52 if path == repoDir("dummy") { | |
53 break // Don't test original Bazaar content. | |
54 } | |
55 | |
56 info, err := os.Stat(filepath.Join(path, "src", "hello.c")) | |
57 c.Assert(err, IsNil) | |
58 c.Assert(info.Mode()&0777, Equals, os.FileMode(0644)) | |
59 c.Assert(info.Mode()&os.ModeType, Equals, os.FileMode(0)) | |
60 | |
61 info, err = os.Stat(filepath.Join(path, "hooks", "install")) | |
62 c.Assert(err, IsNil) | |
63 c.Assert(info.Mode()&0777, Equals, os.FileMode(0755)) | |
64 c.Assert(info.Mode()&os.ModeType, Equals, os.FileMode(0)) | |
65 | |
66 info, err = os.Stat(filepath.Join(path, "empty")) | |
67 c.Assert(err, IsNil) | |
68 c.Assert(info.Mode()&0777, Equals, os.FileMode(0755)) | |
69 | |
70 target, err := os.Readlink(filepath.Join(path, "hooks", "symlink
")) | |
71 c.Assert(err, IsNil) | |
72 c.Assert(target, Equals, "../target") | |
73 } | 33 } |
74 } | 34 } |
75 | 35 |
76 type YamlHacker map[interface{}]interface{} | 36 type YamlHacker map[interface{}]interface{} |
77 | 37 |
78 func ReadYaml(r io.Reader) YamlHacker { | 38 func ReadYaml(r io.Reader) YamlHacker { |
79 data, err := ioutil.ReadAll(r) | 39 data, err := ioutil.ReadAll(r) |
80 if err != nil { | 40 if err != nil { |
81 panic(err) | 41 panic(err) |
82 } | 42 } |
83 m := make(map[interface{}]interface{}) | 43 m := make(map[interface{}]interface{}) |
84 err = goyaml.Unmarshal(data, m) | 44 err = goyaml.Unmarshal(data, m) |
85 if err != nil { | 45 if err != nil { |
86 panic(err) | 46 panic(err) |
87 } | 47 } |
88 return YamlHacker(m) | 48 return YamlHacker(m) |
89 } | 49 } |
90 | 50 |
91 func (yh YamlHacker) Reader() io.Reader { | 51 func (yh YamlHacker) Reader() io.Reader { |
92 data, err := goyaml.Marshal(yh) | 52 data, err := goyaml.Marshal(yh) |
93 if err != nil { | 53 if err != nil { |
94 panic(err) | 54 panic(err) |
95 } | 55 } |
96 return bytes.NewBuffer(data) | 56 return bytes.NewBuffer(data) |
97 } | 57 } |
OLD | NEW |