5
. "launchpad.net/gocheck"
6
"launchpad.net/juju-core/environs/agent"
7
"launchpad.net/juju-core/version"
8
"launchpad.net/juju-core/worker/uniter"
9
"launchpad.net/juju-core/worker/uniter/jujuc"
15
type ToolsSuite struct {
16
dataDir, toolsDir string
19
var _ = Suite(&ToolsSuite{})
21
func (s *ToolsSuite) SetUpTest(c *C) {
23
s.toolsDir = agent.SharedToolsDir(s.dataDir, version.Current)
24
err := os.MkdirAll(s.toolsDir, 0755)
26
err = os.Symlink(s.toolsDir, agent.ToolsDir(s.dataDir, "unit-u-123"))
30
func (s *ToolsSuite) TestEnsureJujucSymlinks(c *C) {
31
jujudPath := filepath.Join(s.toolsDir, "jujud")
32
err := ioutil.WriteFile(jujudPath, []byte("assume sane"), 0755)
35
assertLink := func(path string) time.Time {
36
target, err := os.Readlink(path)
38
c.Assert(target, Equals, "./jujud")
39
fi, err := os.Lstat(path)
44
// Check that EnsureJujucSymlinks writes appropriate symlinks.
45
err = uniter.EnsureJujucSymlinks(s.toolsDir)
47
mtimes := map[string]time.Time{}
48
for _, name := range jujuc.CommandNames() {
49
tool := filepath.Join(s.toolsDir, name)
50
mtimes[tool] = assertLink(tool)
53
// Check that EnsureJujucSymlinks doesn't overwrite things that don't need to be.
54
err = uniter.EnsureJujucSymlinks(s.toolsDir)
56
for tool, mtime := range mtimes {
57
c.Assert(assertLink(tool), Equals, mtime)
61
func (s *ToolsSuite) TestEnsureJujucSymlinksBadDir(c *C) {
62
err := uniter.EnsureJujucSymlinks(filepath.Join(c.MkDir(), "noexist"))
63
c.Assert(err, ErrorMatches, "cannot initialize hook commands in .*: no such file or directory")