From 0e45dc015e216ee4d2f4cea7d99a3fbd0a4df339 Mon Sep 17 00:00:00 2001 From: Heather Lanigan Date: Fri, 29 Apr 2022 15:25:31 -0400 Subject: [PATCH 1/9] Add translation of NotValid errors across the wire. --- apiserver/errors/errors.go | 7 +++++++ rpc/params/apierror.go | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/apiserver/errors/errors.go b/apiserver/errors/errors.go index e55492f7864..b53765bb779 100644 --- a/apiserver/errors/errors.go +++ b/apiserver/errors/errors.go @@ -202,6 +202,8 @@ func ServerError(err error) *params.Error { code = params.CodeNotImplemented case errors.IsForbidden(err): code = params.CodeForbidden + case errors.IsNotValid(err): + code = params.CodeNotValid case IsIncompatibleSeriesError(err), stateerrors.IsIncompatibleSeriesError(err): code = params.CodeIncompatibleSeries case IsDischargeRequiredError(err): @@ -284,6 +286,9 @@ func DestroyErr(desc string, ids []string, errs []error) error { // RestoreError makes a best effort at converting the given error // back into an error originally converted by ServerError(). func RestoreError(err error) error { + if err == nil { + return nil + } err = errors.Cause(err) if apiErr, ok := err.(*params.Error); !ok { @@ -367,6 +372,8 @@ func RestoreError(err error) error { return errors.NewNotYetAvailable(nil, msg) case params.IsCodeTryAgain(err): return ErrTryAgain + case params.IsCodeNotValid(err): + return errors.NotValidf(msg) default: return err } diff --git a/rpc/params/apierror.go b/rpc/params/apierror.go index 6f367c1d3db..5279d47d1c1 100644 --- a/rpc/params/apierror.go +++ b/rpc/params/apierror.go @@ -216,6 +216,7 @@ const ( CodeDeadlineExceeded = "deadline exceeded" CodeLeaseError = "lease error" CodeNotYetAvailable = "not yet available; try again later" + CodeNotValid = "not valid" ) // ErrCode returns the error code associated with @@ -269,6 +270,10 @@ func IsCodeNotYetAvailable(err error) bool { return ErrCode(err) == CodeNotYetAvailable } +func IsCodeNotValid(err error) bool { + return ErrCode(err) == CodeNotValid +} + // IsCodeNotFoundOrCodeUnauthorized is used in API clients which, // pre-API, used errors.IsNotFound; this is because an API client is // not necessarily privileged to know about the existence or otherwise From fecf8947058ebc69615ad0c60cd03ff497ce91d2 Mon Sep 17 00:00:00 2001 From: Heather Lanigan Date: Fri, 29 Apr 2022 15:27:58 -0400 Subject: [PATCH 2/9] Restore error types after results come across the wire. Allows for type checking further down stream. --- api/client/charms/client.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/client/charms/client.go b/api/client/charms/client.go index 477c2ca621a..8896117d801 100644 --- a/api/client/charms/client.go +++ b/api/client/charms/client.go @@ -14,6 +14,7 @@ import ( api "github.com/juju/juju/api/client/resources" apicharm "github.com/juju/juju/api/common/charm" commoncharms "github.com/juju/juju/api/common/charms" + apiservererrors "github.com/juju/juju/apiserver/errors" "github.com/juju/juju/rpc/params" ) @@ -77,12 +78,12 @@ func (c *Client) ResolveCharms(charms []CharmToResolve) ([]ResolvedCharm, error) } var result params.ResolveCharmWithChannelResults if err := c.facade.FacadeCall("ResolveCharms", args, &result); err != nil { - return nil, errors.Trace(err) + return nil, errors.Trace(apiservererrors.RestoreError(err)) } resolvedCharms := make([]ResolvedCharm, len(charms)) for i, r := range result.Results { if r.Error != nil { - resolvedCharms[i] = ResolvedCharm{Error: r.Error} + resolvedCharms[i] = ResolvedCharm{Error: apiservererrors.RestoreError(r.Error)} continue } curl, err := charm.ParseURL(r.URL) From d10c156da10e469100ddce0f030763763a068029 Mon Sep 17 00:00:00 2001 From: Heather Lanigan Date: Mon, 2 May 2022 11:39:42 -0400 Subject: [PATCH 3/9] Moving check on revision and channel flags. Related to LP1969929. There are different checks based on charm or bundle. However it's unknown which is deploying until the Deployer. Moving check. --- cmd/juju/application/deploy.go | 13 +++++++------ cmd/juju/application/deploy_test.go | 5 +---- cmd/juju/application/deployer/deployer.go | 10 +++++++--- cmd/juju/application/deployer/deployer_test.go | 1 + .../application/deployer/series_selector_test.go | 4 ++-- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/cmd/juju/application/deploy.go b/cmd/juju/application/deploy.go index 71c77f46c74..a334393fbfa 100644 --- a/cmd/juju/application/deploy.go +++ b/cmd/juju/application/deploy.go @@ -665,7 +665,14 @@ func (c *DeployCommand) SetFlags(f *gnuflag.FlagSet) { c.flagSet = f } +// Init validates the flags. func (c *DeployCommand) Init(args []string) error { + // NOTE: For deploying a charm with the revision flag, a channel is + // also required. It's required to ensure that juju knows which channel + // should be used for refreshing/upgrading the charm in the future.However + // a bundle does not require a channel, today you cannot refresh/upgrade + // a bundle, only the components. These flags will be varified in the + // GetDeployer instead. if err := c.validateStorageByModelType(); err != nil { if !errors.IsNotFound(err) { return errors.Trace(err) @@ -715,12 +722,6 @@ func (c *DeployCommand) Init(args []string) error { // do a late validation at Run(). c.unknownModel = true } - if c.channelStr == "" && c.Revision != -1 { - // Tell the user they need to specify a channel - return errors.New( - `when using --revision option, you must also use --channel option`, - ) - } if c.channelStr != "" { c.Channel, err = charm.ParseChannelNormalize(c.channelStr) if err != nil { diff --git a/cmd/juju/application/deploy_test.go b/cmd/juju/application/deploy_test.go index f363cdc401d..5de2e10f3e9 100644 --- a/cmd/juju/application/deploy_test.go +++ b/cmd/juju/application/deploy_test.go @@ -296,9 +296,6 @@ var initErrorTests = []struct { }, { args: []string{"bundle", "--map-machines", "foo"}, err: `error in --map-machines: expected "existing" or "=", got "foo"`, - }, { - args: []string{"charm-name", "--revision", "3"}, - err: `when using --revision option, you must also use --channel option`, }, } @@ -438,7 +435,7 @@ func (s *DeploySuite) TestDeployFromPath(c *gc.C) { func (s *DeploySuite) TestDeployFromPathUnsupportedSeries(c *gc.C) { path := testcharms.RepoWithSeries("bionic").ClonedDirPath(c.MkDir(), "multi-series") err := s.runDeploy(c, path, "--series", "quantal") - c.Assert(err, gc.ErrorMatches, `series "quantal" not supported by charm, supported series are: precise,trusty,xenial,yakkety,bionic`) + c.Assert(err, gc.ErrorMatches, `series "quantal" not supported by charm, supported series are: precise, trusty, xenial, yakkety, bionic`) } func (s *DeploySuite) TestDeployFromPathUnsupportedSeriesForce(c *gc.C) { diff --git a/cmd/juju/application/deployer/deployer.go b/cmd/juju/application/deployer/deployer.go index 26fcf3070a6..c3bf00232d0 100644 --- a/cmd/juju/application/deployer/deployer.go +++ b/cmd/juju/application/deployer/deployer.go @@ -491,15 +491,19 @@ func (d *factory) repositoryCharm() (Deployer, error) { if err != nil { return nil, errors.Trace(err) } + if charm.CharmHub.Matches(userRequestedURL.Schema) && d.channel.Empty() && d.revision != -1 { + // Tell the user they need to specify a channel + return nil, errors.Errorf("specifying a revision requires a channel for future upgrades. Please use --channel") + } // To deploy by revision, the revision number must be in the origin for a // charmhub charm and in the url for a charmstore charm. if charm.CharmHub.Matches(userRequestedURL.Schema) { if userRequestedURL.Revision != -1 { return nil, errors.Errorf("cannot specify revision in a charm or bundle name. Please use --revision.") } - if d.revision != -1 && d.channel.Empty() { - return nil, errors.Errorf("specifying a revision requires a channel for future upgrades. Please use --channel") - } + //if d.revision != -1 && d.channel.Empty() { + // return nil, errors.Errorf("specifying a revision requires a channel for future upgrades. Please use --channel") + //} } else if charm.CharmStore.Matches(userRequestedURL.Schema) { if userRequestedURL.Revision != -1 && d.revision != -1 && userRequestedURL.Revision != d.revision { return nil, errors.Errorf("two different revisions to deploy: specified %d and %d, please choose one.", userRequestedURL.Revision, d.revision) diff --git a/cmd/juju/application/deployer/deployer_test.go b/cmd/juju/application/deployer/deployer_test.go index ab6f0358002..164bb884d38 100644 --- a/cmd/juju/application/deployer/deployer_test.go +++ b/cmd/juju/application/deployer/deployer_test.go @@ -152,6 +152,7 @@ func (s *deployerSuite) TestGetDeployerCharmStoreCharmWithRevision(c *gc.C) { func (s *deployerSuite) TestGetDeployerCharmHubCharmWithRevision(c *gc.C) { cfg := s.channelDeployerConfig() cfg.Revision = 42 + cfg.Channel, _ = charm.ParseChannel("stable") ch := charm.MustParseURL("ch:test-charm") deployer, err := s.testGetDeployerRepositoryCharmWithRevision(c, ch, cfg) c.Assert(err, jc.ErrorIsNil) diff --git a/cmd/juju/application/deployer/series_selector_test.go b/cmd/juju/application/deployer/series_selector_test.go index cba4fc2ed9f..b79f646ec3c 100644 --- a/cmd/juju/application/deployer/series_selector_test.go +++ b/cmd/juju/application/deployer/series_selector_test.go @@ -204,7 +204,7 @@ func (s *SeriesSelectorSuite) TestCharmSeries(c *gc.C) { conf: defaultSeries{}, supportedJujuSeries: set.NewStrings("bionic", "cosmic"), }, - err: `series "bionic" not supported by charm, supported series are: utopic,vivid`, + err: `series "bionic" not supported by charm, supported series are: utopic, vivid`, }, { title: "juju deploy multiseries --series=bionic --force # unsupported forced", @@ -254,7 +254,7 @@ func (s *SeriesSelectorSuite) TestCharmSeries(c *gc.C) { supportedSeries: []string{"bionic", "utopic", "vivid"}, conf: defaultSeries{}, }, - err: `series "cosmic" not supported by charm, supported series are: bionic,utopic,vivid`, + err: `series "cosmic" not supported by charm, supported series are: bionic, utopic, vivid`, }, { title: "juju deploy bionic/multiseries --series=cosmic # unsupported series", From 288323c2ca45c17281311e5e298a7caa56de584f Mon Sep 17 00:00:00 2001 From: Heather Lanigan Date: Mon, 2 May 2022 11:42:32 -0400 Subject: [PATCH 4/9] Restore apiserver errors. The call is done inside of core, so it cannot be done there. --- cmd/juju/application/store/charmadapter.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd/juju/application/store/charmadapter.go b/cmd/juju/application/store/charmadapter.go index 2de5f1dfeaf..7e2ad3f2e18 100644 --- a/cmd/juju/application/store/charmadapter.go +++ b/cmd/juju/application/store/charmadapter.go @@ -13,6 +13,7 @@ import ( apicharm "github.com/juju/juju/api/client/charms" commoncharm "github.com/juju/juju/api/common/charm" + apiservererrors "github.com/juju/juju/apiserver/errors" "github.com/juju/juju/charmhub" "github.com/juju/juju/charmhub/transport" ) @@ -109,7 +110,9 @@ func (c *CharmAdaptor) resolveCharmFallback(url *charm.URL, preferredOrigin comm resultURL, channel, supportedSeries, err := charmRepo.ResolveWithPreferredChannel(url, csparams.Channel(preferredOrigin.Risk)) if err != nil { - return nil, commoncharm.Origin{}, nil, errors.Trace(err) + // Ideally the would be restored before now, however the + // callee is in the core package, let's not add dependecies there. + return nil, commoncharm.Origin{}, nil, errors.Trace(apiservererrors.RestoreError(err)) } origin := preferredOrigin origin.Risk = string(channel) From eecc41ea6755ec5db4b40f11b8697d65d48cbd17 Mon Sep 17 00:00:00 2001 From: Heather Lanigan Date: Wed, 4 May 2022 13:59:59 -0400 Subject: [PATCH 5/9] Avoid 'not valid not valid', use NewNotValid instead of NotValidf --- apiserver/errors/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apiserver/errors/errors.go b/apiserver/errors/errors.go index b53765bb779..9c5e60d8fe5 100644 --- a/apiserver/errors/errors.go +++ b/apiserver/errors/errors.go @@ -373,7 +373,7 @@ func RestoreError(err error) error { case params.IsCodeTryAgain(err): return ErrTryAgain case params.IsCodeNotValid(err): - return errors.NotValidf(msg) + return errors.NewNotValid(nil, msg) default: return err } From 7e90fe34468d77b5e39f7608c9bae7f10ca663f7 Mon Sep 17 00:00:00 2001 From: Heather Lanigan Date: Wed, 4 May 2022 14:03:01 -0400 Subject: [PATCH 6/9] Add Code to error messages in test. Needed to pass tests after NotValid errors added to apiserver errors for translating the type over the wire. --- apiserver/apiserver_test.go | 2 +- .../facades/agent/secretsmanager/secrets_test.go | 12 ++++++------ .../storageprovisioner/storageprovisioner_test.go | 2 +- apiserver/facades/agent/uniter/uniter_test.go | 1 + apiserver/registration_test.go | 4 ++-- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/apiserver/apiserver_test.go b/apiserver/apiserver_test.go index 894333c8efe..1982e3dab98 100644 --- a/apiserver/apiserver_test.go +++ b/apiserver/apiserver_test.go @@ -432,7 +432,7 @@ func (s *apiserverSuite) TestEmbeddedCommandInvalidUser(c *gc.C) { User: "123@", Commands: []string{"status --color"}, } - s.assertEmbeddedCommand(c, cmdArgs, "", ¶ms.Error{Message: `user name "123@" not valid`}) + s.assertEmbeddedCommand(c, cmdArgs, "", ¶ms.Error{Message: `user name "123@" not valid`, Code: params.CodeNotValid}) } func (s *apiserverSuite) TestEmbeddedCommandInvalidMacaroon(c *gc.C) { diff --git a/apiserver/facades/agent/secretsmanager/secrets_test.go b/apiserver/facades/agent/secretsmanager/secrets_test.go index 967d4f00f05..ae21b0cdded 100644 --- a/apiserver/facades/agent/secretsmanager/secrets_test.go +++ b/apiserver/facades/agent/secretsmanager/secrets_test.go @@ -126,9 +126,9 @@ func (s *SecretsManagerSuite) TestCreateSecrets(c *gc.C) { Results: []params.StringResult{{ Result: URL.WithRevision(1).ShortString(), }, { - Error: ¶ms.Error{Message: `rotate interval "-1h0m0s" not valid`}, + Error: ¶ms.Error{Message: `rotate interval "-1h0m0s" not valid`, Code: params.CodeNotValid}, }, { - Error: ¶ms.Error{Message: `empty secret value not valid`}, + Error: ¶ms.Error{Message: `empty secret value not valid`, Code: params.CodeNotValid}, }}, }) } @@ -201,15 +201,15 @@ func (s *SecretsManagerSuite) TestUpdateSecrets(c *gc.C) { }, { Error: ¶ms.Error{Message: `at least one attribute to update must be specified`}, }, { - Error: ¶ms.Error{Message: `rotate interval -1h0m0s not valid`}, + Error: ¶ms.Error{Code: params.CodeNotValid, Message: `rotate interval -1h0m0s not valid`}, }, { Error: ¶ms.Error{Code: "not supported", Message: `updating a single secret attribute "password" not supported`}, }, { Error: ¶ms.Error{Code: "not supported", Message: `updating secret revision 2 not supported`}, }, { - Error: ¶ms.Error{Code: "", Message: `secret URL with controller UUID "deadbeef-1bad-500d-9000-4b1d0d061111" not valid`}, + Error: ¶ms.Error{Code: params.CodeNotValid, Message: `secret URL with controller UUID "deadbeef-1bad-500d-9000-4b1d0d061111" not valid`}, }, { - Error: ¶ms.Error{Code: "", Message: `secret URL with model UUID "deadbeef-1bad-500d-9000-4b1d0d061111" not valid`}, + Error: ¶ms.Error{Code: params.CodeNotValid, Message: `secret URL with model UUID "deadbeef-1bad-500d-9000-4b1d0d061111" not valid`}, }}, }) } @@ -328,7 +328,7 @@ func (s *SecretsManagerSuite) TestSecretsRotated(c *gc.C) { Error: ¶ms.Error{Code: "", Message: `boom`}, }, { - Error: ¶ms.Error{Code: "", Message: `secret URL scheme "" not valid`}, + Error: ¶ms.Error{Code: params.CodeNotValid, Message: `secret URL scheme "" not valid`}, }, }, }) diff --git a/apiserver/facades/agent/storageprovisioner/storageprovisioner_test.go b/apiserver/facades/agent/storageprovisioner/storageprovisioner_test.go index b6081c15a4f..0c2d905b085 100644 --- a/apiserver/facades/agent/storageprovisioner/storageprovisioner_test.go +++ b/apiserver/facades/agent/storageprovisioner/storageprovisioner_test.go @@ -1307,7 +1307,7 @@ func (s *iaasProvisionerSuite) TestVolumeBlockDevices(c *gc.C) { {Error: apiservertesting.ErrUnauthorized}, {Error: apiservertesting.ErrUnauthorized}, {Error: apiservertesting.ErrUnauthorized}, - {Error: ¶ms.Error{Message: `volume attachment host tag "application-mysql" not valid`}}, + {Error: ¶ms.Error{Code: params.CodeNotValid, Message: `volume attachment host tag "application-mysql" not valid`}}, }, }) } diff --git a/apiserver/facades/agent/uniter/uniter_test.go b/apiserver/facades/agent/uniter/uniter_test.go index 6d401dc9f65..b2df43ae4fb 100644 --- a/apiserver/facades/agent/uniter/uniter_test.go +++ b/apiserver/facades/agent/uniter/uniter_test.go @@ -4646,6 +4646,7 @@ func (s *uniterNetworkInfoSuite) TestNetworkInfoPermissions(c *gc.C) { Results: map[string]params.NetworkInfoResult{ "unknown": { Error: ¶ms.Error{ + Code: params.CodeNotValid, Message: `undefined for unit charm: endpoint "unknown" not valid`, }, }, diff --git a/apiserver/registration_test.go b/apiserver/registration_test.go index 21b53c80be9..e009771956f 100644 --- a/apiserver/registration_test.go +++ b/apiserver/registration_test.go @@ -119,7 +119,7 @@ func (s *registrationSuite) TestRegisterInvalidUserTag(c *gc.C) { func (s *registrationSuite) TestRegisterInvalidNonce(c *gc.C) { s.testInvalidRequest( - c, `{"user": "user-bob", "nonce": ""}`, `nonce not valid`, "", + c, `{"user": "user-bob", "nonce": ""}`, `nonce not valid`, params.CodeNotValid, http.StatusInternalServerError, ) } @@ -130,7 +130,7 @@ func (s *registrationSuite) TestRegisterInvalidCiphertext(c *gc.C) { fmt.Sprintf( `{"user": "user-bob", "nonce": "%s"}`, base64.StdEncoding.EncodeToString(validNonce), - ), `secret key not valid`, "", + ), `secret key not valid`, params.CodeNotValid, http.StatusInternalServerError, ) } From 04907759406280c74e6b4e226f536e26a972d44c Mon Sep 17 00:00:00 2001 From: hmlanigan Date: Fri, 6 May 2022 09:27:28 -0400 Subject: [PATCH 7/9] Fix misspelling in verified. Co-authored-by: John Arbash Meinel --- cmd/juju/application/deploy.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/juju/application/deploy.go b/cmd/juju/application/deploy.go index a334393fbfa..632537ee9b2 100644 --- a/cmd/juju/application/deploy.go +++ b/cmd/juju/application/deploy.go @@ -671,7 +671,7 @@ func (c *DeployCommand) Init(args []string) error { // also required. It's required to ensure that juju knows which channel // should be used for refreshing/upgrading the charm in the future.However // a bundle does not require a channel, today you cannot refresh/upgrade - // a bundle, only the components. These flags will be varified in the + // a bundle, only the components. These flags will be verified in the // GetDeployer instead. if err := c.validateStorageByModelType(); err != nil { if !errors.IsNotFound(err) { From 9a33ad56787ae38accd2d1c95511c36252dcbbb1 Mon Sep 17 00:00:00 2001 From: Heather Lanigan Date: Tue, 10 May 2022 09:48:18 -0400 Subject: [PATCH 8/9] Update charm/v8 to pickup change in ParseChannel error types. --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 193463f0b43..55f28a104ef 100644 --- a/go.mod +++ b/go.mod @@ -43,7 +43,7 @@ require ( github.com/im7mortal/kmutex v1.0.1 github.com/juju/ansiterm v0.0.0-20210929141451-8b71cc96ebdc github.com/juju/blobstore/v2 v2.0.0-20220204135513-4876189e56a4 - github.com/juju/charm/v8 v8.0.0-20220207013334-ec6de7e9b78e + github.com/juju/charm/v8 v8.0.0-20220509231111-ed6d505a46f4 github.com/juju/charmrepo/v6 v6.0.0-20220207014006-e6af52d614e4 github.com/juju/clock v0.0.0-20220203021603-d9deb868a28a github.com/juju/cmd/v3 v3.0.0-20220203030511-039f3566372a diff --git a/go.sum b/go.sum index e81fcbc6994..df5f7c5bbe6 100644 --- a/go.sum +++ b/go.sum @@ -434,8 +434,8 @@ github.com/juju/ansiterm v0.0.0-20210929141451-8b71cc96ebdc h1:ZQrgZFsLzkw7o3CoD github.com/juju/ansiterm v0.0.0-20210929141451-8b71cc96ebdc/go.mod h1:PyXUpnI3olx3bsPcHt98FGPX/KCFZ1Fi+hw1XLI6384= github.com/juju/blobstore/v2 v2.0.0-20220204135513-4876189e56a4 h1:OQVAtaX0oZQX1roCwPMXM7DSnmlvDQXxxcl6tn73GiU= github.com/juju/blobstore/v2 v2.0.0-20220204135513-4876189e56a4/go.mod h1:lFTSngYRJBy/mUOWUjAghwKcP0iXxqBYqJtuchC3cJI= -github.com/juju/charm/v8 v8.0.0-20220207013334-ec6de7e9b78e h1:fu+YIqgQbwlSl1Wird+vnZDqmLhk0LqjcDiZZvA9MQk= -github.com/juju/charm/v8 v8.0.0-20220207013334-ec6de7e9b78e/go.mod h1:tZ0JfWOdv11qu4Gm5lPD0KHBeuVUH2vbrKFyYS6JUAw= +github.com/juju/charm/v8 v8.0.0-20220509231111-ed6d505a46f4 h1:7Zqo515Y4k21nJtf5tC6vyVx3tw4jyd67HfXoSV60Z0= +github.com/juju/charm/v8 v8.0.0-20220509231111-ed6d505a46f4/go.mod h1:tZ0JfWOdv11qu4Gm5lPD0KHBeuVUH2vbrKFyYS6JUAw= github.com/juju/charmrepo/v6 v6.0.0-20220207014006-e6af52d614e4 h1:mx+an4ZTHZ+VYufUfniTz9P2MzBqdnua57bLkIq2VXE= github.com/juju/charmrepo/v6 v6.0.0-20220207014006-e6af52d614e4/go.mod h1:JvfFzbn5ckwtdB4UW2xIy4jG62ulPPlMf0+S1PZsO2k= github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c/go.mod h1:nD0vlnrUjcjJhqN5WuCWZyzfd5AHZAC9/ajvbSx69xA= From cda7fa06e0fb0a3b657dd35d7d3de367f57e34df Mon Sep 17 00:00:00 2001 From: Heather Lanigan Date: Wed, 11 May 2022 09:58:32 -0400 Subject: [PATCH 9/9] Add Code to error messages in test. Needed to pass tests after NotValid errors added to apiserver errors for translating the type over the wire. --- apiserver/facades/client/cloud/instance_information_test.go | 2 +- apiserver/facades/client/metricsdebug/metricsdebug_test.go | 2 +- apiserver/facades/client/storage/storage_test.go | 2 +- core/charm/repository/charmhub_test.go | 2 +- worker/uniter/runner/context/context_test.go | 1 + 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apiserver/facades/client/cloud/instance_information_test.go b/apiserver/facades/client/cloud/instance_information_test.go index d493e257814..b39d8091a63 100644 --- a/apiserver/facades/client/cloud/instance_information_test.go +++ b/apiserver/facades/client/cloud/instance_information_test.go @@ -97,7 +97,7 @@ func (p *instanceTypesSuite) TestInstanceTypes(c *gc.C) { { Error: ¶ms.Error{Message: "Instances matching constraint not found", Code: "not found"}}, { - Error: ¶ms.Error{Message: "asking gce cloud information to aws cloud not valid", Code: ""}}} + Error: ¶ms.Error{Message: "asking gce cloud information to aws cloud not valid", Code: "not valid"}}} c.Assert(r.Results, gc.DeepEquals, expected) } diff --git a/apiserver/facades/client/metricsdebug/metricsdebug_test.go b/apiserver/facades/client/metricsdebug/metricsdebug_test.go index d4f9c2e4c45..8878cfa9410 100644 --- a/apiserver/facades/client/metricsdebug/metricsdebug_test.go +++ b/apiserver/facades/client/metricsdebug/metricsdebug_test.go @@ -142,7 +142,7 @@ func (s *metricsDebugSuite) TestSetMeterStatus(c *gc.C) { }, assert: func(c *gc.C, results params.ErrorResults) { err := results.OneError() - c.Assert(err, gc.DeepEquals, ¶ms.Error{Message: "meter status \"NOT AVAILABLE\" not valid"}) + c.Assert(err, gc.DeepEquals, ¶ms.Error{Message: "meter status \"NOT AVAILABLE\" not valid", Code: params.CodeNotValid}) }, }, { about: "not such application", diff --git a/apiserver/facades/client/storage/storage_test.go b/apiserver/facades/client/storage/storage_test.go index 86ba6d55ed8..cf9265a493b 100644 --- a/apiserver/facades/client/storage/storage_test.go +++ b/apiserver/facades/client/storage/storage_test.go @@ -829,7 +829,7 @@ func (s *storageSuite) TestImportValidationErrors(c *gc.C) { c.Assert(err, jc.ErrorIsNil) c.Assert(results.Results, jc.DeepEquals, []params.ImportStorageResult{ {Error: ¶ms.Error{Message: `storage kind "block" not supported`, Code: "not supported"}}, - {Error: ¶ms.Error{Message: `pool name "123" not valid`}}, + {Error: ¶ms.Error{Message: `pool name "123" not valid`, Code: `not valid`}}, }) } diff --git a/core/charm/repository/charmhub_test.go b/core/charm/repository/charmhub_test.go index c9eed5bf304..feab0340823 100644 --- a/core/charm/repository/charmhub_test.go +++ b/core/charm/repository/charmhub_test.go @@ -751,7 +751,7 @@ func (selectNextBaseSuite) TestSelectNextBaseWithInvalidBaseChannel(c *gc.C) { Architecture: "amd64", }, }) - c.Assert(err, gc.ErrorMatches, `base: channel cannot be empty`) + c.Assert(err, gc.ErrorMatches, `base: empty channel not valid`) } func (selectNextBaseSuite) TestSelectNextBaseWithValidBases(c *gc.C) { diff --git a/worker/uniter/runner/context/context_test.go b/worker/uniter/runner/context/context_test.go index cc6323c8d27..8e3c2d0b02b 100644 --- a/worker/uniter/runner/context/context_test.go +++ b/worker/uniter/runner/context/context_test.go @@ -135,6 +135,7 @@ func (s *InterfaceSuite) TestUnitNetworkInfo(c *gc.C) { "unknown": { Error: ¶ms.Error{ Message: `undefined for unit charm: endpoint "unknown" not valid`, + Code: params.CodeNotValid, }, }, },