From 128d5c513b7a5c50a65f03480fc61b06fb5ef8e8 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Tue, 11 Nov 2025 11:27:17 -0800 Subject: Use subcommands package This reduces a little bit of complexity. (does it?) --- dec_test.go | 64 ++++++++++++++++++++++--------------------------------------- 1 file changed, 23 insertions(+), 41 deletions(-) (limited to 'dec_test.go') diff --git a/dec_test.go b/dec_test.go index 956d0a6..b06c722 100644 --- a/dec_test.go +++ b/dec_test.go @@ -3,7 +3,6 @@ package main import ( "bytes" "errors" - "flag" "path/filepath" "slices" "strings" @@ -32,10 +31,10 @@ func TestDecryptFile_Force(t *testing.T) { const password = "asdf" fileName := filepath.Join(t.TempDir(), "file") mustWriteFile(t, fileName, []byte("test file content")) - if err := (&encryptOptions{}).encryptFile(fileName, password); err != nil { + if err := (&encCmd{}).encryptFile(fileName, password); err != nil { t.Fatalf("Failed to encrypt file: %s", err) } - err := (&decryptOptions{decryptFlags: decryptFlags{force: tc.force}}).decryptFile(fileName+".enc", password) + err := (&decCmd{force: tc.force}).decryptFile(fileName+".enc", password) if gotErr := err != nil; gotErr != tc.wantErr { t.Errorf("decryptFile(force=%t) returned returned error %v when output file exists, want error? %t", tc.force, err, tc.wantErr) } @@ -69,7 +68,7 @@ func TestDecrypt_BadFileFormat(t *testing.T) { fileName := filepath.Join(t.TempDir(), "file") mustWriteFile(t, fileName, tc.fileContent) - err := (&decryptOptions{}).decryptFile(fileName, "asdf") + err := (&decCmd{}).decryptFile(fileName, "asdf") if err == nil { t.Errorf("DecryptFile succeeded for incorrect file format, want error") } @@ -84,11 +83,11 @@ func TestDecryptFile_WeirdName(t *testing.T) { fileContent := []byte("file content") fileName := filepath.Join(t.TempDir(), "file") mustWriteFile(t, fileName, fileContent) - if err := (&encryptOptions{}).encryptFile(fileName, password); err != nil { + if err := (&encCmd{}).encryptFile(fileName, password); err != nil { t.Fatalf("EncryptFile failed: %s", err) } mustRename(t, fileName+".enc", fileName+".encrypted") - if err := (&decryptOptions{}).decryptFile(fileName+".encrypted", password); err != nil { + if err := (&decCmd{}).decryptFile(fileName+".encrypted", password); err != nil { t.Fatalf("DecryptFile failed: %s", err) } gotContents := mustReadFile(t, fileName+".encrypted.dec") @@ -100,7 +99,7 @@ func TestDecryptFile_WeirdName(t *testing.T) { func TestDecryptFile_NotFound(t *testing.T) { t.Parallel() - err := (&decryptOptions{}).decryptFile("my-nonexistent-file.txt", "asdf") + err := (&decCmd{}).decryptFile("my-nonexistent-file.txt", "asdf") if err == nil { t.Fatal("decryptFile succeeded for nonexistent file, want error") } @@ -113,43 +112,26 @@ func TestDecryptFile_NoPermission(t *testing.T) { mustWriteFile(t, fileName, []byte("test file content")) mustWriteFile(t, strings.TrimSuffix(fileName, ".enc"), nil) mustChmod(t, strings.TrimSuffix(fileName, ".enc"), 0400) - err := (&decryptOptions{decryptFlags: decryptFlags{force: true}}).decryptFile(fileName, "asdf") + err := (&decCmd{force: true}).decryptFile(fileName, "asdf") if err == nil { t.Fatal("decryptFile succeeded for unwritable file, want error") } } -func TestDecryptOptions_RegisterFlags(t *testing.T) { - t.Parallel() - - var o decryptOptions - fs := flag.NewFlagSet("test", flag.ContinueOnError) - o.registerFlags(fs) - const cmd = "-p asdf -f" - fs.Parse(strings.Split(cmd, " ")) - want := decryptFlags{ - password: "asdf", - force: true, - } - if o.decryptFlags != want { - t.Errorf("Command line %q parsed incorrect decryptOptions, got %+v, want %+v", cmd, o, want) - } -} - -func TestDecryptOptions_Run(t *testing.T) { +func TestDecCmd_Run(t *testing.T) { t.Parallel() const password = "asdf" fileContent := []byte("test file content") fileName := filepath.Join(t.TempDir(), "file") mustWriteFile(t, fileName, fileContent) - if err := (&encryptOptions{}).encryptFile(fileName, password); err != nil { + if err := (&encCmd{}).encryptFile(fileName, password); err != nil { t.Errorf("EncryptFile failed: %s", err) } mustRemove(t, fileName) - err := (&decryptOptions{decryptFlags: decryptFlags{password: password}}).run(fileName + ".enc") + err := (&decCmd{password: password}).run(fileName + ".enc") if err != nil { - t.Errorf("decryptOptions.run failed: %s", err) + t.Errorf("decCmd.run failed: %s", err) } gotFileContents := mustReadFile(t, fileName) if !bytes.Equal(gotFileContents, fileContent) { @@ -157,36 +139,36 @@ func TestDecryptOptions_Run(t *testing.T) { } } -func TestDecryptOptions_Run_UsageError(t *testing.T) { +func TestDecCmd_Run_UsageError(t *testing.T) { t.Parallel() - err := (&decryptOptions{}).run() + err := (&decCmd{}).run() if err == nil { t.Errorf("Run without -p when reading from stdin, want error") } } -func TestDecryptOptions_Run_NotFound(t *testing.T) { +func TestDecCmd_Run_NotFound(t *testing.T) { t.Parallel() - err := (&decryptOptions{decryptFlags: decryptFlags{password: "asdf"}}).run("my-nonexistent-file-name.txt") + err := (&decCmd{password: "asdf"}).run("my-nonexistent-file-name.txt") if err == nil { t.Errorf("run succeeded with nonexistent file, want error") } } -func TestDecryptOptions_Run_Stdin(t *testing.T) { +func TestDecCmd_Run_Stdin(t *testing.T) { t.Parallel() const password = "asdf" content := []byte("test contents") encrypted := new(bytes.Buffer) - if err := (&encryptOptions{}).encrypt(encrypted, bytes.NewReader(content), password); err != nil { + if err := (&encCmd{}).encrypt(encrypted, bytes.NewReader(content), password); err != nil { t.Fatalf("Failed to encrypt: %s", err) } gotContentBuf := new(bytes.Buffer) - if err := (&decryptOptions{ - decryptFlags: decryptFlags{password: password}, + if err := (&decCmd{ + password: password, stdin: bytes.NewReader(encrypted.Bytes()), stdout: gotContentBuf, }).run(); err != nil { @@ -198,7 +180,7 @@ func TestDecryptOptions_Run_Stdin(t *testing.T) { } } -func TestDecryptOptions_Run_ReadPassword(t *testing.T) { +func TestDecCmd_Run_ReadPassword(t *testing.T) { t.Parallel() for _, tc := range []struct { @@ -219,18 +201,18 @@ func TestDecryptOptions_Run_ReadPassword(t *testing.T) { fileName := filepath.Join(t.TempDir(), "file") mustWriteFile(t, fileName, []byte("test file content")) - if err := (&encryptOptions{}).encryptFile(fileName, password); err != nil { + if err := (&encCmd{}).encryptFile(fileName, password); err != nil { t.Errorf("EncryptFile failed: %s", err) } mustRemove(t, fileName) - err := (&decryptOptions{ + err := (&decCmd{ passwordIn: func() (string, error) { return password, tc.err }, }).run(fileName + ".enc") if gotErr := err != nil; gotErr != tc.wantErr { - t.Errorf("decryptOptions.run returned error %v reading password from stdin, want error? %t", err, tc.wantErr) + t.Errorf("decCmd.run returned error %v reading password from stdin, want error? %t", err, tc.wantErr) } }) } -- cgit v1.3.1