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  }