mirror of
https://github.com/muun/recovery.git
synced 2025-11-12 23:01:40 -05:00
87 lines
1.9 KiB
Go
87 lines
1.9 KiB
Go
package recoverycode
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"testing"
|
|
)
|
|
|
|
func TestGenerate(t *testing.T) {
|
|
code := Generate()
|
|
if err := Validate(code); err != nil {
|
|
t.Fatalf("expected generated recovery code to be valid, got error: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestValidate(t *testing.T) {
|
|
testCases := []struct {
|
|
desc string
|
|
input string
|
|
expectErr bool
|
|
}{
|
|
{
|
|
desc: "empty string",
|
|
input: "",
|
|
expectErr: true,
|
|
},
|
|
{
|
|
desc: "invalid version",
|
|
input: "LB2Q-48Z3-25JR-S5JB-5SUS-HXHJ-RCMM-8YUA",
|
|
expectErr: true,
|
|
},
|
|
{
|
|
desc: "invalid characters",
|
|
input: "LA2Q-48Z3-25JR-S51B-5SUS-HXHJ-RCMM-8YUA",
|
|
expectErr: true,
|
|
},
|
|
{
|
|
desc: "invalid length",
|
|
input: "LA2Q-48Z3-25JR-SB5S-USHX-HJRC-MM8YUA",
|
|
expectErr: true,
|
|
},
|
|
{
|
|
desc: "valid",
|
|
input: "LA2Q-48Z3-25JR-S5JB-5SUS-HXHJ-RCMM-8YUA",
|
|
expectErr: false,
|
|
},
|
|
}
|
|
for _, tt := range testCases {
|
|
t.Run(tt.desc, func(t *testing.T) {
|
|
err := Validate(tt.input)
|
|
if (err != nil) != tt.expectErr {
|
|
t.Errorf("unexpected result: %v", err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConvertToKey(t *testing.T) {
|
|
testCases := []struct {
|
|
desc string
|
|
input string
|
|
expected string
|
|
}{
|
|
{
|
|
desc: "legacy recovery code",
|
|
input: "R52Q-48Z3-25JR-S5JB-5SUS-HXHJ-RCMM-8YUA",
|
|
expected: "ade3fe99c608fd04484bce1ccf2889a5096f68f4b6b459e7f9ee9f0ada0a2782",
|
|
},
|
|
{
|
|
desc: "version 2 recovery code",
|
|
input: "LA2Q-48Z3-25JR-S5JB-5SUS-HXHJ-RCMM-8YUA",
|
|
expected: "0e1446153d4cafb073110739608fdd76b8712221476ec198cf35e1d74d274e83",
|
|
},
|
|
}
|
|
for _, tt := range testCases {
|
|
t.Run(tt.desc, func(t *testing.T) {
|
|
key, err := ConvertToKey(tt.input, "FFFFFFFF")
|
|
if err != nil {
|
|
t.Errorf("unexpected error: %v", err)
|
|
}
|
|
got := hex.EncodeToString(key.Serialize())
|
|
if got != tt.expected {
|
|
t.Errorf("expected %v but got %v", tt.expected, got)
|
|
}
|
|
})
|
|
}
|
|
}
|