refactor: update errors to include error codes

This commit is contained in:
A-440Hz committed 2022-03-08 16:12:16 -08:00
1 parent 6ce3e27677
commit 4656760fb8
4 files changed
+199 -152

No files matched your search

+116 -95
View File
@@ -19,22 +19,22 @@ import (
func TestPluginOnCreateCatalogErr(t *testing.T) {
cases := []struct {
name string
req *pb.OnCreateCatalogRequest
opts []awsCatalogPersistedStateOption
expectedErr string
name string
req *pb.OnCreateCatalogRequest
opts []awsCatalogPersistedStateOption
expectedErrContains string
}{
{
name: "nil catalog",
req: &pb.OnCreateCatalogRequest{},
expectedErr: "catalog is nil",
name: "nil catalog",
req: &pb.OnCreateCatalogRequest{},
expectedErrContains: "catalog is nil",
},
{
name: "nil secrets",
req: &pb.OnCreateCatalogRequest{
Catalog: &hostcatalogs.HostCatalog{},
},
expectedErr: "secrets are required",
expectedErrContains: "secrets are required",
},
{
name: "nil attributes",
@@ -43,7 +43,7 @@ func TestPluginOnCreateCatalogErr(t *testing.T) {
Secrets: new(structpb.Struct),
},
},
expectedErr: "attributes are required",
expectedErrContains: "attributes are required",
},
{
name: "error reading attributes",
@@ -53,7 +53,7 @@ func TestPluginOnCreateCatalogErr(t *testing.T) {
Attributes: new(structpb.Struct),
},
},
expectedErr: "missing required value \"region\"",
expectedErrContains: "missing required value \"region\"",
},
{
name: "error reading secrets",
@@ -65,7 +65,7 @@ func TestPluginOnCreateCatalogErr(t *testing.T) {
}),
},
},
expectedErr: "missing required value \"access_key_id\"",
expectedErrContains: "missing required value \"access_key_id\"",
},
{
name: "invalid region",
@@ -80,7 +80,7 @@ func TestPluginOnCreateCatalogErr(t *testing.T) {
}),
},
},
expectedErr: "not a valid region: foobar",
expectedErrContains: "not a valid region: foobar",
},
{
name: "persisted state setup error",
@@ -100,7 +100,7 @@ func TestPluginOnCreateCatalogErr(t *testing.T) {
return errors.New(testOptionErr)
},
},
expectedErr: fmt.Sprintf("error setting up persisted state: %s", testOptionErr),
expectedErrContains: fmt.Sprintf("error setting up persisted state: %s", testOptionErr),
},
{
name: "rotation error",
@@ -124,7 +124,7 @@ func TestPluginOnCreateCatalogErr(t *testing.T) {
),
}),
},
expectedErr: fmt.Sprintf("error during credential rotation: error rotating credentials: error calling CreateAccessKey: error calling aws.GetUser: %s", testGetUserErr),
expectedErrContains: fmt.Sprintf("error during credential rotation: error rotating credentials: error calling CreateAccessKey: error calling aws.GetUser: %s", testGetUserErr),
},
{
name: "validation error",
@@ -149,7 +149,7 @@ func TestPluginOnCreateCatalogErr(t *testing.T) {
),
}),
},
expectedErr: fmt.Sprintf("error during credential validation: error validating credentials: %s", testGetCallerIdentityErr),
expectedErrContains: fmt.Sprintf("error during credential validation: error validating credentials: %s", testGetCallerIdentityErr),
},
}
@@ -161,22 +161,22 @@ func TestPluginOnCreateCatalogErr(t *testing.T) {
testStateOpts: tc.opts,
}
_, err := p.OnCreateCatalog(context.Background(), tc.req)
require.EqualError(err, tc.expectedErr)
require.Contains(err.Error(), tc.expectedErrContains)
})
}
}
func TestPluginOnUpdateCatalogErr(t *testing.T) {
cases := []struct {
name string
req *pb.OnUpdateCatalogRequest
opts []awsCatalogPersistedStateOption
expectedErr string
name string
req *pb.OnUpdateCatalogRequest
opts []awsCatalogPersistedStateOption
expectedErrContains string
}{
{
name: "nil new catalog",
req: &pb.OnUpdateCatalogRequest{},
expectedErr: "new catalog is nil",
name: "nil new catalog",
req: &pb.OnUpdateCatalogRequest{},
expectedErrContains: "new catalog is nil",
},
{
name: "nil new attributes",
@@ -185,7 +185,7 @@ func TestPluginOnUpdateCatalogErr(t *testing.T) {
Secrets: new(structpb.Struct),
},
},
expectedErr: "new catalog missing attributes",
expectedErrContains: "new catalog missing attributes",
},
{
name: "error reading attributes",
@@ -195,7 +195,7 @@ func TestPluginOnUpdateCatalogErr(t *testing.T) {
Attributes: new(structpb.Struct),
},
},
expectedErr: "missing required value \"region\"",
expectedErrContains: "missing required value \"region\"",
},
{
name: "invalid region",
@@ -206,7 +206,7 @@ func TestPluginOnUpdateCatalogErr(t *testing.T) {
}),
},
},
expectedErr: "not a valid region: foobar",
expectedErrContains: "not a valid region: foobar",
},
{
name: "persisted state setup error",
@@ -229,7 +229,7 @@ func TestPluginOnUpdateCatalogErr(t *testing.T) {
return errors.New(testOptionErr)
},
},
expectedErr: fmt.Sprintf("error loading persisted state: %s", testOptionErr),
expectedErrContains: fmt.Sprintf("error loading persisted state: %s", testOptionErr),
},
{
name: "cannot disable rotation for already rotated credentials",
@@ -248,7 +248,7 @@ func TestPluginOnUpdateCatalogErr(t *testing.T) {
}),
},
},
expectedErr: "cannot disable rotation for already-rotated credentials",
expectedErrContains: "cannot disable rotation for already-rotated credentials",
},
{
name: "error reading secrets",
@@ -267,7 +267,7 @@ func TestPluginOnUpdateCatalogErr(t *testing.T) {
}),
},
},
expectedErr: "missing required value \"access_key_id\"",
expectedErrContains: "missing required value \"access_key_id\"",
},
{
name: "updating secrets, replace error",
@@ -299,7 +299,7 @@ func TestPluginOnUpdateCatalogErr(t *testing.T) {
),
}),
},
expectedErr: fmt.Sprintf("error attempting to replace credentials: error deleting old access key: %s", testDeleteAccessKeyErr),
expectedErrContains: fmt.Sprintf("error attempting to replace credentials: error deleting old access key: %s", testDeleteAccessKeyErr),
},
{
name: "rotation error",
@@ -325,7 +325,7 @@ func TestPluginOnUpdateCatalogErr(t *testing.T) {
),
}),
},
expectedErr: fmt.Sprintf("error during credential rotation: error rotating credentials: error calling CreateAccessKey: error calling aws.GetUser: %s", testGetUserErr),
expectedErrContains: fmt.Sprintf("error during credential rotation: error rotating credentials: error calling CreateAccessKey: error calling aws.GetUser: %s", testGetUserErr),
},
}
@@ -337,17 +337,17 @@ func TestPluginOnUpdateCatalogErr(t *testing.T) {
testStateOpts: tc.opts,
}
_, err := p.OnUpdateCatalog(context.Background(), tc.req)
require.EqualError(err, tc.expectedErr)
require.Contains(err.Error(), tc.expectedErrContains)
})
}
}
func TestPluginOnDeleteCatalogErr(t *testing.T) {
cases := []struct {
name string
req *pb.OnDeleteCatalogRequest
opts []awsCatalogPersistedStateOption
expectedErr string
name string
req *pb.OnDeleteCatalogRequest
opts []awsCatalogPersistedStateOption
expectedErrContains string
}{
{
name: "persisted state setup error",
@@ -370,7 +370,7 @@ func TestPluginOnDeleteCatalogErr(t *testing.T) {
return errors.New(testOptionErr)
},
},
expectedErr: fmt.Sprintf("error loading persisted state: %s", testOptionErr),
expectedErrContains: fmt.Sprintf("error loading persisted state: %s", testOptionErr),
},
{
name: "delete error",
@@ -397,7 +397,7 @@ func TestPluginOnDeleteCatalogErr(t *testing.T) {
),
}),
},
expectedErr: fmt.Sprintf("error removing rotated credentials during catalog deletion: error deleting old access key: %s", testDeleteAccessKeyErr),
expectedErrContains: fmt.Sprintf("error removing rotated credentials during catalog deletion: error deleting old access key: %s", testDeleteAccessKeyErr),
},
}
@@ -409,22 +409,23 @@ func TestPluginOnDeleteCatalogErr(t *testing.T) {
testStateOpts: tc.opts,
}
_, err := p.OnDeleteCatalog(context.Background(), tc.req)
require.EqualError(err, tc.expectedErr)
require.Contains(err.Error(), tc.expectedErrContains)
})
}
}
func TestPluginOnCreateSetErr(t *testing.T) {
cases := []struct {
name string
req *pb.OnCreateSetRequest
opts []awsCatalogPersistedStateOption
expectedErr string
name string
req *pb.OnCreateSetRequest
opts []awsCatalogPersistedStateOption
expectedErrContains string
expectedErrContains2 string
}{
{
name: "nil catalog",
req: &pb.OnCreateSetRequest{},
expectedErr: "catalog is nil",
name: "nil catalog",
req: &pb.OnCreateSetRequest{},
expectedErrContains: "catalog is nil",
},
{
name: "nil catalog attributes",
@@ -433,7 +434,7 @@ func TestPluginOnCreateSetErr(t *testing.T) {
Secrets: new(structpb.Struct),
},
},
expectedErr: "catalog missing attributes",
expectedErrContains: "catalog missing attributes",
},
{
name: "error reading catalog attributes",
@@ -443,7 +444,8 @@ func TestPluginOnCreateSetErr(t *testing.T) {
Attributes: new(structpb.Struct),
},
},
expectedErr: "integrity error in host catalog attributes: missing required value \"region\"",
expectedErrContains: "integrity error in host catalog attributes: ",
expectedErrContains2: "missing required value \"region\"",
},
{
name: "invalid region",
@@ -454,7 +456,8 @@ func TestPluginOnCreateSetErr(t *testing.T) {
}),
},
},
expectedErr: "integrity error in host catalog attributes: not a valid region: foobar",
expectedErrContains: "integrity error in host catalog attributes: ",
expectedErrContains2: "not a valid region: foobar",
},
{
name: "persisted state setup error",
@@ -477,7 +480,7 @@ func TestPluginOnCreateSetErr(t *testing.T) {
return errors.New(testOptionErr)
},
},
expectedErr: fmt.Sprintf("error loading persisted state: %s", testOptionErr),
expectedErrContains: fmt.Sprintf("error loading persisted state: %s", testOptionErr),
},
{
name: "nil set",
@@ -495,7 +498,7 @@ func TestPluginOnCreateSetErr(t *testing.T) {
}),
},
},
expectedErr: "set is nil",
expectedErrContains: "set is nil",
},
{
name: "nil attributes in set",
@@ -514,7 +517,7 @@ func TestPluginOnCreateSetErr(t *testing.T) {
},
Set: &hostsets.HostSet{},
},
expectedErr: "set missing attributes",
expectedErrContains: "set missing attributes",
},
{
name: "set attribute load error",
@@ -538,7 +541,8 @@ func TestPluginOnCreateSetErr(t *testing.T) {
}),
},
},
expectedErr: "error parsing set attributes: unknown set attribute fields provided: bar, foo",
expectedErrContains: "error parsing set attributes: ",
expectedErrContains2: "unknown set attribute fields provided: bar, foo",
},
{
name: "client load error",
@@ -566,7 +570,7 @@ func TestPluginOnCreateSetErr(t *testing.T) {
awsutil.MockOptionErr(errors.New(testOptionErr)),
}),
},
expectedErr: fmt.Sprintf("error getting EC2 client: error getting AWS session: error reading options in NewCredentialsConfig: %s", testOptionErr),
expectedErrContains: fmt.Sprintf("error getting EC2 client: error getting AWS session: error reading options in NewCredentialsConfig: %s", testOptionErr),
},
{
name: "DescribeInstances error",
@@ -595,7 +599,7 @@ func TestPluginOnCreateSetErr(t *testing.T) {
testMockEC2WithDescribeInstancesError(errors.New(testDescribeInstancesError)),
)),
},
expectedErr: fmt.Sprintf("error performing dry run of DescribeInstances: %s", testDescribeInstancesError),
expectedErrContains: fmt.Sprintf("error performing dry run of DescribeInstances: %s", testDescribeInstancesError),
},
{
name: "DescribeInstances non-error array filter",
@@ -623,7 +627,7 @@ func TestPluginOnCreateSetErr(t *testing.T) {
nil,
)),
},
expectedErr: "query error: DescribeInstances DryRun should have returned error, but none was found",
expectedErrContains: "query error: DescribeInstances DryRun should have returned error, but none was found",
},
{
name: "DescribeInstances non-error string filter",
@@ -651,7 +655,7 @@ func TestPluginOnCreateSetErr(t *testing.T) {
nil,
)),
},
expectedErr: "query error: DescribeInstances DryRun should have returned error, but none was found",
expectedErrContains: "query error: DescribeInstances DryRun should have returned error, but none was found",
},
}
@@ -663,22 +667,26 @@ func TestPluginOnCreateSetErr(t *testing.T) {
testStateOpts: tc.opts,
}
_, err := p.OnCreateSet(context.Background(), tc.req)
require.EqualError(err, tc.expectedErr)
require.Contains(err.Error(), tc.expectedErrContains)
if tc.expectedErrContains2 != "" {
require.Contains(err.Error(), tc.expectedErrContains2)
}
})
}
}
func TestPluginOnUpdateSetErr(t *testing.T) {
cases := []struct {
name string
req *pb.OnUpdateSetRequest
opts []awsCatalogPersistedStateOption
expectedErr string
name string
req *pb.OnUpdateSetRequest
opts []awsCatalogPersistedStateOption
expectedErrContains string
expectedErrContains2 string
}{
{
name: "nil catalog",
req: &pb.OnUpdateSetRequest{},
expectedErr: "catalog is nil",
name: "nil catalog",
req: &pb.OnUpdateSetRequest{},
expectedErrContains: "catalog is nil",
},
{
name: "nil catalog attributes",
@@ -687,7 +695,7 @@ func TestPluginOnUpdateSetErr(t *testing.T) {
Secrets: new(structpb.Struct),
},
},
expectedErr: "catalog missing attributes",
expectedErrContains: "catalog missing attributes",
},
{
name: "catalog attribute load error",
@@ -697,7 +705,8 @@ func TestPluginOnUpdateSetErr(t *testing.T) {
Attributes: new(structpb.Struct),
},
},
expectedErr: "integrity error in host catalog attributes: missing required value \"region\"",
expectedErrContains: "integrity error in host catalog attributes: ",
expectedErrContains2: "missing required value \"region\"",
},
{
name: "invalid region",
@@ -709,7 +718,8 @@ func TestPluginOnUpdateSetErr(t *testing.T) {
}),
},
},
expectedErr: "integrity error in host catalog attributes: not a valid region: foobar",
expectedErrContains: "integrity error in host catalog attributes: ",
expectedErrContains2: "not a valid region: foobar",
},
{
name: "persisted state setup error",
@@ -732,7 +742,7 @@ func TestPluginOnUpdateSetErr(t *testing.T) {
return errors.New(testOptionErr)
},
},
expectedErr: fmt.Sprintf("error loading persisted state: %s", testOptionErr),
expectedErrContains: fmt.Sprintf("error loading persisted state: %s", testOptionErr),
},
{
name: "nil set",
@@ -750,7 +760,7 @@ func TestPluginOnUpdateSetErr(t *testing.T) {
}),
},
},
expectedErr: "new set is nil",
expectedErrContains: "new set is nil",
},
{
name: "nil attributes in set",
@@ -769,7 +779,7 @@ func TestPluginOnUpdateSetErr(t *testing.T) {
},
NewSet: &hostsets.HostSet{},
},
expectedErr: "new set missing attributes",
expectedErrContains: "new set missing attributes",
},
{
name: "set attribute load error",
@@ -793,7 +803,8 @@ func TestPluginOnUpdateSetErr(t *testing.T) {
}),
},
},
expectedErr: "error parsing set attributes: unknown set attribute fields provided: bar, foo",
expectedErrContains: "error parsing set attributes: ",
expectedErrContains2: "unknown set attribute fields provided: bar, foo",
},
{
name: "client load error",
@@ -821,7 +832,7 @@ func TestPluginOnUpdateSetErr(t *testing.T) {
awsutil.MockOptionErr(errors.New(testOptionErr)),
}),
},
expectedErr: fmt.Sprintf("error getting EC2 client: error getting AWS session: error reading options in NewCredentialsConfig: %s", testOptionErr),
expectedErrContains: fmt.Sprintf("error getting EC2 client: error getting AWS session: error reading options in NewCredentialsConfig: %s", testOptionErr),
},
{
name: "DescribeInstances error",
@@ -850,7 +861,7 @@ func TestPluginOnUpdateSetErr(t *testing.T) {
testMockEC2WithDescribeInstancesError(errors.New(testDescribeInstancesError)),
)),
},
expectedErr: fmt.Sprintf("error performing dry run of DescribeInstances: %s", testDescribeInstancesError),
expectedErrContains: fmt.Sprintf("error performing dry run of DescribeInstances: %s", testDescribeInstancesError),
},
{
name: "DescribeInstances non-error",
@@ -878,7 +889,7 @@ func TestPluginOnUpdateSetErr(t *testing.T) {
nil,
)),
},
expectedErr: "query error: DescribeInstances DryRun should have returned error, but none was found",
expectedErrContains: "query error: DescribeInstances DryRun should have returned error, but none was found",
},
}
@@ -890,22 +901,26 @@ func TestPluginOnUpdateSetErr(t *testing.T) {
testStateOpts: tc.opts,
}
_, err := p.OnUpdateSet(context.Background(), tc.req)
require.EqualError(err, tc.expectedErr)
require.Contains(err.Error(), tc.expectedErrContains)
if tc.expectedErrContains2 != "" {
require.Contains(err.Error(), tc.expectedErrContains2)
}
})
}
}
func TestPluginListHostsErr(t *testing.T) {
cases := []struct {
name string
req *pb.ListHostsRequest
opts []awsCatalogPersistedStateOption
expectedErr string
name string
req *pb.ListHostsRequest
opts []awsCatalogPersistedStateOption
expectedErrContains string
expectedErrContains2 string
}{
{
name: "nil catalog",
req: &pb.ListHostsRequest{},
expectedErr: "catalog is nil",
name: "nil catalog",
req: &pb.ListHostsRequest{},
expectedErrContains: "catalog is nil",
},
{
name: "nil catalog attributes",
@@ -914,7 +929,7 @@ func TestPluginListHostsErr(t *testing.T) {
Secrets: new(structpb.Struct),
},
},
expectedErr: "catalog missing attributes",
expectedErrContains: "catalog missing attributes",
},
{
name: "error reading catalog attributes",
@@ -924,7 +939,8 @@ func TestPluginListHostsErr(t *testing.T) {
Attributes: new(structpb.Struct),
},
},
expectedErr: "integrity error in host catalog attributes: missing required value \"region\"",
expectedErrContains: "integrity error in host catalog attributes: ",
expectedErrContains2: "missing required value \"region\"",
},
{
name: "invalid region",
@@ -936,7 +952,8 @@ func TestPluginListHostsErr(t *testing.T) {
}),
},
},
expectedErr: "integrity error in host catalog attributes: not a valid region: foobar",
expectedErrContains: "integrity error in host catalog attributes: ",
expectedErrContains2: "not a valid region: foobar",
},
{
name: "persisted state setup error",
@@ -959,7 +976,7 @@ func TestPluginListHostsErr(t *testing.T) {
return errors.New(testOptionErr)
},
},
expectedErr: fmt.Sprintf("error loading persisted state: %s", testOptionErr),
expectedErrContains: fmt.Sprintf("error loading persisted state: %s", testOptionErr),
},
{
name: "nil sets",
@@ -977,7 +994,7 @@ func TestPluginListHostsErr(t *testing.T) {
}),
},
},
expectedErr: "sets is nil",
expectedErrContains: "sets is nil",
},
{
name: "set missing id",
@@ -996,7 +1013,7 @@ func TestPluginListHostsErr(t *testing.T) {
},
Sets: []*hostsets.HostSet{&hostsets.HostSet{}},
},
expectedErr: "set missing id",
expectedErrContains: "set missing id",
},
{
name: "set missing attributes",
@@ -1019,7 +1036,7 @@ func TestPluginListHostsErr(t *testing.T) {
},
},
},
expectedErr: "set missing attributes",
expectedErrContains: "set missing attributes",
},
{
name: "set attribute load error",
@@ -1046,7 +1063,8 @@ func TestPluginListHostsErr(t *testing.T) {
},
},
},
expectedErr: "error parsing set attributes: unknown set attribute fields provided: bar, foo",
expectedErrContains: "error parsing set attributes: ",
expectedErrContains2: "unknown set attribute fields provided: bar, foo",
},
{
name: "client load error",
@@ -1077,7 +1095,7 @@ func TestPluginListHostsErr(t *testing.T) {
awsutil.MockOptionErr(errors.New(testOptionErr)),
}),
},
expectedErr: fmt.Sprintf("error getting EC2 client: error getting AWS session: error reading options in NewCredentialsConfig: %s", testOptionErr),
expectedErrContains: fmt.Sprintf("error getting EC2 client: error getting AWS session: error reading options in NewCredentialsConfig: %s", testOptionErr),
},
{
name: "DescribeInstances error",
@@ -1109,7 +1127,7 @@ func TestPluginListHostsErr(t *testing.T) {
testMockEC2WithDescribeInstancesError(errors.New(testDescribeInstancesError)),
)),
},
expectedErr: fmt.Sprintf("error running DescribeInstances for host set id \"foobar\": %s", testDescribeInstancesError),
expectedErrContains: fmt.Sprintf("error running DescribeInstances for host set id \"foobar\": %s", testDescribeInstancesError),
},
{
name: "awsInstanceToHost error",
@@ -1153,7 +1171,7 @@ func TestPluginListHostsErr(t *testing.T) {
),
)),
},
expectedErr: "error processing host results for host set id \"foobar\": response integrity error: missing instance id",
expectedErrContains: "error processing host results for host set id \"foobar\": response integrity error: missing instance id",
},
}
@@ -1165,7 +1183,10 @@ func TestPluginListHostsErr(t *testing.T) {
testStateOpts: tc.opts,
}
_, err := p.ListHosts(context.Background(), tc.req)
require.EqualError(err, tc.expectedErr)
require.Contains(err.Error(), tc.expectedErrContains)
if tc.expectedErrContains2 != "" {
require.Contains(err.Error(), tc.expectedErrContains2)
}
})
}
}