github.com/aquasecurity/trivy-iac@v0.8.1-0.20240127024015-3d8e412cf0ab/pkg/scanners/yaml/parser/parser_test.go (about) 1 package parser 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/liamg/memoryfs" 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func Test_Parser(t *testing.T) { 13 input := `--- 14 x: 15 y: 123 16 z: 17 - a 18 - b 19 - c 20 ` 21 22 memfs := memoryfs.New() 23 err := memfs.WriteFile("something.yaml", []byte(input), 0644) 24 require.NoError(t, err) 25 26 data, err := New().ParseFile(context.TODO(), memfs, "something.yaml") 27 require.NoError(t, err) 28 29 assert.Len(t, data, 1) 30 31 msi, ok := data[0].(map[string]interface{}) 32 require.True(t, ok) 33 34 xObj, ok := msi["x"] 35 require.True(t, ok) 36 37 xMsi, ok := xObj.(map[string]interface{}) 38 require.True(t, ok) 39 40 yRaw, ok := xMsi["y"] 41 require.True(t, ok) 42 43 y, ok := yRaw.(int) 44 require.True(t, ok) 45 46 assert.Equal(t, 123, y) 47 48 zRaw, ok := xMsi["z"] 49 require.True(t, ok) 50 51 z, ok := zRaw.([]interface{}) 52 require.True(t, ok) 53 54 require.Len(t, z, 3) 55 56 assert.Equal(t, "a", z[0]) 57 assert.Equal(t, "b", z[1]) 58 assert.Equal(t, "c", z[2]) 59 60 } 61 62 func Test_Parser_WithSeparatedContent(t *testing.T) { 63 input := `--- 64 x: 65 y: 123 66 z: 67 - a 68 - b 69 - c 70 --- 71 x: 72 y: 456 73 z: 74 - x 75 - y 76 - z 77 ` 78 79 memfs := memoryfs.New() 80 err := memfs.WriteFile("something.yaml", []byte(input), 0644) 81 require.NoError(t, err) 82 83 data, err := New().ParseFile(context.TODO(), memfs, "something.yaml") 84 require.NoError(t, err) 85 86 assert.Len(t, data, 2) 87 88 { 89 msi, ok := data[0].(map[string]interface{}) 90 require.True(t, ok) 91 92 xObj, ok := msi["x"] 93 require.True(t, ok) 94 95 xMsi, ok := xObj.(map[string]interface{}) 96 require.True(t, ok) 97 98 yRaw, ok := xMsi["y"] 99 require.True(t, ok) 100 101 y, ok := yRaw.(int) 102 require.True(t, ok) 103 104 assert.Equal(t, 123, y) 105 106 zRaw, ok := xMsi["z"] 107 require.True(t, ok) 108 109 z, ok := zRaw.([]interface{}) 110 require.True(t, ok) 111 112 require.Len(t, z, 3) 113 114 assert.Equal(t, "a", z[0]) 115 assert.Equal(t, "b", z[1]) 116 assert.Equal(t, "c", z[2]) 117 } 118 119 { 120 msi, ok := data[1].(map[string]interface{}) 121 require.True(t, ok) 122 123 xObj, ok := msi["x"] 124 require.True(t, ok) 125 126 xMsi, ok := xObj.(map[string]interface{}) 127 require.True(t, ok) 128 129 yRaw, ok := xMsi["y"] 130 require.True(t, ok) 131 132 y, ok := yRaw.(int) 133 require.True(t, ok) 134 135 assert.Equal(t, 456, y) 136 137 zRaw, ok := xMsi["z"] 138 require.True(t, ok) 139 140 z, ok := zRaw.([]interface{}) 141 require.True(t, ok) 142 143 require.Len(t, z, 3) 144 145 assert.Equal(t, "x", z[0]) 146 assert.Equal(t, "y", z[1]) 147 assert.Equal(t, "z", z[2]) 148 } 149 150 }