7
. "launchpad.net/gocheck"
8
"launchpad.net/juju/go/environs"
9
_ "launchpad.net/juju/go/environs/dummy"
10
"launchpad.net/juju/go/version"
17
type ToolsSuite struct{}
19
var envs *environs.Environs
30
envs, err = environs.ReadEnvironsBytes([]byte(toolsConf))
36
var _ = Suite(&ToolsSuite{})
38
func (ToolsSuite) TestUploadTools(c *C) {
39
env, err := envs.Open("")
42
err = environs.UploadTools(env)
45
name := fmt.Sprintf("tools/juju-%v-%s-%s.tgz", version.Current, runtime.GOOS, runtime.GOARCH)
46
r, err := env.GetFile(name)
49
// Unarchive the tool executables into a temp directory.
53
// Verify that each tool executes and produces some
54
// characteristic output.
55
for _, tool := range []string{"juju", "jujud"} {
56
out, err := exec.Command(filepath.Join(dir, tool), "arble").CombinedOutput()
58
c.Assert(err, FitsTypeOf, (*exec.ExitError)(nil))
60
c.Check(string(out), Matches, fmt.Sprintf(`usage: %s (.|\n)*`, tool))
64
// Test that the upload procedure fails correctly
65
// when the build process fails (because of a bad Go source
66
// file in this case).
67
func (ToolsSuite) TestUploadBadBuild(c *C) {
69
pkgdir := filepath.Join(gopath, "src", "launchpad.net", "juju", "go", "cmd", "broken")
70
err := os.MkdirAll(pkgdir, 0777)
73
err = ioutil.WriteFile(filepath.Join(pkgdir, "broken.go"), []byte("nope"), 0666)
76
defer os.Setenv("GOPATH", os.Getenv("GOPATH"))
77
os.Setenv("GOPATH", gopath)
79
env, err := envs.Open("")
82
err = environs.UploadTools(env)
83
c.Assert(err, ErrorMatches, `build failed: exit status 1; can't load package:(.|\n)*`)
86
func unarchive(c *C, dir string, r io.ReadCloser) {
89
// unarchive using actual tar command so we're
90
// not just verifying the Go tar package against itself.
91
cmd := exec.Command("tar", "xz")
94
out, err := cmd.CombinedOutput()
97
c.Fatalf("tar xz failed: %v", err)