Skip to content

Commit

Permalink
test: region validation flags
Browse files Browse the repository at this point in the history
  • Loading branch information
karl-cardenas-coding committed Nov 19, 2023
1 parent 65af968 commit 1e4e813
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 18 deletions.
38 changes: 25 additions & 13 deletions cmd/clean.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,33 +43,41 @@ var (
)

func init() {
rootCmd.AddCommand(cleanCmd)
rootCmd.AddCommand(CleanCmd)
}

var cleanCmd = &cobra.Command{
var CleanCmd = &cobra.Command{
Use: "clean",
Short: "Removes all former versions of AWS lambdas except for the $LATEST version",
Long: `Removes all former versions of AWS lambdas except for the $LATEST version. The user also has the ability specify n-? version to retain.`,
Run: func(cmd *cobra.Command, args []string) {
RunE: func(cmd *cobra.Command, args []string) error {
ctx = context.Background()

var (
awsEnvRegion string
awsEnvProfile string
config cliConfig
err error
)

config = GlobalCliConfig
awsEnvRegion = os.Getenv("AWS_DEFAULT_REGION")
awsEnvProfile = os.Getenv("AWS_PROFILE")
if *config.RegionFlag == "" {
if awsEnvRegion != "" {
*config.RegionFlag = validateRegion(f, awsEnvRegion)
*config.RegionFlag, err = validateRegion(f, awsEnvRegion)
if err != nil {
return err
}

} else {
log.Fatal("ERROR: Missing region flag and AWS_DEFAULT_REGION env variable. Please use -r and provide a valid AWS region.")
return errors.New("missing region flag and AWS_DEFAULT_REGION env variable. Please use -r and provide a valid AWS region")
}
} else {
*config.RegionFlag = validateRegion(f, *config.RegionFlag)
*config.RegionFlag, err = validateRegion(f, *config.RegionFlag)
if err != nil {
return err
}
}

// Create a list of AWS Configurations Options
Expand Down Expand Up @@ -115,15 +123,15 @@ var cleanCmd = &cobra.Command{

cfg, err := awsConfig.LoadDefaultConfig(ctx, awsConfigOptions...)
if err != nil {
log.Fatal("ERROR ESTABLISHING AWS SESSION")
return errors.New("ERROR ESTABLISHING AWS SESSION")
}

creds, err := cfg.Credentials.Retrieve(ctx)
if err != nil {
log.Fatal("ERROR RETRIEVING AWS CREDENTIALS")
return errors.New("ERROR RETRIEVING AWS CREDENTIALS")
}
if creds.Expired() {
log.Fatal("AWS CREDENTIALS EXPIRED")
return errors.New("AWS CREDENTIALS EXPIRED")
}

// svc = lambda.NewFromConfig(cfg)
Expand All @@ -133,8 +141,10 @@ var cleanCmd = &cobra.Command{
})
err = executeClean(&config)
if err != nil {
log.Fatal("ERROR: ", err)
return err
}

return err
},
}

Expand Down Expand Up @@ -542,8 +552,9 @@ func getLambdaStorage(list []types.FunctionConfiguration) (int64, error) {
}

// Validates that the user passed in a valid AWS Region
func validateRegion(f embed.FS, input string) string {
func validateRegion(f embed.FS, input string) (string, error) {
var output string
var err error

rawData, _ := f.ReadFile(regionFile)
regionsList := strings.Split(string(rawData), " ")
Expand All @@ -555,10 +566,11 @@ func validateRegion(f embed.FS, input string) string {
}

if output == "" {
log.Fatal(input, " is an invalid AWS region. If this is an error please")
err = errors.New(input + " is an invalid AWS region. If this is an error please report it")
return "", err
}

return output
return output, err
}

// calculateFileSize returns the size of a file in bytes. The function takes a cliConfig parameter to determine the number format type to return
Expand Down
62 changes: 59 additions & 3 deletions cmd/clean_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package cmd
import (
"bytes"
"embed"
"os"
"regexp"
"sort"
"testing"
Expand Down Expand Up @@ -54,14 +55,58 @@ func TestGetLambdaStorage(t *testing.T) {
func TestValidateRegion(t *testing.T) {
input := "us-east-1"
want := "us-east-1"
got := validateRegion(rr, input)

if got != want {
got, err := validateRegion(rr, input)
if err != nil || got != want {
t.Fatalf("The provided input is valid, %s is a valid region", input)
}

}

func TestValidateRegionWithEnv(t *testing.T) {

os.Setenv("AWS_DEFAULT_REGION", "not-valid")
expectedErr := "not-valid is an invalid AWS region. If this is an error please report it"
err := CleanCmd.RunE(CleanCmd, []string{"--profile", "default", "--retain", "2", "--dry-run"})
if err == nil || err.Error() != expectedErr {
t.Fatalf("Expected an error to be returned but received %v", err.Error())
}

os.Setenv("AWS_DEFAULT_REGION", "")
expectedErr = "missing region flag and AWS_DEFAULT_REGION env variable. Please use -r and provide a valid AWS region"
err = CleanCmd.RunE(CleanCmd, []string{"--profile", "default", "--retain", "2", "--dry-run"})
if err == nil || err.Error() != expectedErr {
t.Fatalf("Expected an error to be returned but received %v", err.Error())
}

// Set rootCmd to use the region flag
RegionFlag = "not-valid"
expectedErr = "not-valid is an invalid AWS region. If this is an error please report it"
err = CleanCmd.RunE(CleanCmd, []string{"--profile", "default", "--retain", "2", "--dry-run"})
if err == nil || err.Error() != expectedErr {
t.Fatalf("Expected an error to be returned but received %v", err.Error())
}

}

func TestValidateRegionWithFlag(t *testing.T) {

expectedErr := "missing region flag and AWS_DEFAULT_REGION env variable. Please use -r and provide a valid AWS region"
err := CleanCmd.RunE(CleanCmd, []string{"--profile", "default", "--region", "not-valid", "--retain", "2", "--dry-run"})
if err == nil || err.Error() != expectedErr {
t.Fatalf("Expected an error to be returned but received %v", err.Error())
}
}

func TestInvalidRegion(t *testing.T) {
input := "not-valid"
want := "not-valid is an invalid AWS region. If this is an error please report it"
got, err := validateRegion(rr, input)

if err == nil || err.Error() != want {
t.Fatalf("The provided input is invalid, %s is not a valid region", got)
}
}

func TestGetLambdasToDeleteList(t *testing.T) {
var (
retainNumber int8 = 2
Expand Down Expand Up @@ -358,3 +403,14 @@ func TestDisplayDuration(t *testing.T) {
}
buf.Reset()
}

func TestEnteryMissingEnvRegion(t *testing.T) {

expectedErr := "Missing region flag and AWS_DEFAULT_REGION env variable. Please use -r and provide a valid AWS region"

err := CleanCmd.RunE(CleanCmd, []string{"--profile", "default", "--retain", "2", "--dry-run"})
if err == nil && err.Error() != expectedErr {
t.Fatalf("Expected an error to be returned but received %v", err.Error())
}

}
4 changes: 2 additions & 2 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ func init() {
rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "Set to true to enable debugging (bool)")
rootCmd.PersistentFlags().BoolVarP(&DryRun, "dryrun", "d", false, "Executes a dry run (bool)")
rootCmd.PersistentFlags().BoolVarP(&SizeIEC, "size-iec", "i", false, "Displays file sizes in IEC units (bool)")
cleanCmd.Flags().Int8VarP(&Retain, "count", "c", 1, "The number of versions to retain from $LATEST-(n)")
cleanCmd.Flags().BoolVarP(&SkipAliases, "skip-aliases", "s", false, "Skip trying to delete versions with aliases attached")
CleanCmd.Flags().Int8VarP(&Retain, "count", "c", 1, "The number of versions to retain from $LATEST-(n)")
CleanCmd.Flags().BoolVarP(&SkipAliases, "skip-aliases", "s", false, "Skip trying to delete versions with aliases attached")

GlobalCliConfig.RegionFlag = &RegionFlag
GlobalCliConfig.ProfileFlag = &ProfileFlag
Expand Down

0 comments on commit 1e4e813

Please sign in to comment.