github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/cmd/juju/action/status_test.go (about) 1 // Copyright 2014-2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package action_test 5 6 import ( 7 "bytes" 8 "time" 9 10 "github.com/juju/cmd" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/apiserver/params" 15 "github.com/juju/juju/cmd/juju/action" 16 "github.com/juju/juju/testing" 17 ) 18 19 type StatusSuite struct { 20 BaseActionSuite 21 subcommand *action.StatusCommand 22 } 23 24 var _ = gc.Suite(&StatusSuite{}) 25 26 func (s *StatusSuite) SetUpTest(c *gc.C) { 27 s.BaseActionSuite.SetUpTest(c) 28 s.subcommand = &action.StatusCommand{} 29 } 30 31 func (s *StatusSuite) TestHelp(c *gc.C) { 32 s.checkHelp(c, s.subcommand) 33 } 34 35 func (s *StatusSuite) TestRun(c *gc.C) { 36 prefix := "deadbeef" 37 fakeid := prefix + "-0000-4000-8000-feedfacebeef" 38 fakeid2 := prefix + "-0001-4000-8000-feedfacebeef" 39 faketag := "action-" + fakeid 40 faketag2 := "action-" + fakeid2 41 42 emptyArgs := []string{} 43 emptyPrefixArgs := []string{} 44 prefixArgs := []string{prefix} 45 result1 := []params.ActionResult{{Status: "some-random-status"}} 46 result2 := []params.ActionResult{{Status: "a status"}, {Status: "another status"}} 47 48 errNotFound := "no actions found" 49 errNotFoundForPrefix := `no actions found matching prefix "` + prefix + `"` 50 errFoundTagButNoResults := `identifier "` + prefix + `" matched action\(s\) \[.*\], but found no results` 51 52 tests := []statusTestCase{ 53 {expectError: errNotFound}, 54 {args: emptyArgs, expectError: errNotFound}, 55 {args: emptyArgs, tags: tagsForIdPrefix("", faketag, faketag2), results: result2}, 56 {args: emptyPrefixArgs, expectError: errNotFound}, 57 {args: emptyPrefixArgs, tags: tagsForIdPrefix("", faketag, faketag2), results: result2}, 58 {args: prefixArgs, expectError: errNotFoundForPrefix}, 59 {args: prefixArgs, expectError: errNotFoundForPrefix, tags: tagsForIdPrefix(prefix)}, 60 {args: prefixArgs, expectError: errNotFoundForPrefix, tags: tagsForIdPrefix(prefix, "bb", "bc")}, 61 {args: prefixArgs, expectError: errFoundTagButNoResults, tags: tagsForIdPrefix(prefix, faketag, faketag2)}, 62 {args: prefixArgs, expectError: errFoundTagButNoResults, tags: tagsForIdPrefix(prefix, faketag)}, 63 {args: prefixArgs, tags: tagsForIdPrefix(prefix, faketag), results: result1}, 64 {args: prefixArgs, tags: tagsForIdPrefix(prefix, faketag, faketag2), results: result2}, 65 } 66 67 for i, test := range tests { 68 c.Logf("iteration %d, test case %+v", i, test) 69 s.runTestCase(c, test) 70 } 71 } 72 73 func (s *StatusSuite) runTestCase(c *gc.C, tc statusTestCase) { 74 fakeClient := makeFakeClient( 75 0*time.Second, // No API delay 76 5*time.Second, // 5 second test timeout 77 tc.tags, 78 tc.results, 79 "", // No API error 80 ) 81 82 restore := s.patchAPIClient(fakeClient) 83 defer restore() 84 85 s.subcommand = &action.StatusCommand{} 86 ctx, err := testing.RunCommand(c, s.subcommand, tc.args...) 87 if tc.expectError == "" { 88 c.Check(err, jc.ErrorIsNil) 89 } else { 90 c.Check(err, gc.ErrorMatches, tc.expectError) 91 } 92 if len(tc.results) > 0 { 93 buf, err := cmd.DefaultFormatters["yaml"](action.ActionResultsToMap(tc.results)) 94 c.Check(err, jc.ErrorIsNil) 95 c.Check(ctx.Stdout.(*bytes.Buffer).String(), gc.Equals, string(buf)+"\n") 96 c.Check(ctx.Stderr.(*bytes.Buffer).String(), gc.Equals, "") 97 } 98 } 99 100 type statusTestCase struct { 101 args []string 102 expectError string 103 tags params.FindTagsResults 104 results []params.ActionResult 105 }