func (fix *SimpleToolsFixture) SetUp(c *gc.C, dataDir string) { fix.BaseSuite.SetUpTest(c) fix.dataDir = dataDir fix.initDir = c.MkDir() fix.logDir = c.MkDir() toolsDir := tools.SharedToolsDir(fix.dataDir, version.Current) err := os.MkdirAll(toolsDir, 0755) c.Assert(err, gc.IsNil) jujudPath := filepath.Join(toolsDir, "jujud") err = ioutil.WriteFile(jujudPath, []byte(fakeJujud), 0755) c.Assert(err, gc.IsNil) toolsPath := filepath.Join(toolsDir, "downloaded-tools.txt") testTools := coretools.Tools{Version: version.Current, URL: "http://testing.invalid/tools"} data, err := json.Marshal(testTools) c.Assert(err, gc.IsNil) err = ioutil.WriteFile(toolsPath, data, 0644) c.Assert(err, gc.IsNil) fix.binDir = c.MkDir() fix.origPath = os.Getenv("PATH") os.Setenv("PATH", fix.binDir+":"+fix.origPath) fix.makeBin(c, "status", `echo "blah stop/waiting"`) fix.makeBin(c, "stopped-status", `echo "blah stop/waiting"`) fix.makeBin(c, "started-status", `echo "blah start/running, process 666"`) fix.makeBin(c, "start", "cp $(which started-status) $(which status)") fix.makeBin(c, "stop", "cp $(which stopped-status) $(which status)") }
func (t *ToolsSuite) TestReadToolsErrors(c *gc.C) { vers := version.MustParseBinary("1.2.3-precise-amd64") testTools, err := agenttools.ReadTools(t.dataDir, vers) c.Assert(testTools, gc.IsNil) c.Assert(err, gc.ErrorMatches, "cannot read tools metadata in tools directory: .*") dir := agenttools.SharedToolsDir(t.dataDir, vers) err = os.MkdirAll(dir, 0755) c.Assert(err, gc.IsNil) err = ioutil.WriteFile(filepath.Join(dir, toolsFile), []byte(" \t\n"), 0644) c.Assert(err, gc.IsNil) testTools, err = agenttools.ReadTools(t.dataDir, vers) c.Assert(testTools, gc.IsNil) c.Assert(err, gc.ErrorMatches, "invalid tools metadata in tools directory .*") }
// assertToolsContents asserts that the directory for the tools // has the given contents. func (t *ToolsSuite) assertToolsContents(c *gc.C, testTools *coretest.Tools, files []*testing.TarFile) { var wantNames []string for _, f := range files { wantNames = append(wantNames, f.Header.Name) } wantNames = append(wantNames, toolsFile) dir := agenttools.SharedToolsDir(t.dataDir, testTools.Version) assertDirNames(c, dir, wantNames) expectedURLFileContents, err := json.Marshal(testTools) c.Assert(err, gc.IsNil) assertFileContents(c, dir, toolsFile, string(expectedURLFileContents), 0200) for _, f := range files { assertFileContents(c, dir, f.Header.Name, f.Contents, 0400) } gotTools, err := agenttools.ReadTools(t.dataDir, testTools.Version) c.Assert(err, gc.IsNil) c.Assert(*gotTools, gc.Equals, *testTools) }
func (t *ToolsSuite) TestSharedToolsDir(c *gc.C) { dir := agenttools.SharedToolsDir("/var/lib/juju", version.MustParseBinary("1.2.3-precise-amd64")) c.Assert(dir, gc.Equals, "/var/lib/juju/tools/1.2.3-precise-amd64") }