github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/azure/resolver/resolver_test.go (about)

     1  package resolver
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/khulnasoft-lab/defsec/pkg/scanners/azure"
     8  	"github.com/khulnasoft-lab/defsec/pkg/types"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func Test_resolveFunc(t *testing.T) {
    13  
    14  	tests := []struct {
    15  		name     string
    16  		expr     string
    17  		expected string
    18  	}{
    19  		{
    20  			name:     "simple format call",
    21  			expr:     "format('{0}/{1}', 'myPostgreSQLServer', 'log_checkpoints')",
    22  			expected: "myPostgreSQLServer/log_checkpoints",
    23  		},
    24  		{
    25  			name:     "simple format call with numbers",
    26  			expr:     "format('{0} + {1} = {2}', 1, 2, 3)",
    27  			expected: "1 + 2 = 3",
    28  		},
    29  		{
    30  			name:     "format with nested format",
    31  			expr:     "format('{0} + {1} = {2}', format('{0}', 1), 2, 3)",
    32  			expected: "1 + 2 = 3",
    33  		},
    34  		{
    35  			name:     "format with multiple nested format",
    36  			expr:     "format('{0} + {1} = {2}', format('{0}', 1), 2, format('{0}', 3))",
    37  			expected: "1 + 2 = 3",
    38  		},
    39  		{
    40  			name:     "format with nested base64",
    41  			expr:     "format('the base64 of \"hello, world\" is {0}', base64('hello, world'))",
    42  			expected: "the base64 of \"hello, world\" is aGVsbG8sIHdvcmxk",
    43  		},
    44  		{
    45  			name:     "dateTimeAdd with add a day",
    46  			expr:     "dateTimeAdd(utcNow('yyyy-MM-dd'), 'P1D', 'yyyy-MM-dd')",
    47  			expected: time.Now().UTC().AddDate(0, 0, 1).Format("2006-01-02"),
    48  		},
    49  	}
    50  
    51  	for _, tt := range tests {
    52  		t.Run(tt.name, func(t *testing.T) {
    53  			resolver := resolver{}
    54  
    55  			resolvedValue, err := resolver.resolveExpressionString(tt.expr, types.NewTestMetadata())
    56  			require.NoError(t, err)
    57  			require.Equal(t, azure.KindString, resolvedValue.Kind)
    58  
    59  			require.Equal(t, tt.expected, resolvedValue.AsString())
    60  		})
    61  	}
    62  }
    63  
    64  func Test_resolveParameter(t *testing.T) {
    65  	tests := []struct {
    66  		name       string
    67  		deployment *azure.Deployment
    68  		expr       string
    69  		expected   string
    70  	}{
    71  		{
    72  			name: "format call with parameter",
    73  			deployment: &azure.Deployment{
    74  				Parameters: []azure.Parameter{
    75  					{
    76  						Variable: azure.Variable{
    77  							Name:  "dbName",
    78  							Value: azure.NewValue("myPostgreSQLServer", types.NewTestMetadata()),
    79  						},
    80  					},
    81  				},
    82  			},
    83  			expr:     "format('{0}/{1}', parameters('dbName'), 'log_checkpoints')",
    84  			expected: "myPostgreSQLServer/log_checkpoints",
    85  		},
    86  	}
    87  	for _, tt := range tests {
    88  		t.Run(tt.name, func(t *testing.T) {
    89  			resolver := resolver{
    90  				deployment: tt.deployment,
    91  			}
    92  
    93  			resolvedValue, err := resolver.resolveExpressionString(tt.expr, types.NewTestMetadata())
    94  			require.NoError(t, err)
    95  			require.Equal(t, azure.KindString, resolvedValue.Kind)
    96  
    97  			require.Equal(t, tt.expected, resolvedValue.AsString())
    98  		})
    99  	}
   100  
   101  }