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  }