summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2023-09-25 23:55:35 +0700
committerShulhan <ms@kilabit.info>2023-09-26 00:24:08 +0700
commit98f212f8cd74cafc15b0eb9716853940aa891bf6 (patch)
tree3bce45690f5eabe8477c5c5b9f7cd5be96b5f3d8
parenta91585331cf6ea99da56bc79551a72acd923a1a6 (diff)
downloadawwan-98f212f8cd74cafc15b0eb9716853940aa891bf6.tar.xz
all: test local put without encrypted file
-rw-r--r--awwan_test.go133
-rw-r--r--session.go4
-rw-r--r--testdata/encrypt/encrypted.txt.org (renamed from testdata/encrypt/file.txt.org)0
-rw-r--r--testdata/encrypt/encrypted.txt.vault (renamed from testdata/encrypt/file.txt.vault)0
-rw-r--r--testdata/encrypt/local.aww4
-rw-r--r--testdata/encrypt/plain.txt2
-rw-r--r--testdata/encrypt/test.data6
-rw-r--r--testdata/encrypt/tmp/.gitignore2
8 files changed, 81 insertions, 70 deletions
diff --git a/awwan_test.go b/awwan_test.go
index 7973325..77e64ec 100644
--- a/awwan_test.go
+++ b/awwan_test.go
@@ -214,16 +214,15 @@ func TestAwwanLocal_withEncryption(t *testing.T) {
}
}
-func TestAwwanLocalPut_withEncryption(t *testing.T) {
+func TestAwwanLocalPut(t *testing.T) {
type testCase struct {
- desc string
- tdataOut string
- passphrase string
- expError string
-
- // If true, the Awwan.cryptoc.privateKey will be set to nil
- // before running Local.
- resetPrivateKey bool
+ desc string
+ passphrase string
+ lineRange string
+ fileDest string
+ tdataStdout string
+ tdataFileOut string
+ expError string
}
// Load the test data output.
@@ -238,84 +237,82 @@ func TestAwwanLocalPut_withEncryption(t *testing.T) {
t.Fatal(err)
}
- // Create the Awwan instance.
+ var cases = []testCase{{
+ desc: `With text file`,
+ lineRange: `3`,
+ fileDest: filepath.Join(baseDir, `tmp`, `plain.txt`),
+ tdataFileOut: `tmp/plain.txt`,
+ }, {
+ desc: `With encrypted file`,
+ lineRange: `5`,
+ fileDest: filepath.Join(baseDir, `tmp`, `decrypted.txt`),
+ tdataFileOut: `tmp/decrypted.txt`,
+ passphrase: "s3cret\r",
+ }, {
+ desc: `With encrypted file, empty passphrase`,
+ expError: "!!! Copy: generateFileInput: private key is missing or not loaded\n",
+ lineRange: `5`,
+ }, {
+ desc: `With encrypted file, invalid passphrase`,
+ passphrase: "invalid\r",
+ lineRange: `5`,
+ expError: `Local: NewSession: loadEnvFromPaths: LoadPrivateKeyInteractive: x509: decryption password incorrect`,
+ }}
+
var (
+ script = filepath.Join(baseDir, `local.aww`)
mockout = bytes.Buffer{}
mockerr = bytes.Buffer{}
mockrw = mock.ReadWriter{}
- aww = Awwan{}
- )
-
- err = aww.init(baseDir)
- if err != nil {
- t.Fatal(err)
- }
-
- // Mock terminal to read passphrase for private key.
- mockrw.BufRead.WriteString("s3cret\r")
- aww.cryptoc.termrw = &mockrw
-
- var (
- script = filepath.Join(baseDir, `local.aww`)
- lineRange = `3`
- fileDest = filepath.Join(baseDir, `file.txt.decrypted`)
-
- cases = []testCase{{
- desc: `WithSuccess`,
- tdataOut: `local.aww:3:exp_file_content`,
- }, {
- desc: `WithEmptyPrivateKey`,
- expError: `Local: NewSession: loadEnvFromPaths: private key is missing or not loaded`,
- resetPrivateKey: true,
- }, {
- desc: `WithInvalidPassphrase`,
- passphrase: "invalid\r",
- expError: `Local: NewSession: loadEnvFromPaths: LoadPrivateKeyInteractive: x509: decryption password incorrect`,
- resetPrivateKey: true,
- }}
+ aww *Awwan
c testCase
- expContent string
+ expContent []byte
gotContent []byte
)
for _, c = range cases {
- t.Run(c.desc, func(tt *testing.T) {
- _ = os.Remove(fileDest)
+ t.Log(c.desc)
- if c.resetPrivateKey {
- aww.cryptoc.privateKey = nil
+ aww, err = New(baseDir)
+ if err != nil {
+ t.Fatal(err)
+ }
- // Mock terminal to read passphrase for private key.
- mockrw.BufRead.Reset()
- mockrw.BufRead.WriteString(c.passphrase)
- }
+ // Mock terminal to read passphrase for private key.
+ mockrw.BufRead.Reset()
+ mockrw.BufRead.WriteString(c.passphrase)
+ aww.cryptoc.termrw = &mockrw
- var req = NewRequest(CommandModeLocal, script, lineRange)
+ if len(c.fileDest) != 0 {
+ _ = os.Remove(c.fileDest)
+ }
- mockout.Reset()
- mockerr.Reset()
- req.stdout = &mockout
- req.stderr = &mockerr
+ var req = NewRequest(CommandModeLocal, script, c.lineRange)
- err = aww.Local(req)
- if err != nil {
- test.Assert(tt, c.desc, c.expError, err.Error())
- return
- }
+ mockout.Reset()
+ mockerr.Reset()
+ req.stdout = &mockout
+ req.stderr = &mockerr
+
+ err = aww.Local(req)
+ if err != nil {
+ test.Assert(t, c.desc, c.expError, err.Error())
+ return
+ }
- // We cannot assert the stdout since its print dynamic
- // paths.
+ // The stdout cannot be asserted since its print dynamic
+ // paths.
- test.Assert(tt, `stderr`, ``, mockerr.String())
+ test.Assert(t, `stderr`, c.expError, mockerr.String())
- gotContent, err = os.ReadFile(fileDest)
+ if len(c.fileDest) != 0 {
+ gotContent, err = os.ReadFile(c.fileDest)
if err != nil {
- tt.Fatal(err)
+ t.Fatal(err)
}
- expContent = string(tdata.Output[c.tdataOut])
-
- test.Assert(tt, `content`, expContent, string(gotContent))
- })
+ expContent = tdata.Output[c.tdataFileOut]
+ test.Assert(t, `content`, string(expContent), string(gotContent))
+ }
}
}
diff --git a/session.go b/session.go
index 181b9de..af308db 100644
--- a/session.go
+++ b/session.go
@@ -567,6 +567,10 @@ func (ses *Session) loadEnvFromPaths() (err error) {
err = ses.loadFileEnv(awwanEnv, true)
if err != nil {
+ if errors.Is(err, errPrivateKeyMissing) {
+ log.Printf(`%s: %s: %s`, logp, awwanEnv, err)
+ continue
+ }
return fmt.Errorf(`%s: %w`, logp, err)
}
}
diff --git a/testdata/encrypt/file.txt.org b/testdata/encrypt/encrypted.txt.org
index de6797e..de6797e 100644
--- a/testdata/encrypt/file.txt.org
+++ b/testdata/encrypt/encrypted.txt.org
diff --git a/testdata/encrypt/file.txt.vault b/testdata/encrypt/encrypted.txt.vault
index 43cb223..43cb223 100644
--- a/testdata/encrypt/file.txt.vault
+++ b/testdata/encrypt/encrypted.txt.vault
diff --git a/testdata/encrypt/local.aww b/testdata/encrypt/local.aww
index 31e737d..a77ec42 100644
--- a/testdata/encrypt/local.aww
+++ b/testdata/encrypt/local.aww
@@ -1,3 +1,5 @@
echo {{.Val "secret::pass"}}
-#put: {{.ScriptDir}}/file.txt {{.ScriptDir}}/file.txt.decrypted
+#put: {{.ScriptDir}}/plain.txt {{.ScriptDir}}/tmp/plain.txt
+
+#put: {{.ScriptDir}}/encrypted.txt {{.ScriptDir}}/tmp/decrypted.txt
diff --git a/testdata/encrypt/plain.txt b/testdata/encrypt/plain.txt
new file mode 100644
index 0000000..de6797e
--- /dev/null
+++ b/testdata/encrypt/plain.txt
@@ -0,0 +1,2 @@
+The host name is {{.Val "host::name"}}.
+The secret password is {{.Val "secret::pass"}}.
diff --git a/testdata/encrypt/test.data b/testdata/encrypt/test.data
index 40ad1de..330e646 100644
--- a/testdata/encrypt/test.data
+++ b/testdata/encrypt/test.data
@@ -8,6 +8,10 @@ this_is_a_secret
--> local: 1: echo this_is_a_secret_in_sub
this_is_a_secret_in_sub
-<<< local.aww:3:exp_file_content
+<<< tmp/plain.txt
+The host name is encrypt.
+The secret password is .
+
+<<< tmp/decrypted.txt
The host name is encrypt.
The secret password is this_is_a_secret.
diff --git a/testdata/encrypt/tmp/.gitignore b/testdata/encrypt/tmp/.gitignore
new file mode 100644
index 0000000..120f485
--- /dev/null
+++ b/testdata/encrypt/tmp/.gitignore
@@ -0,0 +1,2 @@
+*
+!/.gitignore