github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/worker/uniter/tools_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package uniter_test 5 6 import ( 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 "time" 11 12 gc "launchpad.net/gocheck" 13 14 "github.com/juju/juju/agent/tools" 15 "github.com/juju/juju/version" 16 "github.com/juju/juju/worker/uniter" 17 "github.com/juju/juju/worker/uniter/jujuc" 18 ) 19 20 type ToolsSuite struct { 21 dataDir, toolsDir string 22 } 23 24 var _ = gc.Suite(&ToolsSuite{}) 25 26 func (s *ToolsSuite) SetUpTest(c *gc.C) { 27 s.dataDir = c.MkDir() 28 s.toolsDir = tools.SharedToolsDir(s.dataDir, version.Current) 29 err := os.MkdirAll(s.toolsDir, 0755) 30 c.Assert(err, gc.IsNil) 31 err = os.Symlink(s.toolsDir, tools.ToolsDir(s.dataDir, "unit-u-123")) 32 c.Assert(err, gc.IsNil) 33 } 34 35 func (s *ToolsSuite) TestEnsureJujucSymlinks(c *gc.C) { 36 jujudPath := filepath.Join(s.toolsDir, "jujud") 37 err := ioutil.WriteFile(jujudPath, []byte("assume sane"), 0755) 38 c.Assert(err, gc.IsNil) 39 40 assertLink := func(path string) time.Time { 41 target, err := os.Readlink(path) 42 c.Assert(err, gc.IsNil) 43 c.Assert(target, gc.Equals, "./jujud") 44 fi, err := os.Lstat(path) 45 c.Assert(err, gc.IsNil) 46 return fi.ModTime() 47 } 48 49 // Check that EnsureJujucSymlinks writes appropriate symlinks. 50 err = uniter.EnsureJujucSymlinks(s.toolsDir) 51 c.Assert(err, gc.IsNil) 52 mtimes := map[string]time.Time{} 53 for _, name := range jujuc.CommandNames() { 54 tool := filepath.Join(s.toolsDir, name) 55 mtimes[tool] = assertLink(tool) 56 } 57 58 // Check that EnsureJujucSymlinks doesn't overwrite things that don't need to be. 59 err = uniter.EnsureJujucSymlinks(s.toolsDir) 60 c.Assert(err, gc.IsNil) 61 for tool, mtime := range mtimes { 62 c.Assert(assertLink(tool), gc.Equals, mtime) 63 } 64 } 65 66 func (s *ToolsSuite) TestEnsureJujucSymlinksBadDir(c *gc.C) { 67 err := uniter.EnsureJujucSymlinks(filepath.Join(c.MkDir(), "noexist")) 68 c.Assert(err, gc.ErrorMatches, "cannot initialize hook commands in .*: no such file or directory") 69 }