func (s *MainSuite) TestNoWarn1xWith2xData(c *gc.C) { // Code should only rnu on ubuntu series, so patch out the series for // when non-ubuntu OSes run this test. s.PatchValue(&series.HostSeries, func() string { return "trusty" }) argChan := make(chan []string, 1) // we shouldn't actually be running anything, but if we do, this will // provide some consistent results. execCommand := s.GetExecCommand(gitjujutesting.PatchExecConfig{ Stdout: "1.25.0-trusty-amd64", Args: argChan, }) // there should be a 2x home directory already created by the test setup. // create a fake old juju home. makeValidOldHome(c) var code int stdout, stderr := gitjujutesting.CaptureOutput(c, func() { code = main{ execCommand: execCommand, }.Run([]string{"juju", "version"}) }) c.Assert(code, gc.Equals, 0) assertNoArgs(c, argChan) c.Assert(string(stderr), gc.Equals, "") checkVersionOutput(c, string(stdout)) }
func (s *cmdSuite) TestCaptureOutput(c *gc.C) { f := func() { _, err := fmt.Fprint(os.Stderr, "this is stderr") c.Assert(err, jc.ErrorIsNil) _, err = fmt.Fprint(os.Stdout, "this is stdout") c.Assert(err, jc.ErrorIsNil) } stdout, stderr := testing.CaptureOutput(c, f) c.Check(string(stdout), gc.Equals, "this is stdout") c.Check(string(stderr), gc.Equals, "this is stderr") }
func (s *MainSuite) TestFirstRun2xFrom1xOnUbuntu(c *gc.C) { if runtime.GOOS == "windows" { // This test can't work on Windows and shouldn't need to c.Skip("test doesn't work on Windows because Juju's 1.x and 2.x config directory are the same") } // Code should only run on ubuntu series, so patch out the series for // when non-ubuntu OSes run this test. s.PatchValue(&series.HostSeries, func() string { return "trusty" }) argChan := make(chan []string, 1) execCommand := s.GetExecCommand(gitjujutesting.PatchExecConfig{ Stdout: "1.25.0-trusty-amd64", Args: argChan, }) stub := &gitjujutesting.Stub{} s.PatchValue(&cloud.NewUpdateCloudsCommand, func() cmd.Command { return &stubCommand{stub: stub} }) // remove the new juju-home and create a fake old juju home. err := os.RemoveAll(osenv.JujuXDGDataHomeDir()) c.Assert(err, jc.ErrorIsNil) makeValidOldHome(c) var code int f := func() { code = main{ execCommand: execCommand, }.Run([]string{"juju", "version"}) } stdout, stderr := gitjujutesting.CaptureOutput(c, f) select { case args := <-argChan: c.Assert(args, gc.DeepEquals, []string{"juju-1", "version"}) default: c.Fatalf("Exec function not called.") } c.Check(code, gc.Equals, 0) c.Check(string(stderr), gc.Equals, fmt.Sprintf(` Welcome to Juju %s. If you meant to use Juju 1.25.0 you can continue using it with the command juju-1 e.g. 'juju-1 switch'. See https://jujucharms.com/docs/stable/introducing-2 for more details. Since Juju 2 is being run for the first time, downloading latest cloud information.`[1:]+"\n", jujuversion.Current)) checkVersionOutput(c, string(stdout)) }
func (s *MainSuite) assertRunCommandUpdateCloud(c *gc.C, expectedCall string) { argChan := make(chan []string, 1) execCommand := s.GetExecCommand(gitjujutesting.PatchExecConfig{ Stdout: "1.25.0-trusty-amd64", Args: argChan, }) stub := &gitjujutesting.Stub{} s.PatchValue(&cloud.NewUpdateCloudsCommand, func() cmd.Command { return &stubCommand{stub: stub} }) var code int gitjujutesting.CaptureOutput(c, func() { code = main{ execCommand: execCommand, }.Run([]string{"juju", "version"}) }) c.Assert(code, gc.Equals, 0) c.Assert(stub.Calls()[0].FuncName, gc.Equals, expectedCall) }
func (s *MainSuite) TestNoWarnWithNo1xOr2xData(c *gc.C) { // Code should only rnu on ubuntu series, so patch out the series for // when non-ubuntu OSes run this test. s.PatchValue(&series.HostSeries, func() string { return "trusty" }) argChan := make(chan []string, 1) // we shouldn't actually be running anything, but if we do, this will // provide some consistent results. execCommand := s.GetExecCommand(gitjujutesting.PatchExecConfig{ Stdout: "1.25.0-trusty-amd64", Args: argChan, }) stub := &gitjujutesting.Stub{} s.PatchValue(&cloud.NewUpdateCloudsCommand, func() cmd.Command { return &stubCommand{stub: stub} }) // remove the new juju-home. err := os.RemoveAll(osenv.JujuXDGDataHomeDir()) c.Assert(err, jc.ErrorIsNil) // create fake (empty) old juju home. path := c.MkDir() s.PatchEnvironment("JUJU_HOME", path) var code int stdout, stderr := gitjujutesting.CaptureOutput(c, func() { code = main{ execCommand: execCommand, }.Run([]string{"juju", "version"}) }) c.Assert(code, gc.Equals, 0) assertNoArgs(c, argChan) c.Check(string(stderr), gc.Equals, ` Since Juju 2 is being run for the first time, downloading latest cloud information.`[1:]+"\n") checkVersionOutput(c, string(stdout)) }
func (s *MainSuite) TestFirstRun2xFrom1xNotUbuntu(c *gc.C) { // Code should only run on ubuntu series, so pretend to be something else. s.PatchValue(&series.HostSeries, func() string { return "win8" }) argChan := make(chan []string, 1) // we shouldn't actually be running anything, but if we do, this will // provide some consistent results. execCommand := s.GetExecCommand(gitjujutesting.PatchExecConfig{ Stdout: "1.25.0-trusty-amd64", Args: argChan, }) stub := &gitjujutesting.Stub{} s.PatchValue(&cloud.NewUpdateCloudsCommand, func() cmd.Command { return &stubCommand{stub: stub} }) // remove the new juju-home and create a fake old juju home. err := os.RemoveAll(osenv.JujuXDGDataHomeDir()) c.Assert(err, jc.ErrorIsNil) makeValidOldHome(c) var code int stdout, stderr := gitjujutesting.CaptureOutput(c, func() { code = main{ execCommand: execCommand, }.Run([]string{"juju", "version"}) }) c.Assert(code, gc.Equals, 0) assertNoArgs(c, argChan) c.Check(string(stderr), gc.Equals, ` Since Juju 2 is being run for the first time, downloading latest cloud information.`[1:]+"\n") checkVersionOutput(c, string(stdout)) }