60 lines
1.7 KiB
Go
60 lines
1.7 KiB
Go
package config
|
|
|
|
import (
|
|
"crypto/ed25519"
|
|
"crypto/rand"
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestParseOriginsRejectsPathsAndWildcards(t *testing.T) {
|
|
if _, err := parseOrigins("https://pwa.example.cn,https://other.example.cn"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, raw := range []string{"*", "https://pwa.example.cn/path", "http://pwa.example.cn"} {
|
|
if _, err := parseOrigins(raw); err == nil {
|
|
t.Fatalf("parseOrigins(%q) succeeded", raw)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseSnapshotKeysPinsLifetime(t *testing.T) {
|
|
publicKey, _, err := ed25519.GenerateKey(rand.Reader)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
now := time.Now().UTC().Truncate(time.Second)
|
|
records := []snapshotKeyConfig{{
|
|
KID: "key-1",
|
|
PublicKeyJWK: json.RawMessage(`{"kty":"OKP","crv":"Ed25519","kid":"key-1","x":"` + base64.RawURLEncoding.EncodeToString(publicKey) + `"}`),
|
|
NotBefore: now.Add(-time.Hour).Format(time.RFC3339Nano),
|
|
RetainUntil: now.Add(time.Hour).Format(time.RFC3339Nano),
|
|
}}
|
|
raw, _ := json.Marshal(records)
|
|
keys, err := parseSnapshotKeys(string(raw), now)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(keys) != 1 {
|
|
t.Fatalf("keys = %d", len(keys))
|
|
}
|
|
}
|
|
|
|
func TestParseInternalEndpointsRequiresOpaqueReferencesAndOrigins(t *testing.T) {
|
|
endpoints, err := parseInternalEndpoints(`{"cn-east-a":"https://relay-a.internal.example"}`)
|
|
if err != nil || endpoints["cn-east-a"] != "https://relay-a.internal.example" {
|
|
t.Fatalf("endpoints=%#v err=%v", endpoints, err)
|
|
}
|
|
for _, raw := range []string{
|
|
`{"../escape":"https://relay.example"}`,
|
|
`{"node":"https://relay.example/path"}`,
|
|
`{"node":"http://relay.example"}`,
|
|
} {
|
|
if _, err := parseInternalEndpoints(raw); err == nil {
|
|
t.Fatalf("accepted invalid endpoint map %s", raw)
|
|
}
|
|
}
|
|
}
|