diff options
| author | Shulhan <ms@kilabit.info> | 2023-10-12 01:34:59 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2023-10-12 22:14:51 +0700 |
| commit | a0c9e5e87e951df4d1bc86c6ccc2ed73dbe7f942 (patch) | |
| tree | d0650c477fff66fe87afb51233ce9c88e8c9fd79 /awwan_sudo_test.go | |
| parent | 207e7f016bf96ab037f510837940c037111cd42f (diff) | |
| download | awwan-a0c9e5e87e951df4d1bc86c6ccc2ed73dbe7f942.tar.xz | |
all: add integration tests for magic command "#get!"
Diffstat (limited to 'awwan_sudo_test.go')
| -rw-r--r-- | awwan_sudo_test.go | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/awwan_sudo_test.go b/awwan_sudo_test.go new file mode 100644 index 0000000..720726c --- /dev/null +++ b/awwan_sudo_test.go @@ -0,0 +1,100 @@ +// SPDX-FileCopyrightText: 2023 M. Shulhan <ms@kilabit.info> +// SPDX-License-Identifier: GPL-3.0-or-later + +//go:build integration + +package awwan + +import ( + "bytes" + "os" + "path/filepath" + "testing" + + "github.com/shuLhan/share/lib/test" + "github.com/shuLhan/share/lib/test/mock" +) + +func TestAwwan_Local_SudoGet(t *testing.T) { + type testCase struct { + desc string + lineRange string + fileDest string + sudoPass string + expContent string + expError string + } + + // Load the test data. + var ( + baseDir = filepath.Join(`testdata`, `local`) + testdataFile = filepath.Join(baseDir, `get.data`) + + tdata *test.Data + err error + ) + + tdata, err = test.LoadData(testdataFile) + if err != nil { + t.Fatal(err) + } + + var ( + mockrw = mock.ReadWriter{} + + aww *Awwan + ) + + aww, err = New(baseDir) + if err != nil { + t.Fatal(err) + } + + // Mock terminal to read passphrase for private key. + aww.cryptoc.termrw = &mockrw + + var cases = []testCase{{ + desc: `WithPlainFile`, + lineRange: `3`, + sudoPass: "awwan\r\n", + fileDest: filepath.Join(baseDir, `tmp`, `os-release`), + expContent: string(tdata.Output[`tmp/os-release`]), + }, { + desc: `WithInvalidPassword`, + lineRange: `3`, + sudoPass: "invalid\r\n", + expError: `Local: SudoCopy: ExecLocal: exit status 1`, + }} + + var ( + script = filepath.Join(baseDir, `get.aww`) + mockStdin = bytes.Buffer{} + + c testCase + gotContent []byte + ) + + for _, c = range cases { + t.Log(c.desc) + + var req = NewRequest(CommandModeLocal, script, c.lineRange) + + // Mock the request stdin to read password from buffer. + mockStdin.Reset() + mockStdin.WriteString(c.sudoPass) + req.stdin = &mockStdin + + err = aww.Local(req) + if err != nil { + test.Assert(t, `Local: error`, c.expError, err.Error()) + continue + } + + gotContent, err = os.ReadFile(c.fileDest) + if err != nil { + t.Fatal(err) + } + + test.Assert(t, `content`, c.expContent, string(gotContent)) + } +} |
