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  }