launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/cmd/juju/scp_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package main
     5  
     6  import (
     7  	"bytes"
     8  	"fmt"
     9  	"io/ioutil"
    10  	"net/url"
    11  	"path/filepath"
    12  
    13  	gc "launchpad.net/gocheck"
    14  
    15  	"launchpad.net/juju-core/charm"
    16  	"launchpad.net/juju-core/cmd"
    17  	coretesting "launchpad.net/juju-core/testing"
    18  )
    19  
    20  var _ = gc.Suite(&SCPSuite{})
    21  
    22  type SCPSuite struct {
    23  	SSHCommonSuite
    24  }
    25  
    26  var scpTests = []struct {
    27  	args   []string
    28  	result string
    29  }{
    30  	{
    31  		[]string{"0:foo", "."},
    32  		commonArgs + "ubuntu@dummyenv-0.dns:foo .\n",
    33  	},
    34  	{
    35  		[]string{"foo", "0:"},
    36  		commonArgs + "foo ubuntu@dummyenv-0.dns:\n",
    37  	},
    38  	{
    39  		[]string{"0:foo", "mysql/0:/foo"},
    40  		commonArgs + "ubuntu@dummyenv-0.dns:foo ubuntu@dummyenv-0.dns:/foo\n",
    41  	},
    42  	{
    43  		[]string{"a", "b", "mysql/0"},
    44  		commonArgs + "a b\n",
    45  	},
    46  	{
    47  		[]string{"mongodb/1:foo", "mongodb/0:"},
    48  		commonArgs + "ubuntu@dummyenv-2.dns:foo ubuntu@dummyenv-1.dns:\n",
    49  	},
    50  }
    51  
    52  func (s *SCPSuite) TestSCPCommand(c *gc.C) {
    53  	m := s.makeMachines(3, c, true)
    54  	ch := coretesting.Charms.Dir("dummy")
    55  	curl := charm.MustParseURL(
    56  		fmt.Sprintf("local:quantal/%s-%d", ch.Meta().Name, ch.Revision()),
    57  	)
    58  	bundleURL, err := url.Parse("http://bundles.testing.invalid/dummy-1")
    59  	c.Assert(err, gc.IsNil)
    60  	dummy, err := s.State.AddCharm(ch, curl, bundleURL, "dummy-1-sha256")
    61  	c.Assert(err, gc.IsNil)
    62  	srv := s.AddTestingService(c, "mysql", dummy)
    63  	s.addUnit(srv, m[0], c)
    64  
    65  	srv = s.AddTestingService(c, "mongodb", dummy)
    66  	s.addUnit(srv, m[1], c)
    67  	s.addUnit(srv, m[2], c)
    68  
    69  	for _, t := range scpTests {
    70  		c.Logf("testing juju scp %s", t.args)
    71  		ctx := coretesting.Context(c)
    72  		code := cmd.Main(&SCPCommand{}, ctx, t.args)
    73  		c.Check(code, gc.Equals, 0)
    74  		// we suppress stdout from scp
    75  		c.Check(ctx.Stderr.(*bytes.Buffer).String(), gc.Equals, "")
    76  		c.Check(ctx.Stdout.(*bytes.Buffer).String(), gc.Equals, "")
    77  		data, err := ioutil.ReadFile(filepath.Join(s.bin, "scp.args"))
    78  		c.Assert(err, gc.IsNil)
    79  		c.Assert(string(data), gc.Equals, t.result)
    80  	}
    81  }