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