Files

65 lines
1.8 KiB
Go

package webingress
import (
"crypto/ed25519"
"crypto/rand"
"encoding/base64"
"errors"
"testing"
)
func TestParseTrustedKeysJSONAcceptsMapAndArray(t *testing.T) {
publicKey, _, err := ed25519.GenerateKey(rand.Reader)
if err != nil {
t.Fatalf("generate key: %v", err)
}
keyB64 := base64.StdEncoding.EncodeToString(publicKey)
resolver, err := ParseTrustedKeysJSON(`{"key-1":"` + keyB64 + `"}`)
if err != nil {
t.Fatalf("parse map: %v", err)
}
if got, ok, err := resolver.PublicKey(nil, "key-1"); err != nil || !ok || string(got) != string(publicKey) {
t.Fatalf("map resolver got=%x ok=%t err=%v", got, ok, err)
}
resolver, err = ParseTrustedKeysJSON(`[{"key_id":"key-2","public_key":"` + keyB64 + `"}]`)
if err != nil {
t.Fatalf("parse array: %v", err)
}
if _, ok, err := resolver.PublicKey(nil, "key-2"); err != nil || !ok {
t.Fatalf("array resolver ok=%t err=%v", ok, err)
}
}
func TestParseTrustedKeysJSONRejectsInvalidKeys(t *testing.T) {
_, err := ParseTrustedKeysJSON(`{"":"abc"}`)
if !errors.Is(err, ErrFabricEnvelopeSignatureInvalid) {
t.Fatalf("empty key err = %v", err)
}
_, err = ParseTrustedKeysJSON(`{"key-1":"abc"}`)
if !errors.Is(err, ErrFabricEnvelopeSignatureInvalid) {
t.Fatalf("bad public key err = %v", err)
}
_, err = ParseTrustedKeysJSON(`not-json`)
if !errors.Is(err, ErrFabricEnvelopeSignatureInvalid) {
t.Fatalf("bad json err = %v", err)
}
}
func TestTrustedKeysJSONForPublicKey(t *testing.T) {
publicKey, _, err := ed25519.GenerateKey(rand.Reader)
if err != nil {
t.Fatalf("generate key: %v", err)
}
resolver, err := ParseTrustedKeysJSON(TrustedKeysJSONForPublicKey("key-1", publicKey))
if err != nil {
t.Fatalf("parse generated json: %v", err)
}
if _, ok, err := resolver.PublicKey(nil, "key-1"); err != nil || !ok {
t.Fatalf("generated resolver ok=%t err=%v", ok, err)
}
}