From c14b5d186f37b4f7c40b80e0c0ca84aa8ba987eb Mon Sep 17 00:00:00 2001 From: Marcos Gaeta Date: Tue, 27 Aug 2024 13:45:15 -0700 Subject: [PATCH] add unit tests --- cmd/baton-aws/config.go | 10 ++++- cmd/baton-aws/config_test.go | 73 ++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 cmd/baton-aws/config_test.go diff --git a/cmd/baton-aws/config.go b/cmd/baton-aws/config.go index 5783573..68e7382 100644 --- a/cmd/baton-aws/config.go +++ b/cmd/baton-aws/config.go @@ -9,6 +9,12 @@ import ( "github.com/spf13/viper" ) +const ( + ExternalIDLengthMaximum = 65 // TODO(marcos): this might be a bug. + ExternalIDLengthMinimum = 32 + RegionDefault = "us-east-1" +) + var ( ExternalIdField = field.StringField( "external-id", @@ -29,7 +35,7 @@ var ( GlobalAwsSsoRegionField = field.StringField( "global-aws-sso-region", field.WithDescription("The region for the sso identities"), - field.WithDefaultValue("us-east-1"), + field.WithDefaultValue(RegionDefault), ) GlobalBindingExternalIdField = field.StringField( "global-binding-external-id", @@ -103,7 +109,7 @@ func ValidateExternalId(input string) error { return fmt.Errorf("external id is missing") } - if fieldLength < 32 || fieldLength > 65 { + if fieldLength < ExternalIDLengthMinimum || fieldLength > ExternalIDLengthMaximum { return fmt.Errorf("aws_external_id must be between 32 and 64 bytes") } return nil diff --git a/cmd/baton-aws/config_test.go b/cmd/baton-aws/config_test.go new file mode 100644 index 0000000..48ab9dc --- /dev/null +++ b/cmd/baton-aws/config_test.go @@ -0,0 +1,73 @@ +package main + +import ( + "context" + "fmt" + "testing" + + "github.com/conductorone/baton-sdk/pkg/test" + "github.com/conductorone/baton-sdk/pkg/ustrings" + "github.com/spf13/viper" +) + +const ( + exampleARN = "arn:aws:iam::123456789012:role/David" + exampleExternalID = "12345678901234567890123456789012" + s3ARN = "arn:aws:s3:::my_corporate_bucket/exampleobject.png" +) + +func TestConfigs(t *testing.T) { + ctx := context.Background() + test.ExerciseTestCasesFromExpressions( + t, + Configuration, + func(viper *viper.Viper) error { return validateConfig(ctx, viper) }, + ustrings.ParseFlags, + []test.TestCaseFromExpression{ + { + "", + true, + "empty", + }, + { + "--use-assume", + false, + "externalID + ARN missing", + }, + { + fmt.Sprintf("--use-assume --external-id %s", exampleExternalID), + false, + "ARN missing", + }, + { + fmt.Sprintf("--use-assume --role-arn %s", exampleARN), + false, + "external ID missing", + }, + { + fmt.Sprintf("--use-assume --external-id 1 --role-arn %s", exampleARN), + false, + "externalID too short", + }, + { + + fmt.Sprintf( + "--use-assume --external-id %s --role-arn %s", + exampleExternalID, + s3ARN, + ), + false, + "ARN is not IAM", + }, + { + fmt.Sprintf( + "--use-assume --external-id %s --role-arn %s", + exampleExternalID, + exampleARN, + ), + true, + "all", + }, + }, + ) +}