|
| 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