Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
JamesWoolfenden committed Feb 10, 2025
1 parent 1a0cb7b commit 2861301
Show file tree
Hide file tree
Showing 24 changed files with 170 additions and 99 deletions.
1 change: 1 addition & 0 deletions src/aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -1519,6 +1519,7 @@ func GetPermissionMap(raw []byte, attributes []string, resource string) ([]strin

if !ok {
log.Error().Msg("failed to cast to string")

continue
}

Expand Down
1 change: 1 addition & 0 deletions src/aws_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,7 @@ func TestAwsLookup(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
result := pike.AwsLookup(tt.resourceName)

if tt.expectNil && result != nil {
Expand Down
16 changes: 8 additions & 8 deletions src/compare.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,12 @@ func Compare(directory string, arn string, init bool) (bool, error) {

client := iam.NewFromConfig(cfg)

version, err := GetVersion(client, arn)
version, err := getVersion(client, arn)
if err != nil {
return false, &getVersionError{err}
}

policy, err := GetPolicyVersion(client, arn, *version)
policy, err := getPolicyVersion(client, arn, *version)
if err != nil {
return false, &getPolicyVersionError{err}
}
Expand All @@ -48,15 +48,15 @@ func Compare(directory string, arn string, init bool) (bool, error) {
return false, &getIAMVersionError{err}
}

sorted, err := SortActions(iacPolicy.AWS.JSONOut)
sorted, err := sortActions(iacPolicy.AWS.JSONOut)
if err != nil {
return false, &sortActionsError{iacPolicy.AWS.JSONOut}
}

// iam versus iac
fmt.Printf("IAM Policy %s versus Local %s \n", arn, directory)

return CompareIAMPolicy(*policy, *sorted)
return compareIAMPolicy(*policy, *sorted)
}

func inputValidationCompare(directory string, arn string) (bool, error) {
Expand Down Expand Up @@ -87,8 +87,8 @@ func (m *compareDifferenceError) Error() string {
return fmt.Sprintf("compare difference failed: %v", m.err)
}

// CompareIAMPolicy takes two IAM policies and compares.
func CompareIAMPolicy(policy string, oldPolicy string) (bool, error) {
// compareIAMPolicy takes two IAM policies and compares.
func compareIAMPolicy(policy string, oldPolicy string) (bool, error) {
differ := diff.New()
compare, err := differ.Compare([]byte(policy), []byte(oldPolicy))

Expand All @@ -97,7 +97,7 @@ func CompareIAMPolicy(policy string, oldPolicy string) (bool, error) {
}

if compare.Modified() {
return ShowDifferences(policy, compare)
return showDifferences(policy, compare)
}

return true, nil
Expand All @@ -111,7 +111,7 @@ func (m *formatterError) Error() string {
return fmt.Sprintf("formatter failed: %v", m.err)
}

func ShowDifferences(policy string, compare diff.Diff) (bool, error) {
func showDifferences(policy string, compare diff.Diff) (bool, error) {
var aJSON map[string]interface{}
err := json.Unmarshal([]byte(policy), &aJSON)

Expand Down
4 changes: 2 additions & 2 deletions src/compare_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ func TestCompareIAMPolicy(t *testing.T) {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, err := CompareIAMPolicy(tt.args.Policy, tt.args.OldPolicy)
got, err := compareIAMPolicy(tt.args.Policy, tt.args.OldPolicy)
if (err != nil) != tt.wantErr {
t.Errorf("CompareIAMPolicy() error = %v, wantErr %v", err, tt.wantErr)

Expand Down Expand Up @@ -143,7 +143,7 @@ func TestShowDifferences(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotBool, err := ShowDifferences(tt.policy, tt.diff)
gotBool, err := showDifferences(tt.policy, tt.diff)

if (err != nil) != tt.wantErr {
t.Errorf("ShowDifferences() error = %v, wantErr %v", err, tt.wantErr)
Expand Down
2 changes: 1 addition & 1 deletion src/coverage/aws.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# todo aws

Resource percentage coverage 93.16
Datasource percentage coverage 99.65
Datasource percentage coverage 100.00

./resource.ps1 aws_cognito_managed_user_pool_client
./resource.ps1 aws_ebs_fast_snapshot_restore
Expand Down
3 changes: 2 additions & 1 deletion src/coverage/azure.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# todo azure

Resource percentage coverage 4.57
Resource percentage coverage 4.56
Datasource percentage coverage 35.57

./resource.ps1 azurerm_aadb2c_directory
Expand Down Expand Up @@ -587,6 +587,7 @@ Datasource percentage coverage 35.57
./resource.ps1 azurerm_mssql_job_agent
./resource.ps1 azurerm_mssql_job_credential
./resource.ps1 azurerm_mssql_job_schedule
./resource.ps1 azurerm_mssql_job_step
./resource.ps1 azurerm_mssql_job_target_group
./resource.ps1 azurerm_mssql_managed_database
./resource.ps1 azurerm_mssql_managed_instance
Expand Down
20 changes: 17 additions & 3 deletions src/coverage/google.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# todo google

Resource percentage coverage 18.34
Datasource percentage coverage 71.47
Resource percentage coverage 18.13
Datasource percentage coverage 71.05

./resource.ps1 google_access_context_manager_access_level_condition
./resource.ps1 google_access_context_manager_service_perimeter_dry_run_egress_policy
Expand All @@ -14,6 +14,7 @@ Datasource percentage coverage 71.47
./resource.ps1 google_active_directory_domain_trust
./resource.ps1 google_active_directory_peering
./resource.ps1 google_apigee_addons_config
./resource.ps1 google_apigee_api
./resource.ps1 google_apigee_app_group
./resource.ps1 google_apigee_developer
./resource.ps1 google_apigee_env_keystore
Expand All @@ -31,7 +32,6 @@ Datasource percentage coverage 71.47
./resource.ps1 google_apigee_keystores_aliases_self_signed_cert
./resource.ps1 google_apigee_nat_address
./resource.ps1 google_apigee_organization
./resource.ps1 google_apigee_sharedflow
./resource.ps1 google_apigee_sync_authorization
./resource.ps1 google_apigee_target_server
./resource.ps1 google_apihub_api_hub_instance
Expand All @@ -57,13 +57,18 @@ Datasource percentage coverage 71.47
./resource.ps1 google_beyondcorp_app_connection
./resource.ps1 google_beyondcorp_app_connector
./resource.ps1 google_beyondcorp_app_gateway
./resource.ps1 google_beyondcorp_application
./resource.ps1 google_beyondcorp_application_iam_binding
./resource.ps1 google_beyondcorp_application_iam_member
./resource.ps1 google_beyondcorp_application_iam_policy
./resource.ps1 google_beyondcorp_security_gateway
./resource.ps1 google_beyondcorp_security_gateway_iam_binding
./resource.ps1 google_beyondcorp_security_gateway_iam_member
./resource.ps1 google_beyondcorp_security_gateway_iam_policy
./resource.ps1 google_biglake_catalog
./resource.ps1 google_biglake_database
./resource.ps1 google_biglake_table
./resource.ps1 google_bigquery_analytics_hub_listing_subscription
./resource.ps1 google_bigquery_datapolicy_data_policy
./resource.ps1 google_bigquery_datapolicy_data_policy_iam_binding
./resource.ps1 google_bigquery_datapolicy_data_policy_iam_member
Expand Down Expand Up @@ -145,6 +150,7 @@ Datasource percentage coverage 71.47
./resource.ps1 google_colab_runtime_template_iam_binding
./resource.ps1 google_colab_runtime_template_iam_member
./resource.ps1 google_colab_runtime_template_iam_policy
./resource.ps1 google_colab_schedule
./resource.ps1 google_composer_environment
./resource.ps1 google_composer_user_workloads_config_map
./resource.ps1 google_composer_user_workloads_secret
Expand Down Expand Up @@ -210,6 +216,7 @@ Datasource percentage coverage 71.47
./resource.ps1 google_compute_network_endpoints
./resource.ps1 google_compute_network_firewall_policy
./resource.ps1 google_compute_network_firewall_policy_association
./resource.ps1 google_compute_network_firewall_policy_packet_mirroring_rule
./resource.ps1 google_compute_network_firewall_policy_rule
./resource.ps1 google_compute_network_firewall_policy_with_rules
./resource.ps1 google_compute_network_peering
Expand Down Expand Up @@ -470,6 +477,10 @@ Datasource percentage coverage 71.47
./resource.ps1 google_folder_iam_policy
./resource.ps1 google_folder_organization_policy
./resource.ps1 google_gemini_code_repository_index
./resource.ps1 google_gemini_data_sharing_with_google_setting
./resource.ps1 google_gemini_gemini_gcp_enablement_setting
./resource.ps1 google_gemini_logging_setting
./resource.ps1 google_gemini_release_channel_setting
./resource.ps1 google_gemini_repository_group
./resource.ps1 google_gemini_repository_group_iam_binding
./resource.ps1 google_gemini_repository_group_iam_member
Expand Down Expand Up @@ -643,6 +654,7 @@ Datasource percentage coverage 71.47
./resource.ps1 google_netapp_kmsconfig
./resource.ps1 google_netapp_storage_pool
./resource.ps1 google_netapp_volume
./resource.ps1 google_netapp_volume_quota_rule
./resource.ps1 google_netapp_volume_replication
./resource.ps1 google_netapp_volume_snapshot
./resource.ps1 google_network_connectivity_group
Expand Down Expand Up @@ -877,6 +889,7 @@ Datasource percentage coverage 71.47
./resource.ps1 google_backup_dr_backup_plan_association -type data
./resource.ps1 google_backup_dr_backup_vault -type data
./resource.ps1 google_backup_dr_data_source -type data
./resource.ps1 google_beyondcorp_application_iam_policy -type data
./resource.ps1 google_beyondcorp_security_gateway_iam_policy -type data
./resource.ps1 google_bigquery_tables -type data
./resource.ps1 google_certificate_manager_certificates -type data
Expand Down Expand Up @@ -934,6 +947,7 @@ Datasource percentage coverage 71.47
./resource.ps1 google_parameter_manager_parameters -type data
./resource.ps1 google_parameter_manager_regional_parameter -type data
./resource.ps1 google_parameter_manager_regional_parameter_version -type data
./resource.ps1 google_parameter_manager_regional_parameter_version_render -type data
./resource.ps1 google_parameter_manager_regional_parameters -type data
./resource.ps1 google_privateca_ca_pool_iam_policy -type data
./resource.ps1 google_privateca_certificate_authority -type data
Expand Down
1 change: 1 addition & 0 deletions src/data_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,7 @@ func TestGetPermission(t *testing.T) {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()

got, err := pike.GetPermission(tt.args.result)

if (err != nil) != tt.wantErr {
Expand Down
2 changes: 1 addition & 1 deletion src/error.go
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ type setAWSAuthError struct {
}

func (m *setAWSAuthError) Error() string {
return fmt.Sprintf("failed to set AWS auth %v", m.err)
return fmt.Sprintf("failed to set AWS %v", m.err)
}

type terraformPlanError struct {
Expand Down
34 changes: 33 additions & 1 deletion src/error_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -667,6 +667,7 @@ func TestMarshallAWSPolicyError(t *testing.T) {
}

func TestDirectoryErrors(t *testing.T) {
t.Parallel()
t.Run("empty directory error", func(t *testing.T) {
t.Parallel()

Expand All @@ -679,6 +680,7 @@ func TestDirectoryErrors(t *testing.T) {
})

t.Run("directory not found error", func(t *testing.T) {
t.Parallel()
err := &directoryNotFoundError{directory: "/tmp/nonexistent"}
expected := "directory does not exist: /tmp/nonexistent"

Expand All @@ -690,6 +692,7 @@ func TestDirectoryErrors(t *testing.T) {

func TestARNErrors(t *testing.T) {
t.Run("empty ARN error", func(t *testing.T) {
t.Parallel()
err := &arnEmptyError{}
expected := "ARN cannot be empty"

Expand Down Expand Up @@ -727,7 +730,9 @@ func TestAWSErrors(t *testing.T) {

t.Run("get IAM version error", func(t *testing.T) {
t.Parallel()

err := &getIAMVersionError{err: &emptyNameError{}}

expected := "failed to get IAM version: Name cannot be empty"

if err.Error() != expected {
Expand All @@ -737,7 +742,10 @@ func TestAWSErrors(t *testing.T) {
}

func TestPolicyErrors(t *testing.T) {
t.Parallel()
t.Run("sort actions error", func(t *testing.T) {
t.Parallel()

err := &sortActionsError{json: "invalid-json"}
expected := "failed to sort actions: invalid-json"

Expand All @@ -747,6 +755,8 @@ func TestPolicyErrors(t *testing.T) {
})

t.Run("get policy version error", func(t *testing.T) {
t.Parallel()

err := &getPolicyVersionError{err: &emptyNameError{}}
expected := "failed to get policy version: Name cannot be empty"

Expand All @@ -756,6 +766,8 @@ func TestPolicyErrors(t *testing.T) {
})

t.Run("input validation error", func(t *testing.T) {
t.Parallel()

err := &inputValidationError{err: &emptyNameError{}}
expected := "input validation failed: Name cannot be empty"

Expand All @@ -766,7 +778,9 @@ func TestPolicyErrors(t *testing.T) {

t.Run("marshall policy error", func(t *testing.T) {
t.Parallel()

err := &marshallPolicyError{err: &emptyNameError{}}

expected := "failed to marshal policy: Name cannot be empty"

if err.Error() != expected {
Expand All @@ -779,32 +793,44 @@ func TestTerraformErrors(t *testing.T) {
testErr := errors.New("test error")

t.Run("terraformPlanError", func(t *testing.T) {
t.Parallel()

err := &terraformPlanError{err: testErr}
expected := "failed to plan terraform test error"

if err.Error() != expected {
t.Errorf("got %q, want %q", err.Error(), expected)
}
})

t.Run("terraformNewError", func(t *testing.T) {
t.Parallel()

err := &terraformNewError{err: testErr}
expected := "failed to create terraform test error"

if err.Error() != expected {
t.Errorf("got %q, want %q", err.Error(), expected)
}
})

t.Run("terraformOutputError", func(t *testing.T) {
t.Parallel()

err := &terraformOutputError{}
expected := "terraform output is empty"

if err.Error() != expected {
t.Errorf("got %q, want %q", err.Error(), expected)
}
})

t.Run("terraformApplyError with target", func(t *testing.T) {
t.Parallel()

err := &terraformApplyError{target: "module.test", err: testErr}
expected := "failed to apply terraform module.test test error"

if err.Error() != expected {
t.Errorf("got %q, want %q", err.Error(), expected)
}
Expand Down Expand Up @@ -841,6 +867,8 @@ func TestSecretAndEncryptionErrors(t *testing.T) {
})

t.Run("decodeStringError", func(t *testing.T) {
t.Parallel()

err := &decodeStringError{err: testErr}
expected := "failed to decode string: test error"

Expand All @@ -850,6 +878,8 @@ func TestSecretAndEncryptionErrors(t *testing.T) {
})

t.Run("encryptPlaintextError", func(t *testing.T) {
t.Parallel()

err := &encryptPlaintextError{err: testErr}
expected := "failed to encrypt plaintext: test error"

Expand Down Expand Up @@ -888,6 +918,8 @@ func TestGetAWSDataPermissionsError(t *testing.T) {
}

func TestSplitHubError(t *testing.T) {
t.Parallel()

originalErr := errors.New("another error")
customErr := &splitHubError{err: originalErr}
expected := "failed to split hub: another error"
Expand All @@ -910,7 +942,7 @@ func TestSetRepoSecretError(t *testing.T) {
func TestSetAWSAuthError(t *testing.T) {
originalErr := errors.New("auth error")
customErr := &setAWSAuthError{err: originalErr}
expected := "failed to set AWS auth auth error"
expected := "failed to set AWS auth error"

if customErr.Error() != expected {
t.Errorf("Expected %s, but got %s", expected, customErr.Error())
Expand Down
Loading

0 comments on commit 2861301

Please sign in to comment.