github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/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 "launchpad.net/juju-core/agent/tools" 15 "launchpad.net/juju-core/version" 16 "launchpad.net/juju-core/worker/uniter" 17 "launchpad.net/juju-core/worker/uniter/jujuc" 18 "launchpad.net/juju-core/utils" 19 ) 20 21 type ToolsSuite struct { 22 dataDir, toolsDir string 23 } 24 25 var _ = gc.Suite(&ToolsSuite{}) 26 27 func (s *ToolsSuite) SetUpTest(c *gc.C) { 28 s.dataDir = c.MkDir() 29 s.toolsDir = tools.SharedToolsDir(s.dataDir, version.Current) 30 err := os.MkdirAll(s.toolsDir, 0755) 31 c.Assert(err, gc.IsNil) 32 err = utils.Symlink(s.toolsDir, tools.ToolsDir(s.dataDir, "unit-u-123")) 33 c.Assert(err, gc.IsNil) 34 } 35 36 func (s *ToolsSuite) TestEnsureJujucSymlinks(c *gc.C) { 37 jujudPath := filepath.Join(s.toolsDir, "jujud") 38 err := ioutil.WriteFile(jujudPath, []byte("assume sane"), 0755) 39 c.Assert(err, gc.IsNil) 40 41 assertLink := func(path string) time.Time { 42 target, err := os.Readlink(path) 43 c.Assert(err, gc.IsNil) 44 c.Assert(target, gc.Equals, "./jujud") 45 fi, err := os.Lstat(path) 46 c.Assert(err, gc.IsNil) 47 return fi.ModTime() 48 } 49 50 // Check that EnsureJujucSymlinks writes appropriate symlinks. 51 err = uniter.EnsureJujucSymlinks(s.toolsDir) 52 c.Assert(err, gc.IsNil) 53 mtimes := map[string]time.Time{} 54 for _, name := range jujuc.CommandNames() { 55 tool := filepath.Join(s.toolsDir, name) 56 mtimes[tool] = assertLink(tool) 57 } 58 59 // Check that EnsureJujucSymlinks doesn't overwrite things that don't need to be. 60 err = uniter.EnsureJujucSymlinks(s.toolsDir) 61 c.Assert(err, gc.IsNil) 62 for tool, mtime := range mtimes { 63 c.Assert(assertLink(tool), gc.Equals, mtime) 64 } 65 } 66 67 func (s *ToolsSuite) TestEnsureJujucSymlinksBadDir(c *gc.C) { 68 err := uniter.EnsureJujucSymlinks(filepath.Join(c.MkDir(), "noexist")) 69 c.Assert(err, gc.ErrorMatches, "cannot initialize hook commands in .*: no such file or directory") 70 }