github.com/kubri/kubri@v0.5.1-0.20240317001612-bda2aaef967e/pkg/cmd/keys_create_test.go (about) 1 package cmd_test 2 3 import ( 4 "bytes" 5 "io" 6 "strings" 7 "testing" 8 9 "github.com/kubri/kubri/pkg/cmd" 10 "github.com/kubri/kubri/pkg/crypto/dsa" 11 "github.com/kubri/kubri/pkg/crypto/ed25519" 12 "github.com/kubri/kubri/pkg/crypto/pgp" 13 "github.com/kubri/kubri/pkg/crypto/rsa" 14 "github.com/kubri/kubri/pkg/secret" 15 ) 16 17 func TestKeysCreateCmd(t *testing.T) { 18 t.Setenv("KUBRI_PATH", t.TempDir()) 19 20 for _, s := range []string{"dsa", "ed25519", "pgp", "rsa"} { 21 _, err := secret.Get(s + "_key") 22 if err == nil { 23 t.Fatalf("should not have %s key: %s", s, err) 24 } 25 } 26 27 { 28 wantErr := "generating PGP key requires either name or email" 29 var stderr bytes.Buffer 30 err := cmd.Execute("", cmd.WithArgs("keys", "create"), cmd.WithStderr(&stderr), cmd.WithStdout(io.Discard)) 31 if err == nil || !strings.Contains(stderr.String(), wantErr) { 32 t.Errorf("should fail with %q:\n%s", wantErr, &stderr) 33 } 34 } 35 36 err := cmd.Execute("", cmd.WithArgs("keys", "create", "--name", "test", "--email", "test@example.com")) 37 if err != nil { 38 t.Fatal(err) 39 } 40 41 dsaKey, err := secret.Get("dsa_key") 42 if err != nil { 43 t.Fatalf("should have created dsa key: %s", err) 44 } 45 _, err = dsa.UnmarshalPrivateKey(dsaKey) 46 if err != nil { 47 t.Fatalf("should be valid dsa key: %s", err) 48 } 49 50 edKey, err := secret.Get("ed25519_key") 51 if err != nil { 52 t.Fatalf("should have created ed25519 key: %s", err) 53 } 54 _, err = ed25519.UnmarshalPrivateKey(edKey) 55 if err != nil { 56 t.Fatalf("should be valid ed25519 key: %s", err) 57 } 58 59 pgpKey, err := secret.Get("pgp_key") 60 if err != nil { 61 t.Fatalf("should have created pgp key: %s", err) 62 } 63 _, err = pgp.UnmarshalPrivateKey(pgpKey) 64 if err != nil { 65 t.Fatalf("should be valid pgp key: %s", err) 66 } 67 68 rsaKey, err := secret.Get("rsa_key") 69 if err != nil { 70 t.Fatalf("should have created rsa key: %s", err) 71 } 72 _, err = rsa.UnmarshalPrivateKey(rsaKey) 73 if err != nil { 74 t.Fatalf("should be valid rsa key: %s", err) 75 } 76 77 // Run again to ensure existing keys aren't overwritten. 78 err = cmd.Execute("", cmd.WithArgs("keys", "create", "--name", "test", "--email", "test@example.com")) 79 if err != nil { 80 t.Fatal(err) 81 } 82 83 if k, _ := secret.Get("dsa_key"); !bytes.Equal(dsaKey, k) { 84 t.Fatal("should not have regenerated dsa key") 85 } 86 87 if k, _ := secret.Get("ed25519_key"); !bytes.Equal(edKey, k) { 88 t.Fatal("should not have regenerated ed25519 key") 89 } 90 91 if k, _ := secret.Get("pgp_key"); !bytes.Equal(pgpKey, k) { 92 t.Fatal("should not have regenerated pgp key") 93 } 94 95 if k, _ := secret.Get("rsa_key"); !bytes.Equal(rsaKey, k) { 96 t.Fatal("should not have regenerated rsa key") 97 } 98 }