github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/uniter/runner/jujuc/secret-grant_test.go (about) 1 // Copyright 2021 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package jujuc_test 5 6 import ( 7 "github.com/juju/cmd/v3" 8 "github.com/juju/cmd/v3/cmdtesting" 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/worker/uniter/runner/jujuc" 13 ) 14 15 type SecretGrantSuite struct { 16 relationSuite 17 } 18 19 var _ = gc.Suite(&SecretGrantSuite{}) 20 21 func (s *SecretGrantSuite) TestGrantSecretInvalidArgs(c *gc.C) { 22 hctx, _ := s.newHookContext(1, "mediawiki/0", "mediawiki") 23 24 for _, t := range []struct { 25 args []string 26 err string 27 }{ 28 { 29 args: []string{}, 30 err: "ERROR missing secret URI", 31 }, { 32 args: []string{"foo"}, 33 err: `ERROR secret URI "foo" not valid`, 34 }, { 35 args: []string{"secret:9m4e2mr0ui3e8a215n4g", "--unit", "foo"}, 36 err: `ERROR unit "foo" not valid`, 37 }, { 38 args: []string{"secret:9m4e2mr0ui3e8a215n4g", "--relation", "foo"}, 39 err: `ERROR invalid value "foo" for option --relation: invalid relation id`, 40 }, { 41 args: []string{"secret:9m4e2mr0ui3e8a215n4g", "--relation", "-666"}, 42 err: `ERROR invalid value "-666" for option --relation: relation not found`, 43 }, 44 } { 45 com, err := jujuc.NewCommand(hctx, "secret-grant") 46 c.Assert(err, jc.ErrorIsNil) 47 ctx := cmdtesting.Context(c) 48 code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(com), ctx, t.args) 49 50 c.Assert(code, gc.Equals, 2) 51 c.Assert(bufferString(ctx.Stderr), gc.Equals, t.err+"\n") 52 } 53 } 54 55 func (s *SecretGrantSuite) TestGrantSecret(c *gc.C) { 56 hctx, _ := s.newHookContext(1, "mediawiki/0", "mediawiki") 57 58 com, err := jujuc.NewCommand(hctx, "secret-grant") 59 c.Assert(err, jc.ErrorIsNil) 60 ctx := cmdtesting.Context(c) 61 code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(com), ctx, []string{ 62 "secret:9m4e2mr0ui3e8a215n4g", 63 "--relation", "db:1", 64 }) 65 66 c.Assert(code, gc.Equals, 0) 67 args := &jujuc.SecretGrantRevokeArgs{ 68 RelationKey: ptr("wordpress:db mediawiki:db"), 69 ApplicationName: ptr("mediawiki"), 70 } 71 s.Stub.CheckCallNames(c, "HookRelation", "Id", "FakeId", "Relation", "Relation", "RelationTag", "RemoteApplicationName", "GrantSecret") 72 s.Stub.CheckCall(c, 7, "GrantSecret", "secret:9m4e2mr0ui3e8a215n4g", args) 73 } 74 75 func (s *SecretGrantSuite) TestGrantSecretUnit(c *gc.C) { 76 hctx, _ := s.newHookContext(1, "mediawiki/0", "mediawiki") 77 78 com, err := jujuc.NewCommand(hctx, "secret-grant") 79 c.Assert(err, jc.ErrorIsNil) 80 ctx := cmdtesting.Context(c) 81 code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(com), ctx, []string{ 82 "secret:9m4e2mr0ui3e8a215n4g", 83 "--relation", "db:1", 84 "--unit", "mediawiki/0", 85 }) 86 87 c.Assert(code, gc.Equals, 0) 88 args := &jujuc.SecretGrantRevokeArgs{ 89 RelationKey: ptr("wordpress:db mediawiki:db"), 90 ApplicationName: ptr("mediawiki"), 91 UnitName: ptr("mediawiki/0"), 92 } 93 s.Stub.CheckCallNames(c, "HookRelation", "Id", "FakeId", "Relation", "Relation", "RelationTag", "RemoteApplicationName", "GrantSecret") 94 s.Stub.CheckCall(c, 7, "GrantSecret", "secret:9m4e2mr0ui3e8a215n4g", args) 95 } 96 97 func (s *SecretGrantSuite) TestGrantSecretWrongUnit(c *gc.C) { 98 hctx, _ := s.newHookContext(1, "mediawiki/0", "mediawiki") 99 100 com, err := jujuc.NewCommand(hctx, "secret-grant") 101 c.Assert(err, jc.ErrorIsNil) 102 ctx := cmdtesting.Context(c) 103 code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(com), ctx, []string{ 104 "secret:9m4e2mr0ui3e8a215n4g", 105 "--relation", "db:1", 106 "--unit", "foo/0", 107 }) 108 109 c.Assert(code, gc.Equals, 2) 110 }