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  }