1package sshutils23import (4 "testing"56 "github.com/charmbracelet/keygen"7 "golang.org/x/crypto/ssh"8)910func generateKeys(tb testing.TB) (*keygen.SSHKeyPair, *keygen.SSHKeyPair) {11 goodKey1, err := keygen.New("", keygen.WithKeyType(keygen.Ed25519))12 if err != nil {13 tb.Fatal(err)14 }15 goodKey2, err := keygen.New("", keygen.WithKeyType(keygen.RSA))16 if err != nil {17 tb.Fatal(err)18 }1920 return goodKey1, goodKey221}2223func TestParseAuthorizedKey(t *testing.T) {24 goodKey1, goodKey2 := generateKeys(t)25 cases := []struct {26 in string27 good bool28 }{29 {30 goodKey1.AuthorizedKey(),31 true,32 },33 {34 goodKey2.AuthorizedKey(),35 true,36 },37 {38 goodKey1.AuthorizedKey() + "test",39 false,40 },41 {42 goodKey2.AuthorizedKey() + "bad",43 false,44 },45 }46 for _, c := range cases {47 _, _, err := ParseAuthorizedKey(c.in)48 if c.good && err != nil {49 t.Errorf("ParseAuthorizedKey(%q) returned error: %v", c.in, err)50 }51 if !c.good && err == nil {52 t.Errorf("ParseAuthorizedKey(%q) did not return error", c.in)53 }54 }55}5657func TestMarshalAuthorizedKey(t *testing.T) {58 goodKey1, goodKey2 := generateKeys(t)59 cases := []struct {60 in ssh.PublicKey61 expected string62 }{63 {64 goodKey1.PublicKey(),65 goodKey1.AuthorizedKey(),66 },67 {68 goodKey2.PublicKey(),69 goodKey2.AuthorizedKey(),70 },71 {72 nil,73 "",74 },75 }76 for _, c := range cases {77 out := MarshalAuthorizedKey(c.in)78 if out != c.expected {79 t.Errorf("MarshalAuthorizedKey(%v) returned %q, expected %q", c.in, out, c.expected)80 }81 }82}8384func TestKeysEqual(t *testing.T) {85 goodKey1, goodKey2 := generateKeys(t)86 cases := []struct {87 in1 ssh.PublicKey88 in2 ssh.PublicKey89 expected bool90 }{91 {92 goodKey1.PublicKey(),93 goodKey1.PublicKey(),94 true,95 },96 {97 goodKey2.PublicKey(),98 goodKey2.PublicKey(),99 true,100 },101 {102 goodKey1.PublicKey(),103 goodKey2.PublicKey(),104 false,105 },106 {107 nil,108 nil,109 false,110 },111 {112 nil,113 goodKey1.PublicKey(),114 false,115 },116 }117118 for _, c := range cases {119 out := KeysEqual(c.in1, c.in2)120 if out != c.expected {121 t.Errorf("KeysEqual(%v, %v) returned %v, expected %v", c.in1, c.in2, out, c.expected)122 }123 }124}