github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/digitalocean/spaces/adapt_test.go (about)

     1  package spaces
     2  
     3  import (
     4  	"testing"
     5  
     6  	defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types"
     7  
     8  	"github.com/khulnasoft-lab/defsec/pkg/providers/digitalocean/spaces"
     9  
    10  	"github.com/khulnasoft-lab/defsec/internal/adapters/terraform/tftestutil"
    11  
    12  	"github.com/khulnasoft-lab/defsec/test/testutil"
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  func Test_adaptBuckets(t *testing.T) {
    18  	tests := []struct {
    19  		name      string
    20  		terraform string
    21  		expected  []spaces.Bucket
    22  	}{
    23  		{
    24  			name: "basic",
    25  			terraform: `
    26  			resource "digitalocean_spaces_bucket" "example" {
    27  				name   = "public_space"
    28  				region = "nyc3"
    29  				acl    = "private"
    30  
    31  				force_destroy = true
    32  
    33  				versioning {
    34  					enabled = true
    35  				  }
    36  			  }
    37  			  
    38  			  resource "digitalocean_spaces_bucket_object" "index" {
    39  				bucket       = digitalocean_spaces_bucket.example.name
    40  				acl          = "private"
    41  			  }
    42  `,
    43  			expected: []spaces.Bucket{
    44  				{
    45  					Metadata: defsecTypes.NewTestMetadata(),
    46  					Name:     defsecTypes.String("public_space", defsecTypes.NewTestMetadata()),
    47  					Objects: []spaces.Object{
    48  						{
    49  							Metadata: defsecTypes.NewTestMetadata(),
    50  							ACL:      defsecTypes.String("private", defsecTypes.NewTestMetadata()),
    51  						},
    52  					},
    53  					ACL:          defsecTypes.String("private", defsecTypes.NewTestMetadata()),
    54  					ForceDestroy: defsecTypes.Bool(true, defsecTypes.NewTestMetadata()),
    55  					Versioning: spaces.Versioning{
    56  						Metadata: defsecTypes.NewTestMetadata(),
    57  						Enabled:  defsecTypes.Bool(true, defsecTypes.NewTestMetadata()),
    58  					},
    59  				},
    60  			},
    61  		},
    62  		{
    63  			name: "defaults",
    64  			terraform: `
    65  			resource "digitalocean_spaces_bucket" "example" {
    66  			  }
    67  			
    68  `,
    69  			expected: []spaces.Bucket{
    70  				{
    71  					Metadata:     defsecTypes.NewTestMetadata(),
    72  					Name:         defsecTypes.String("", defsecTypes.NewTestMetadata()),
    73  					Objects:      nil,
    74  					ACL:          defsecTypes.String("public-read", defsecTypes.NewTestMetadata()),
    75  					ForceDestroy: defsecTypes.Bool(false, defsecTypes.NewTestMetadata()),
    76  					Versioning: spaces.Versioning{
    77  						Metadata: defsecTypes.NewTestMetadata(),
    78  						Enabled:  defsecTypes.Bool(false, defsecTypes.NewTestMetadata()),
    79  					},
    80  				},
    81  			},
    82  		},
    83  	}
    84  
    85  	for _, test := range tests {
    86  		t.Run(test.name, func(t *testing.T) {
    87  			modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf")
    88  			adapted := adaptBuckets(modules)
    89  			testutil.AssertDefsecEqual(t, test.expected, adapted)
    90  		})
    91  	}
    92  }
    93  
    94  func TestLines(t *testing.T) {
    95  	src := `
    96  	resource "digitalocean_spaces_bucket" "example" {
    97  		name   = "public_space"
    98  		region = "nyc3"
    99  		acl    = "private"
   100  
   101  		force_destroy = true
   102  
   103  		versioning {
   104  			enabled = true
   105  		  }
   106  	  }
   107  	  
   108  	  resource "digitalocean_spaces_bucket_object" "index" {
   109  		bucket       = digitalocean_spaces_bucket.example.name
   110  		acl          = "public-read"
   111  	  }
   112  	`
   113  
   114  	modules := tftestutil.CreateModulesFromSource(t, src, ".tf")
   115  	adapted := Adapt(modules)
   116  
   117  	require.Len(t, adapted.Buckets, 1)
   118  	bucket := adapted.Buckets[0]
   119  
   120  	assert.Equal(t, 2, bucket.Metadata.Range().GetStartLine())
   121  	assert.Equal(t, 12, bucket.Metadata.Range().GetEndLine())
   122  
   123  	assert.Equal(t, 3, bucket.Name.GetMetadata().Range().GetStartLine())
   124  	assert.Equal(t, 3, bucket.Name.GetMetadata().Range().GetEndLine())
   125  
   126  	assert.Equal(t, 5, bucket.ACL.GetMetadata().Range().GetStartLine())
   127  	assert.Equal(t, 5, bucket.ACL.GetMetadata().Range().GetEndLine())
   128  
   129  	assert.Equal(t, 7, bucket.ForceDestroy.GetMetadata().Range().GetStartLine())
   130  	assert.Equal(t, 7, bucket.ForceDestroy.GetMetadata().Range().GetEndLine())
   131  
   132  	assert.Equal(t, 9, bucket.Versioning.Metadata.Range().GetStartLine())
   133  	assert.Equal(t, 11, bucket.Versioning.Metadata.Range().GetEndLine())
   134  
   135  	assert.Equal(t, 10, bucket.Versioning.Enabled.GetMetadata().Range().GetStartLine())
   136  	assert.Equal(t, 10, bucket.Versioning.Enabled.GetMetadata().Range().GetEndLine())
   137  
   138  	assert.Equal(t, 14, bucket.Objects[0].Metadata.Range().GetStartLine())
   139  	assert.Equal(t, 17, bucket.Objects[0].Metadata.Range().GetEndLine())
   140  
   141  	assert.Equal(t, 16, bucket.Objects[0].ACL.GetMetadata().Range().GetStartLine())
   142  	assert.Equal(t, 16, bucket.Objects[0].ACL.GetMetadata().Range().GetEndLine())
   143  
   144  }