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