func (t *ToolsSuite) TestUnpackToolsContents(c *gc.C) { files := []*testing.TarFile{ testing.NewTarFile("bar", 0755, "bar contents"), testing.NewTarFile("foo", 0755, "foo contents"), } testTools := &tools.Tools{ URL: "http://foo/bar", Version: version.MustParseBinary("1.2.3-foo-bar"), } err := tools.UnpackTools(t.dataDir, testTools, bytes.NewReader(testing.TarGz(files...))) c.Assert(err, gc.IsNil) assertDirNames(c, t.toolsDir(), []string{"1.2.3-foo-bar"}) t.assertToolsContents(c, testTools, files) // Try to unpack the same version of tools again - it should succeed, // leaving the original version around. tools2 := &tools.Tools{ URL: "http://arble", Version: version.MustParseBinary("1.2.3-foo-bar"), } files2 := []*testing.TarFile{ testing.NewTarFile("bar", 0755, "bar2 contents"), testing.NewTarFile("x", 0755, "x contents"), } err = tools.UnpackTools(t.dataDir, tools2, bytes.NewReader(testing.TarGz(files2...))) c.Assert(err, gc.IsNil) assertDirNames(c, t.toolsDir(), []string{"1.2.3-foo-bar"}) t.assertToolsContents(c, testTools, files) }
// Copied from environs/agent/tools_test.go func (s *DiskManagerSuite) TestUnpackToolsContents(c *gc.C) { files := []*coretesting.TarFile{ coretesting.NewTarFile("bar", 0755, "bar contents"), coretesting.NewTarFile("foo", 0755, "foo contents"), } t1 := &tools.Tools{ URL: "http://foo/bar", Version: version.MustParseBinary("1.2.3-foo-bar"), } err := s.manager.UnpackTools(t1, bytes.NewReader(coretesting.TarGz(files...))) c.Assert(err, gc.IsNil) assertDirNames(c, s.toolsDir(), []string{"1.2.3-foo-bar"}) s.assertToolsContents(c, t1, files) // Try to unpack the same version of tools again - it should succeed, // leaving the original version around. t2 := &tools.Tools{ URL: "http://arble", Version: version.MustParseBinary("1.2.3-foo-bar"), } files2 := []*coretesting.TarFile{ coretesting.NewTarFile("bar", 0755, "bar2 contents"), coretesting.NewTarFile("x", 0755, "x contents"), } err = s.manager.UnpackTools(t2, bytes.NewReader(coretesting.TarGz(files2...))) c.Assert(err, gc.IsNil) assertDirNames(c, s.toolsDir(), []string{"1.2.3-foo-bar"}) s.assertToolsContents(c, t1, files) }
func (s *agentSuite) uploadTools(c *C, vers version.Binary) *state.Tools { tgz := coretesting.TarGz( coretesting.NewTarFile("juju", 0777, "juju contents "+vers.String()), coretesting.NewTarFile("jujuc", 0777, "jujuc contents "+vers.String()), coretesting.NewTarFile("jujud", 0777, "jujud contents "+vers.String()), ) storage := s.Conn.Environ.Storage() err := storage.Put(environs.ToolsStoragePath(vers), bytes.NewReader(tgz), int64(len(tgz))) c.Assert(err, IsNil) url, err := s.Conn.Environ.Storage().URL(environs.ToolsStoragePath(vers)) c.Assert(err, IsNil) return &state.Tools{URL: url, Binary: vers} }
// uploadTools uploads fake tools with the given version number // to the dummy environment's storage and returns a tools // value describing them. func (s *UpgraderSuite) uploadTools(c *gc.C, vers version.Binary) *tools.Tools { // TODO(rog) make UploadFakeToolsVersion in environs/testing // sufficient for this use case. tgz := coretesting.TarGz( coretesting.NewTarFile("jujud", 0777, "jujud contents "+vers.String()), ) storage := s.Conn.Environ.Storage() err := storage.Put(tools.StorageName(vers), bytes.NewReader(tgz), int64(len(tgz))) c.Assert(err, gc.IsNil) url, err := s.Conn.Environ.Storage().URL(tools.StorageName(vers)) c.Assert(err, gc.IsNil) return &tools.Tools{URL: url, Version: vers} }
func (t *ToolsSuite) TestChangeAgentTools(c *gc.C) { files := []*testing.TarFile{ testing.NewTarFile("jujuc", 0755, "juju executable"), testing.NewTarFile("jujud", 0755, "jujuc executable"), } testTools := &tools.Tools{ URL: "http://foo/bar1", Version: version.MustParseBinary("1.2.3-foo-bar"), } err := tools.UnpackTools(t.dataDir, testTools, bytes.NewReader(testing.TarGz(files...))) c.Assert(err, gc.IsNil) gotTools, err := tools.ChangeAgentTools(t.dataDir, "testagent", testTools.Version) c.Assert(err, gc.IsNil) c.Assert(*gotTools, gc.Equals, *testTools) assertDirNames(c, t.toolsDir(), []string{"1.2.3-foo-bar", "testagent"}) assertDirNames(c, tools.ToolsDir(t.dataDir, "testagent"), []string{"jujuc", "jujud", urlFile}) // Upgrade again to check that the link replacement logic works ok. files2 := []*testing.TarFile{ testing.NewTarFile("foo", 0755, "foo content"), testing.NewTarFile("bar", 0755, "bar content"), } tools2 := &tools.Tools{ URL: "http://foo/bar2", Version: version.MustParseBinary("1.2.4-foo-bar"), } err = tools.UnpackTools(t.dataDir, tools2, bytes.NewReader(testing.TarGz(files2...))) c.Assert(err, gc.IsNil) gotTools, err = tools.ChangeAgentTools(t.dataDir, "testagent", tools2.Version) c.Assert(err, gc.IsNil) c.Assert(*gotTools, gc.Equals, *tools2) assertDirNames(c, t.toolsDir(), []string{"1.2.3-foo-bar", "1.2.4-foo-bar", "testagent"}) assertDirNames(c, tools.ToolsDir(t.dataDir, "testagent"), []string{"foo", "bar", urlFile}) }
0x00, 0x03, 0xed, 0xc2, 0x31, 0x0d, 0x00, 0x00, 0x00, 0x02, 0xa0, 0xdf, 0xc6, 0xb6, 0xb7, 0x87, 0x63, 0xd0, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x31, 0x53, 0xad, 0x03, 0x8d, 0xd0, 0x84, 0x00, 0x00, } var unpackToolsBadDataTests = []struct { data []byte err string }{ { testing.TarGz(testing.NewTarFile("bar", os.ModeDir, "")), "bad file type.*", }, { testing.TarGz(testing.NewTarFile("../../etc/passwd", 0755, "")), "bad name.*", }, { testing.TarGz(testing.NewTarFile(`\ini.sys`, 0755, "")), "bad name.*", }, { []byte("x"), "unexpected EOF", }, { gzyesses, "archive/tar: invalid tar header", }, }