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 }