github.com/kubri/kubri@v0.5.1-0.20240317001612-bda2aaef967e/pkg/cmd/keys_public_test.go (about) 1 package cmd_test 2 3 import ( 4 "bytes" 5 "io" 6 "os" 7 "path/filepath" 8 "strings" 9 "testing" 10 11 "github.com/kubri/kubri/pkg/cmd" 12 "github.com/kubri/kubri/pkg/crypto/dsa" 13 "github.com/kubri/kubri/pkg/crypto/ed25519" 14 "github.com/kubri/kubri/pkg/crypto/pgp" 15 "github.com/kubri/kubri/pkg/crypto/rsa" 16 ) 17 18 func TestKeysPublicCmd(t *testing.T) { 19 dir := t.TempDir() 20 t.Setenv("KUBRI_PATH", dir) 21 22 { 23 var stdout bytes.Buffer 24 key, _ := dsa.NewPrivateKey() 25 priv, _ := dsa.MarshalPrivateKey(key) 26 os.WriteFile(filepath.Join(dir, "dsa_key"), priv, 0o600) 27 pub, _ := dsa.MarshalPublicKey(dsa.Public(key)) 28 29 err := cmd.Execute("", cmd.WithArgs("keys", "public", "dsa"), cmd.WithStdout(&stdout)) 30 if err != nil { 31 t.Error(err) 32 } 33 if !bytes.Equal(stdout.Bytes(), pub) { 34 t.Error("dsa public keys should be equal") 35 } 36 } 37 38 { 39 var stdout bytes.Buffer 40 key, _ := ed25519.NewPrivateKey() 41 priv, _ := ed25519.MarshalPrivateKey(key) 42 os.WriteFile(filepath.Join(dir, "ed25519_key"), priv, 0o600) 43 pub, _ := ed25519.MarshalPublicKey(ed25519.Public(key)) 44 45 err := cmd.Execute("", cmd.WithArgs("keys", "public", "ed25519"), cmd.WithStdout(&stdout)) 46 if err != nil { 47 t.Error(err) 48 } 49 if !bytes.Equal(stdout.Bytes(), pub) { 50 t.Error("ed25519 public keys should be equal") 51 } 52 } 53 54 { 55 var stdout bytes.Buffer 56 key, _ := pgp.NewPrivateKey("test", "test@example.com") 57 priv, _ := pgp.MarshalPrivateKey(key) 58 os.WriteFile(filepath.Join(dir, "pgp_key"), priv, 0o600) 59 pub, _ := pgp.MarshalPublicKey(pgp.Public(key)) 60 61 err := cmd.Execute("", cmd.WithArgs("keys", "public", "pgp"), cmd.WithStdout(&stdout)) 62 if err != nil { 63 t.Error(err) 64 } 65 if !bytes.Equal(stdout.Bytes(), pub) { 66 t.Error("pgp public keys should be equal") 67 } 68 } 69 70 { 71 var stdout bytes.Buffer 72 key, _ := rsa.NewPrivateKey() 73 priv, _ := rsa.MarshalPrivateKey(key) 74 os.WriteFile(filepath.Join(dir, "rsa_key"), priv, 0o600) 75 pub, _ := rsa.MarshalPublicKey(rsa.Public(key)) 76 77 err := cmd.Execute("", cmd.WithArgs("keys", "public", "rsa"), cmd.WithStdout(&stdout)) 78 if err != nil { 79 t.Error(err) 80 } 81 if !bytes.Equal(stdout.Bytes(), pub) { 82 t.Error("rsa public keys should be equal") 83 } 84 } 85 } 86 87 func TestKeysPublicCmdErrors(t *testing.T) { 88 tests := []struct { 89 args []string 90 want string 91 }{ 92 { 93 args: []string{"keys", "public"}, 94 want: "accepts 1 arg(s), received 0", 95 }, 96 { 97 args: []string{"keys", "public", "foo"}, 98 want: "invalid argument", 99 }, 100 { 101 args: []string{"keys", "public", "dsa"}, 102 want: "key not found", 103 }, 104 { 105 args: []string{"keys", "public", "ed25519"}, 106 want: "key not found", 107 }, 108 { 109 args: []string{"keys", "public", "rsa"}, 110 want: "key not found", 111 }, 112 } 113 114 t.Setenv("KUBRI_PATH", t.TempDir()) 115 116 for _, test := range tests { 117 var stderr bytes.Buffer 118 err := cmd.Execute("", cmd.WithArgs(test.args...), cmd.WithStderr(&stderr), cmd.WithStdout(io.Discard)) 119 if err == nil || !strings.Contains(stderr.String(), test.want) { 120 t.Errorf("%s should fail with %q:\n%s", test.args, test.want, &stderr) 121 } 122 } 123 }