github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/google/compute/disks_test.go (about)

     1  package compute
     2  
     3  import (
     4  	"testing"
     5  
     6  	defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types"
     7  
     8  	"github.com/khulnasoft-lab/defsec/pkg/providers/google/compute"
     9  
    10  	"github.com/khulnasoft-lab/defsec/internal/adapters/terraform/tftestutil"
    11  	"github.com/khulnasoft-lab/defsec/test/testutil"
    12  )
    13  
    14  func Test_adaptDisks(t *testing.T) {
    15  	tests := []struct {
    16  		name      string
    17  		terraform string
    18  		expected  []compute.Disk
    19  	}{
    20  		{
    21  			name: "key as string link or raw bytes",
    22  			terraform: `
    23  			resource "google_compute_disk" "example-one" {
    24  				name  = "disk #1"
    25  			
    26  				disk_encryption_key {
    27  				  kms_key_self_link = "something"
    28  				}
    29  			  }
    30  
    31  			  resource "google_compute_disk" "example-two" {
    32  				name  = "disk #2"
    33  			
    34  				disk_encryption_key {
    35  				  raw_key="b2ggbm8gdGhpcyBpcyBiYWQ"
    36  				}
    37  			  }
    38  `,
    39  			expected: []compute.Disk{
    40  				{
    41  					Metadata: defsecTypes.NewTestMetadata(),
    42  					Name:     defsecTypes.String("disk #1", defsecTypes.NewTestMetadata()),
    43  					Encryption: compute.DiskEncryption{
    44  						Metadata:   defsecTypes.NewTestMetadata(),
    45  						KMSKeyLink: defsecTypes.String("something", defsecTypes.NewTestMetadata()),
    46  					},
    47  				},
    48  				{
    49  					Metadata: defsecTypes.NewTestMetadata(),
    50  					Name:     defsecTypes.String("disk #2", defsecTypes.NewTestMetadata()),
    51  					Encryption: compute.DiskEncryption{
    52  						Metadata:   defsecTypes.NewTestMetadata(),
    53  						KMSKeyLink: defsecTypes.String("", defsecTypes.NewTestMetadata()),
    54  						RawKey:     defsecTypes.Bytes([]byte("b2ggbm8gdGhpcyBpcyBiYWQ"), defsecTypes.NewTestMetadata()),
    55  					},
    56  				},
    57  			},
    58  		},
    59  		{
    60  			name: "key link as reference",
    61  			terraform: `
    62  			resource "google_kms_crypto_key" "my_crypto_key" {
    63  				name            = "crypto-key-example"
    64  			  }
    65  
    66  			resource "google_compute_disk" "example-three" {
    67  				name  = "disk #3"
    68  			
    69  				disk_encryption_key {
    70  					kms_key_self_link = google_kms_crypto_key.my_crypto_key.id
    71  				}
    72  			  }`,
    73  			expected: []compute.Disk{
    74  				{
    75  					Metadata: defsecTypes.NewTestMetadata(),
    76  					Name:     defsecTypes.String("disk #3", defsecTypes.NewTestMetadata()),
    77  					Encryption: compute.DiskEncryption{
    78  						Metadata:   defsecTypes.NewTestMetadata(),
    79  						KMSKeyLink: defsecTypes.String("google_kms_crypto_key.my_crypto_key", defsecTypes.NewTestMetadata()),
    80  					},
    81  				},
    82  			},
    83  		},
    84  	}
    85  
    86  	for _, test := range tests {
    87  		t.Run(test.name, func(t *testing.T) {
    88  			modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf")
    89  			adapted := adaptDisks(modules)
    90  			testutil.AssertDefsecEqual(t, test.expected, adapted)
    91  		})
    92  	}
    93  }