mirror of
https://github.com/pocket-id/pocket-id.git
synced 2025-12-09 23:02:59 +03:00
Co-authored-by: Alessandro (Ale) Segala <43508+ItalyPaleAle@users.noreply.github.com> Co-authored-by: Elias Schneider <login@eliasschneider.com>
127 lines
3.0 KiB
Go
127 lines
3.0 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"sync"
|
|
"testing"
|
|
)
|
|
|
|
func TestFormatAAGUID(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
aaguid []byte
|
|
want string
|
|
}{
|
|
{
|
|
name: "empty byte slice",
|
|
aaguid: []byte{},
|
|
want: "",
|
|
},
|
|
{
|
|
name: "16 byte slice - standard UUID",
|
|
aaguid: []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10},
|
|
want: "01020304-0506-0708-090a-0b0c0d0e0f10",
|
|
},
|
|
{
|
|
name: "non-16 byte slice",
|
|
aaguid: []byte{0x01, 0x02, 0x03, 0x04, 0x05},
|
|
want: "0102030405",
|
|
},
|
|
{
|
|
name: "specific UUID example",
|
|
aaguid: mustDecodeHex("adce000235bcc60a648b0b25f1f05503"),
|
|
want: "adce0002-35bc-c60a-648b-0b25f1f05503",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := FormatAAGUID(tt.aaguid)
|
|
if got != tt.want {
|
|
t.Errorf("FormatAAGUID() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGetAuthenticatorName(t *testing.T) {
|
|
// Reset the aaguidMap for testing
|
|
originalMap := aaguidMap
|
|
originalOnce := aaguidMapOnce
|
|
defer func() {
|
|
aaguidMap = originalMap
|
|
aaguidMapOnce = originalOnce
|
|
}()
|
|
|
|
// Inject a test AAGUID map
|
|
aaguidMap = map[string]string{
|
|
"adce0002-35bc-c60a-648b-0b25f1f05503": "Test Authenticator",
|
|
"00000000-0000-0000-0000-000000000000": "Zero Authenticator",
|
|
}
|
|
aaguidMapOnce = sync.Once{}
|
|
aaguidMapOnce.Do(func() {}) // Mark as done to avoid loading from file
|
|
|
|
tests := []struct {
|
|
name string
|
|
aaguid []byte
|
|
want string
|
|
}{
|
|
{
|
|
name: "empty byte slice",
|
|
aaguid: []byte{},
|
|
want: "",
|
|
},
|
|
{
|
|
name: "known AAGUID",
|
|
aaguid: mustDecodeHex("adce000235bcc60a648b0b25f1f05503"),
|
|
want: "Test Authenticator Passkey",
|
|
},
|
|
{
|
|
name: "zero UUID",
|
|
aaguid: mustDecodeHex("00000000000000000000000000000000"),
|
|
want: "Zero Authenticator Passkey",
|
|
},
|
|
{
|
|
name: "unknown AAGUID",
|
|
aaguid: mustDecodeHex("ffffffffffffffffffffffffffffffff"),
|
|
want: "",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := GetAuthenticatorName(tt.aaguid)
|
|
if got != tt.want {
|
|
t.Errorf("GetAuthenticatorName() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestLoadAAGUIDsFromFile(t *testing.T) {
|
|
// Reset the map and once flag for clean testing
|
|
aaguidMap = nil
|
|
aaguidMapOnce = sync.Once{}
|
|
|
|
// Trigger loading of AAGUIDs by calling GetAuthenticatorName
|
|
GetAuthenticatorName([]byte{0x01, 0x02, 0x03, 0x04})
|
|
|
|
if len(aaguidMap) == 0 {
|
|
t.Error("loadAAGUIDsFromFile() failed to populate aaguidMap")
|
|
}
|
|
|
|
// Check for a few known entries that should be in the embedded file
|
|
// This test will be more brittle as it depends on the content of aaguids.json,
|
|
// but it helps verify that the loading actually worked
|
|
t.Log("AAGUID map loaded with", len(aaguidMap), "entries")
|
|
}
|
|
|
|
// Helper function to convert hex string to bytes
|
|
func mustDecodeHex(s string) []byte {
|
|
bytes, err := hex.DecodeString(s)
|
|
if err != nil {
|
|
panic("invalid hex in test: " + err.Error())
|
|
}
|
|
return bytes
|
|
}
|