aboutsummaryrefslogtreecommitdiff
path: root/awwan_sudo_test.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2023-10-12 01:34:59 +0700
committerShulhan <ms@kilabit.info>2023-10-12 22:14:51 +0700
commita0c9e5e87e951df4d1bc86c6ccc2ed73dbe7f942 (patch)
treed0650c477fff66fe87afb51233ce9c88e8c9fd79 /awwan_sudo_test.go
parent207e7f016bf96ab037f510837940c037111cd42f (diff)
downloadawwan-a0c9e5e87e951df4d1bc86c6ccc2ed73dbe7f942.tar.xz
all: add integration tests for magic command "#get!"
Diffstat (limited to 'awwan_sudo_test.go')
-rw-r--r--awwan_sudo_test.go100
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))
+ }
+}