github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/common/cloudcredential_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common_test
     5  
     6  import (
     7  	"bytes"
     8  
     9  	"github.com/golang/mock/gomock"
    10  	"github.com/juju/cmd"
    11  	"github.com/juju/errors"
    12  	"github.com/juju/testing"
    13  	jc "github.com/juju/testing/checkers"
    14  	gc "gopkg.in/check.v1"
    15  	"gopkg.in/juju/names.v2"
    16  
    17  	"github.com/juju/juju/cloud"
    18  	"github.com/juju/juju/cmd/juju/common"
    19  	"github.com/juju/juju/cmd/modelcmd"
    20  )
    21  
    22  var _ = gc.Suite(&cloudCredentialSuite{})
    23  
    24  type cloudCredentialSuite struct {
    25  	testing.IsolationSuite
    26  }
    27  
    28  func (*cloudCredentialSuite) TestResolveCloudCredentialTag(c *gc.C) {
    29  	testResolveCloudCredentialTag(c,
    30  		names.NewUserTag("admin@local"),
    31  		names.NewCloudTag("aws"),
    32  		"foo",
    33  		"aws/admin/foo",
    34  	)
    35  }
    36  
    37  func (*cloudCredentialSuite) TestResolveCloudCredentialTagOtherUser(c *gc.C) {
    38  	testResolveCloudCredentialTag(c,
    39  		names.NewUserTag("admin@local"),
    40  		names.NewCloudTag("aws"),
    41  		"brenda/foo",
    42  		"aws/brenda/foo",
    43  	)
    44  }
    45  
    46  func testResolveCloudCredentialTag(
    47  	c *gc.C,
    48  	user names.UserTag,
    49  	cloud names.CloudTag,
    50  	credentialName string,
    51  	expect string,
    52  ) {
    53  	tag, err := common.ResolveCloudCredentialTag(user, cloud, credentialName)
    54  	c.Assert(err, jc.ErrorIsNil)
    55  	c.Assert(tag.Id(), gc.Equals, expect)
    56  }
    57  
    58  func (*cloudCredentialSuite) TestRegisterCredentials(c *gc.C) {
    59  	ctrl := gomock.NewController(c)
    60  	defer ctrl.Finish()
    61  
    62  	credential := &cloud.CloudCredential{
    63  		AuthCredentials: map[string]cloud.Credential{
    64  			"admin": cloud.NewCredential("certificate", map[string]string{
    65  				"cert": "certificate",
    66  			}),
    67  		},
    68  	}
    69  
    70  	mockProvider := common.NewMockTestCloudProvider(ctrl)
    71  	mockProvider.EXPECT().RegisterCredentials(cloud.Cloud{
    72  		Name: "fake",
    73  	}).Return(map[string]*cloud.CloudCredential{
    74  		"fake": credential,
    75  	}, nil)
    76  	mockStore := common.NewMockCredentialStore(ctrl)
    77  	mockStore.EXPECT().UpdateCredential("fake", *credential).Return(nil)
    78  
    79  	stderr := new(bytes.Buffer)
    80  
    81  	err := common.RegisterCredentials(&cmd.Context{
    82  		Stderr: stderr,
    83  	}, mockStore, mockProvider, modelcmd.RegisterCredentialsParams{
    84  		Cloud: cloud.Cloud{
    85  			Name: "fake",
    86  		},
    87  	})
    88  	c.Assert(err, jc.ErrorIsNil)
    89  	c.Assert(stderr.String(), gc.Equals, "")
    90  }
    91  
    92  func (*cloudCredentialSuite) TestRegisterCredentialsWithNoCredentials(c *gc.C) {
    93  	ctrl := gomock.NewController(c)
    94  	defer ctrl.Finish()
    95  
    96  	mockProvider := common.NewMockTestCloudProvider(ctrl)
    97  	mockProvider.EXPECT().RegisterCredentials(cloud.Cloud{
    98  		Name: "fake",
    99  	}).Return(map[string]*cloud.CloudCredential{}, nil)
   100  	mockStore := common.NewMockCredentialStore(ctrl)
   101  
   102  	stderr := new(bytes.Buffer)
   103  
   104  	err := common.RegisterCredentials(&cmd.Context{
   105  		Stderr: stderr,
   106  	}, mockStore, mockProvider, modelcmd.RegisterCredentialsParams{
   107  		Cloud: cloud.Cloud{
   108  			Name: "fake",
   109  		},
   110  	})
   111  	c.Assert(err, jc.ErrorIsNil)
   112  }
   113  
   114  func (*cloudCredentialSuite) TestRegisterCredentialsWithCallFailure(c *gc.C) {
   115  	ctrl := gomock.NewController(c)
   116  	defer ctrl.Finish()
   117  
   118  	mockProvider := common.NewMockTestCloudProvider(ctrl)
   119  	mockProvider.EXPECT().RegisterCredentials(cloud.Cloud{
   120  		Name: "fake",
   121  	}).Return(nil, errors.New("bad"))
   122  	mockStore := common.NewMockCredentialStore(ctrl)
   123  
   124  	stderr := new(bytes.Buffer)
   125  
   126  	err := common.RegisterCredentials(&cmd.Context{
   127  		Stderr: stderr,
   128  	}, mockStore, mockProvider, modelcmd.RegisterCredentialsParams{
   129  		Cloud: cloud.Cloud{
   130  			Name: "fake",
   131  		},
   132  	})
   133  	c.Assert(errors.Cause(err).Error(), gc.Matches, "bad")
   134  }