github.com/aquasecurity/trivy-iac@v0.8.1-0.20240127024015-3d8e412cf0ab/internal/adapters/terraform/azure/securitycenter/adapt_test.go (about)

     1  package securitycenter
     2  
     3  import (
     4  	"testing"
     5  
     6  	defsecTypes "github.com/aquasecurity/defsec/pkg/types"
     7  
     8  	"github.com/aquasecurity/defsec/pkg/providers/azure/securitycenter"
     9  
    10  	"github.com/aquasecurity/trivy-iac/internal/adapters/terraform/tftestutil"
    11  
    12  	"github.com/aquasecurity/trivy-iac/test/testutil"
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  func Test_adaptContact(t *testing.T) {
    18  	tests := []struct {
    19  		name      string
    20  		terraform string
    21  		expected  securitycenter.Contact
    22  	}{
    23  		{
    24  			name: "defined",
    25  			terraform: `
    26  			resource "azurerm_security_center_contact" "example" {
    27  				phone = "+1-555-555-5555"
    28  				alert_notifications = true
    29  			}
    30  `,
    31  			expected: securitycenter.Contact{
    32  				Metadata:                 defsecTypes.NewTestMetadata(),
    33  				EnableAlertNotifications: defsecTypes.Bool(true, defsecTypes.NewTestMetadata()),
    34  				Phone:                    defsecTypes.String("+1-555-555-5555", defsecTypes.NewTestMetadata()),
    35  			},
    36  		},
    37  		{
    38  			name: "defaults",
    39  			terraform: `
    40  			resource "azurerm_security_center_contact" "example" {
    41  			}
    42  `,
    43  			expected: securitycenter.Contact{
    44  				Metadata:                 defsecTypes.NewTestMetadata(),
    45  				EnableAlertNotifications: defsecTypes.Bool(false, defsecTypes.NewTestMetadata()),
    46  				Phone:                    defsecTypes.String("", defsecTypes.NewTestMetadata()),
    47  			},
    48  		},
    49  	}
    50  
    51  	for _, test := range tests {
    52  		t.Run(test.name, func(t *testing.T) {
    53  			modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf")
    54  			adapted := adaptContact(modules.GetBlocks()[0])
    55  			testutil.AssertDefsecEqual(t, test.expected, adapted)
    56  		})
    57  	}
    58  }
    59  
    60  func Test_adaptSubscription(t *testing.T) {
    61  	tests := []struct {
    62  		name      string
    63  		terraform string
    64  		expected  securitycenter.SubscriptionPricing
    65  	}{
    66  		{
    67  			name: "free tier",
    68  			terraform: `
    69  			resource "azurerm_security_center_subscription_pricing" "example" {
    70  				tier          = "Free"
    71  			}`,
    72  			expected: securitycenter.SubscriptionPricing{
    73  				Metadata: defsecTypes.NewTestMetadata(),
    74  				Tier:     defsecTypes.String("Free", defsecTypes.NewTestMetadata()),
    75  			},
    76  		},
    77  		{
    78  			name: "default - free tier",
    79  			terraform: `
    80  			resource "azurerm_security_center_subscription_pricing" "example" {
    81  			}`,
    82  			expected: securitycenter.SubscriptionPricing{
    83  				Metadata: defsecTypes.NewTestMetadata(),
    84  				Tier:     defsecTypes.String("Free", defsecTypes.NewTestMetadata()),
    85  			},
    86  		},
    87  		{
    88  			name: "standard tier",
    89  			terraform: `
    90  			resource "azurerm_security_center_subscription_pricing" "example" {
    91  				tier          = "Standard"
    92  			}`,
    93  			expected: securitycenter.SubscriptionPricing{
    94  				Metadata: defsecTypes.NewTestMetadata(),
    95  				Tier:     defsecTypes.String("Standard", defsecTypes.NewTestMetadata()),
    96  			},
    97  		},
    98  	}
    99  
   100  	for _, test := range tests {
   101  		t.Run(test.name, func(t *testing.T) {
   102  			modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf")
   103  			adapted := adaptSubscription(modules.GetBlocks()[0])
   104  			testutil.AssertDefsecEqual(t, test.expected, adapted)
   105  		})
   106  	}
   107  }
   108  
   109  func TestLines(t *testing.T) {
   110  	src := `
   111  	resource "azurerm_security_center_contact" "example" {
   112  		phone = "+1-555-555-5555"
   113  		alert_notifications = true
   114  	}
   115  
   116  	resource "azurerm_security_center_subscription_pricing" "example" {
   117  		tier          = "Standard"
   118  	}`
   119  
   120  	modules := tftestutil.CreateModulesFromSource(t, src, ".tf")
   121  	adapted := Adapt(modules)
   122  
   123  	require.Len(t, adapted.Contacts, 1)
   124  	require.Len(t, adapted.Subscriptions, 1)
   125  
   126  	contact := adapted.Contacts[0]
   127  	sub := adapted.Subscriptions[0]
   128  
   129  	assert.Equal(t, 3, contact.Phone.GetMetadata().Range().GetStartLine())
   130  	assert.Equal(t, 3, contact.Phone.GetMetadata().Range().GetEndLine())
   131  
   132  	assert.Equal(t, 4, contact.EnableAlertNotifications.GetMetadata().Range().GetStartLine())
   133  	assert.Equal(t, 4, contact.EnableAlertNotifications.GetMetadata().Range().GetEndLine())
   134  
   135  	assert.Equal(t, 8, sub.Tier.GetMetadata().Range().GetStartLine())
   136  	assert.Equal(t, 8, sub.Tier.GetMetadata().Range().GetEndLine())
   137  }