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  }