go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/mqlc/labels_test.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package mqlc_test
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  	"go.mondoo.com/cnquery/llx"
    11  	"go.mondoo.com/cnquery/mqlc"
    12  )
    13  
    14  func label(t *testing.T, s string, f func(res *llx.Labels)) {
    15  	res, err := mqlc.Compile(s, nil, conf)
    16  	assert.Nil(t, err)
    17  	assert.NotNil(t, res)
    18  	if res == nil {
    19  		return
    20  	}
    21  
    22  	assert.NotNil(t, res.Labels)
    23  	if res.Labels == nil {
    24  		return
    25  	}
    26  
    27  	t.Run(s, func(t *testing.T) { f(res.Labels) })
    28  }
    29  
    30  func TestLabels(t *testing.T) {
    31  	tests := []struct {
    32  		src    string
    33  		labels *llx.Labels
    34  	}{
    35  		{
    36  			"mondoo.version == 'yo'",
    37  			&llx.Labels{
    38  				Labels: map[string]string{
    39  					"J084T/tsf/V2gVKuPUCMiaSli6jjgbrZfBlLtC06P3JdvDMMg2jLWvO8q8CXcZ4rtZf08GRZ5Qsgcoz/4Ph6Vw==": "mondoo.version == \"yo\"",
    40  					"J4anmJ+mXJX380Qslh563U7Bs5d6fiD2ghVxV9knAU0iy/P+IVNZsDhBbCmbpJch3Tm0NliAMiaY47lmw887Jw==": "mondoo.version",
    41  				},
    42  			},
    43  		},
    44  
    45  		{
    46  			"true",
    47  			&llx.Labels{Labels: map[string]string{
    48  				"13VXYfnMnc74H8XVgiMbH6ZSHxTGQxkhJfUkIiYOBCfUDxHAIJWopMcsea7hXkBTFpbM9lCDnbDBev1z+uagBw==": "",
    49  			}},
    50  		},
    51  		{
    52  			"1",
    53  			&llx.Labels{Labels: map[string]string{
    54  				"zcXMKiq4b4QGFVMCvyyFhLXFQKOYn7NKqbV/47XBrKcFwirRjWPgReFt4kdD9G7/ZZCJPsmS4pdCfM32VdTAiQ==": "",
    55  			}},
    56  		},
    57  		{
    58  			"1.23",
    59  			&llx.Labels{Labels: map[string]string{
    60  				"wYfzvA9Xuue3Dr0AcPOM9Y8yyd9t+DWggiInRLU5bSoWOoQtxVrt+aNkeOAorYDYV26ni1v6nIGzL6/3EqxSqQ==": "",
    61  			}},
    62  		},
    63  		{
    64  			"\"string\"",
    65  			&llx.Labels{Labels: map[string]string{
    66  				"YKg4KBZELSGbdx6hE2dqiH5YWTTjYQDYjVzgUsOxnZs9djRb3SHjCadjEsPq6KlmcRLwo9kpv2fPYEJoQJb2qw==": "",
    67  			}},
    68  		},
    69  		{
    70  			"sshd",
    71  			&llx.Labels{Labels: map[string]string{
    72  				"fAVT9TdeX6puAiM5lRS0Rd7jFmfKMI48wFngwRNW9Vbo220GbeDAxaIvXLSF/hZcU5749fc26y6fwAwFgg3agA==": "sshd",
    73  			}},
    74  		},
    75  		{
    76  			"sshd.config",
    77  			&llx.Labels{Labels: map[string]string{
    78  				"h1EPuzo5A02wYUOeDzbzv9YfwPO5Km0r1tmJ0UOceHGyO+M2vrEpnF3/XVJu0hOtyAITe0M4O6XOjLOTc8i8lA==": "sshd.config",
    79  			}},
    80  		},
    81  		{
    82  			"sshd.config.params",
    83  			&llx.Labels{Labels: map[string]string{
    84  				"mhgTAYWyl4RGL8my4EskNtiC8WdZdCnvto9+Vp+vdGvTXrsmNCZF2I1dGbbT/2LS8npk1ULPyVFyX4MEE7zwkw==": "sshd.config.params",
    85  			}},
    86  		},
    87  		{
    88  			"sshd.config(\"/my/path\").params",
    89  			&llx.Labels{Labels: map[string]string{
    90  				"WuRyBukFpZbzB1eSaci2IBPTPd+JnEVlEeEfBBTPR7xZjvFvPS/Hhn9WY5z/D7bVhwtddpaxrAPFWfk6djgr1Q==": "sshd.config.params",
    91  			}},
    92  		},
    93  		{
    94  			"asset.name asset.version",
    95  			&llx.Labels{Labels: map[string]string{
    96  				"dfc6mvEo04hkhtJJiFc22KX6/AMf6Fy2kQhrtpTW4TxGWTtwNH19ATbrfbhWlXSxx0BBFCRU4emVM/LsxJdhhw==": "asset.name",
    97  				"5d4FZxbPkZu02MQaHp3C356NJ9TeVsJBw8Enu+TDyBGdWlZM/AE+J5UT/TQ72AmDViKZe97Hxz1Jt3MjcEH/9Q==": "asset.version",
    98  			}},
    99  		},
   100  		{
   101  			"asset { name version }",
   102  			&llx.Labels{
   103  				Labels: map[string]string{
   104  					"5d4FZxbPkZu02MQaHp3C356NJ9TeVsJBw8Enu+TDyBGdWlZM/AE+J5UT/TQ72AmDViKZe97Hxz1Jt3MjcEH/9Q==": "version",
   105  					"HsQJ6Pn7MoZb1V80cTdxHFHZks9QCOBga68ug9JHSivLxNNlGNwGr7dzWVkZhAuVBLgloAWvLnpfr5SzFlG7KA==": "asset",
   106  					"dfc6mvEo04hkhtJJiFc22KX6/AMf6Fy2kQhrtpTW4TxGWTtwNH19ATbrfbhWlXSxx0BBFCRU4emVM/LsxJdhhw==": "name",
   107  				},
   108  			},
   109  		},
   110  		{
   111  			"users.list { uid }",
   112  			&llx.Labels{
   113  				Labels: map[string]string{
   114  					"IB4yJOaaWXlkuGCEIjatVrL5rQZWQucCaOM55RqFxHYXGFvano6W1uqe55OJVo3joocfdpiSZjNqRjse8SMfiA==": "users.list",
   115  					"kijfKPV0fU/MBdcby4ng65mWcsH/kOn5PcVmYvbDBfUlSSSqGKiyhy1Qte+BO/GqMfL62iaaIRP8LgfRZ0/3pg==": "uid",
   116  				},
   117  			},
   118  		},
   119  		{
   120  			"users.list[0]",
   121  			&llx.Labels{
   122  				Labels: map[string]string{
   123  					"IWmJEZKJxco/zD8JR+g8Lqmw49kbCYWSsxQm3QBFf0D0xhVqK8ukpiHhF0TCcDYLm/SrnvpWCnUelRJhqahnZw==": "users.list[0]",
   124  					"MCqGdk4puEdBb/fxS3qDqAV/8gv3DIxFT+InTY7+JcySIzGMDzq8L1t2C8W6qh4z8GI3MvR6ZQ64bVQl0f2Xww==": "uid",
   125  					"T4APLiU1zCnhKjG6cI0dADH4zDmV9qAZ7cwqmY4oUX3iVUDa4VLSotQ3whx+FRFbhaHkg8GI6cyEpN/nyT2jkQ==": "gid",
   126  					"lq0/cF0a/88fFC/0iEmNVILRf68BM92KtITqSh/WSb+UD1QtnydjwcBpC7IW9CSRXekh74bHSm88taykkFx77w==": "name",
   127  				},
   128  			},
   129  		},
   130  		{
   131  			"users.list[0] { uid }",
   132  			&llx.Labels{
   133  				Labels: map[string]string{
   134  					"ITQmg8B2q1g7hUGGDcnFYQjiQ/w1TPr9xyd4dlWAPjwGyRdH2CrtCv55kn7v4SUVqGaJ8k021tUTZznlRzeXNg==": "users.list[0]",
   135  					"MCqGdk4puEdBb/fxS3qDqAV/8gv3DIxFT+InTY7+JcySIzGMDzq8L1t2C8W6qh4z8GI3MvR6ZQ64bVQl0f2Xww==": "uid",
   136  				},
   137  			},
   138  		},
   139  		{
   140  			"sshd.config.params[\"UsePAM\"]",
   141  			&llx.Labels{
   142  				Labels: map[string]string{
   143  					"PSwPW4/H4l4oMTVi+uJnCzKqWAbakhxMi8HjdZMixpF3/CpjPFePhE5Vpe5sgf3DGVIZENZtfB+i0SjMK/c7rw==": "sshd.config.params[UsePAM]",
   144  				},
   145  			},
   146  		},
   147  		{
   148  			"sshd.config { file { path } }",
   149  			&llx.Labels{
   150  				Labels: map[string]string{
   151  					"4dkTkPWdGYANJNsnlIoZxztiguA32f0UoKeYLeVb5Iry/nSYR0RmK6cveUCA6t4fqQJ5RkTwrDlEDHjoE0vURg==": "sshd.config",
   152  					"OuTdAjszQCmHLzp7Y5W3QICyVbGVX3UcnUllLGIXPjQToitI3LKzJ78iVUzMWOmNJZxmbpP7iySzzuFXgflQ+g==": "file",
   153  					"k6rlXoYpV48Qd19gKeNl+/IiPnkI5VNQBiqZBca3gDKsIRiLcpXQUlDv52x9sscIWiqOMpC7+x/aBpY0IUq0ww==": "path",
   154  				},
   155  			},
   156  		},
   157  
   158  		// vars
   159  		{
   160  			"a = 1; a",
   161  			&llx.Labels{
   162  				Labels: map[string]string{
   163  					"M3Zw1U5oVhZQeXdyvlpQc6tJz7LG6NiZ7oGQCr1eDSloV75R7lRObrv53UuaHvBOuZG3zBt5BDx9MRoRJwIlfA==": "a",
   164  				},
   165  			},
   166  		},
   167  		{
   168  			"a = 1; b = 2; c = a+b; c",
   169  			&llx.Labels{
   170  				Labels: map[string]string{
   171  					"FU1/hdJ5vadWluEfeQHhklVNU86zhW3zNwxraoHDXJYJj7X2AsjJkhuQjaCfx607pvV/Yjez346tOwzg7i9inQ==": "c",
   172  					// TODO: optimize the code so we don't generate these 2 labels vv
   173  					// they are not needed
   174  					"M3Zw1U5oVhZQeXdyvlpQc6tJz7LG6NiZ7oGQCr1eDSloV75R7lRObrv53UuaHvBOuZG3zBt5BDx9MRoRJwIlfA==": "a",
   175  					"lUa7PEZHR8EfRzYDn+Q38ZZTckepgNlv1sFhRL6l+v7gmV+v/7IxTAoJ2VlAHkCpNU5p5KFLPzPwn6K1Eq27XQ==": "b",
   176  					// ^^
   177  				},
   178  			},
   179  		},
   180  	}
   181  
   182  	for i := range tests {
   183  		test := tests[i]
   184  		label(t, test.src, func(labels *llx.Labels) {
   185  			assert.Equal(t, test.labels, labels)
   186  		})
   187  	}
   188  }