go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/sshd/parser_test.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package sshd
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestParser(t *testing.T) {
    13  	t.Run("commented out line", func(t *testing.T) {
    14  		text := []rune(" # This line is commented out")
    15  		line, err := ParseLine(text)
    16  		require.NoError(t, err)
    17  		require.Equal(t, SshdLine{}, line)
    18  	})
    19  
    20  	t.Run("key arg", func(t *testing.T) {
    21  		text := []rune(" \tkey arg \t\n")
    22  		line, err := ParseLine(text)
    23  		require.NoError(t, err)
    24  		require.Equal(t, SshdLine{key: "key", args: "arg"}, line)
    25  	})
    26  
    27  	t.Run("key arg with equal sign", func(t *testing.T) {
    28  		text := []rune(" \tkey=arg \t\n")
    29  		line, err := ParseLine(text)
    30  		require.NoError(t, err)
    31  		require.Equal(t, SshdLine{key: "key", args: "arg"}, line)
    32  	})
    33  
    34  	t.Run("key quoted arg with equal sign", func(t *testing.T) {
    35  		// Need to unescape string
    36  		t.Skip()
    37  
    38  		text := []rune(" \tkey=\" \\\"this is an arg \"\t arg1\n")
    39  		line, err := ParseLine(text)
    40  		require.NoError(t, err)
    41  		require.Equal(t, SshdLine{key: "key", args: "\" this is an arg \" arg1"}, line)
    42  	})
    43  
    44  	t.Run("fancy quoting requiring escapes", func(t *testing.T) {
    45  		text := []rune(" \tkey=\" \\\"this is an arg \"\t\n")
    46  		line, err := ParseLine(text)
    47  		require.NoError(t, err)
    48  		require.Equal(t, SshdLine{key: "key", args: "\" \\\"this is an arg \""}, line)
    49  	})
    50  
    51  	t.Run("key arg with equal sign with varying spaces", func(t *testing.T) {
    52  		text := []rune(" \tkey \t=\t  arg \t\n")
    53  		line, err := ParseLine(text)
    54  		require.NoError(t, err)
    55  		require.Equal(t, SshdLine{key: "key", args: "arg"}, line)
    56  	})
    57  
    58  	t.Run("multiple args with varying spaces", func(t *testing.T) {
    59  		text := []rune(" \tkey arg0\targ1   arg2 ")
    60  		line, err := ParseLine(text)
    61  		require.NoError(t, err)
    62  		require.Equal(t, SshdLine{key: "key", args: "arg0 arg1 arg2"}, line)
    63  	})
    64  
    65  	t.Run("key with equal and multiple args with varying spaces", func(t *testing.T) {
    66  		text := []rune(" \tkey= arg0\targ1   arg2 ")
    67  		line, err := ParseLine(text)
    68  		require.NoError(t, err)
    69  		require.Equal(t, SshdLine{key: "key", args: "arg0 arg1 arg2"}, line)
    70  	})
    71  
    72  	t.Run("inline comment", func(t *testing.T) {
    73  		text := []rune("key arg1 # arg2 ")
    74  		line, err := ParseLine(text)
    75  		require.NoError(t, err)
    76  		require.Equal(t, SshdLine{key: "key", args: "arg1"}, line)
    77  	})
    78  
    79  	t.Run("arg with unit minute", func(t *testing.T) {
    80  		text := []rune("LoginGraceTime=1m")
    81  		line, err := ParseLine(text)
    82  		require.NoError(t, err)
    83  		require.Equal(t, SshdLine{key: "LoginGraceTime", args: "60"}, line)
    84  	})
    85  
    86  	t.Run("arg with unit second", func(t *testing.T) {
    87  		text := []rune("LoginGraceTime=42s")
    88  		line, err := ParseLine(text)
    89  		require.NoError(t, err)
    90  		require.Equal(t, SshdLine{key: "LoginGraceTime", args: "42"}, line)
    91  	})
    92  
    93  	t.Run("arg with unit hour", func(t *testing.T) {
    94  		text := []rune("LoginGraceTime=2h")
    95  		line, err := ParseLine(text)
    96  		require.NoError(t, err)
    97  		require.Equal(t, SshdLine{key: "LoginGraceTime", args: "7200"}, line)
    98  	})
    99  
   100  	t.Run("arg with complex duration", func(t *testing.T) {
   101  		text := []rune("LoginGraceTime=2h10m42s")
   102  		line, err := ParseLine(text)
   103  		require.NoError(t, err)
   104  		require.Equal(t, SshdLine{key: "LoginGraceTime", args: "7842"}, line)
   105  	})
   106  
   107  	t.Run("arg with complex duration, but non-matching key", func(t *testing.T) {
   108  		text := []rune("key=2h10m42s")
   109  		line, err := ParseLine(text)
   110  		require.NoError(t, err)
   111  		require.Equal(t, SshdLine{key: "key", args: "2h10m42s"}, line)
   112  	})
   113  }