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 }