Skip to content

Commit bcb40a8

Browse files
committed
test: add unit test for removeSelectiveKeymasterContent to handle key generation errors
1 parent 9600620 commit bcb40a8

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package core
2+
3+
import (
4+
"strings"
5+
"testing"
6+
7+
"github.com/toeirei/keymaster/internal/model"
8+
"github.com/toeirei/keymaster/internal/security"
9+
)
10+
11+
type fakeRemoteDeployer2 struct {
12+
getContent []byte
13+
deployErr error
14+
}
15+
16+
func (f *fakeRemoteDeployer2) DeployAuthorizedKeys(content string) error { return f.deployErr }
17+
func (f *fakeRemoteDeployer2) GetAuthorizedKeys() ([]byte, error) { return f.getContent, nil }
18+
func (f *fakeRemoteDeployer2) Close() {}
19+
20+
func TestRemoveSelectiveKeymasterContent_GenerateSelectiveKeysContentError(t *testing.T) {
21+
// Make NewDeployerFactory return a deployer whose GetAuthorizedKeys returns
22+
// a Keymaster-managed section. Then force GenerateSelectiveKeysContent to
23+
// fail by clearing the default KeyLister.
24+
origFactory := NewDeployerFactory
25+
defer func() { NewDeployerFactory = origFactory }()
26+
NewDeployerFactory = func(host, user string, privateKey security.Secret, passphrase []byte) (RemoteDeployer, error) {
27+
content := "# Keymaster Managed Keys (Serial: 1)\nssh-rsa AAAAB3Nza...\n# end\nnon-keymaster-line"
28+
return &fakeRemoteDeployer2{getContent: []byte(content), deployErr: nil}, nil
29+
}
30+
31+
// Clear KeyLister to force GenerateSelectiveKeysContent to error.
32+
SetDefaultKeyLister(nil)
33+
defer SetDefaultKeyLister(&fakeKL2{})
34+
35+
var res DecommissionResult
36+
acct := model.Account{ID: 42, Username: "u", Hostname: "h"}
37+
38+
err := removeSelectiveKeymasterContent(&fakeRemoteDeployer2{getContent: []byte("# Keymaster Managed Keys\nssh-rsa AAA\n")}, &res, acct.ID, nil, true)
39+
if err == nil {
40+
t.Fatalf("expected error when GenerateSelectiveKeysContent fails")
41+
}
42+
if !strings.Contains(err.Error(), "failed to generate keys content") && !strings.Contains(err.Error(), "no key lister") {
43+
t.Fatalf("unexpected error: %v", err)
44+
}
45+
}

0 commit comments

Comments
 (0)