blob: b6f5b7f91efb40c9ef807ca526b5634dfaf490dd [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package repo
import (
"encoding/json"
"reflect"
"sort"
"testing"
tuf_data "github.com/flynn/go-tuf/data"
)
func TestMarshaling(t *testing.T) {
goldenCfg := Config{
URL: "fuchsia-pkg://example.com",
RootKeys: []KeyConfig{
{
ED25519Key: "8e70ed31f117087a08ad23e00c2e1c353bf76fc0e0ac1aac334336e2b83ee7f4",
},
},
Mirrors: []MirrorConfig{{
URL: "https://example.com/repo",
Subscribe: true,
}},
RootVersion: 1,
RootThreshold: 1,
}
cfgStr := `
{
"repo_url": "fuchsia-pkg://example.com",
"root_keys": [
{
"type": "ed25519",
"value": "8e70ed31f117087a08ad23e00c2e1c353bf76fc0e0ac1aac334336e2b83ee7f4"
}
],
"mirrors": [
{
"mirror_url": "https://example.com/repo",
"subscribe": true
}
]
}`
var cfg Config
if err := json.Unmarshal([]byte(cfgStr), &cfg); err != nil {
t.Fatalf("could not unmarshal golden config string: %v", err)
}
if !reflect.DeepEqual(cfg, goldenCfg) {
t.Fatalf("expected\n%#v\nand\n%#v\nto be equal", cfg, goldenCfg)
}
}
func TestGetRootKeys(t *testing.T) {
rootJSONStr := `
{
"_type": "root",
"keys": {
"33efe3720e278de9ac57c810c1be71b9ef4dd49c0951edd9a2f9a39af08b5776": {
"keyid_hash_algorithms": [
"sha256"
],
"keytype": "ed25519",
"keyval": {
"public": "8e70ed31f117087a08ad23e00c2e1c353bf76fc0e0ac1aac334336e2b83ee7f4"
},
"scheme": "ed25519"
},
"8bcc00bc3575eea5fb608dea6a521845d4f287d2fa80baa40a902f1f3ec7911e": {
"keyid_hash_algorithms": [
"sha256"
],
"keytype": "ed25519",
"keyval": {
"public": "be0b983f7396da675c40c6b93e47fced7c1e9ea8a32a1fe952ba8f519760b307"
},
"scheme": "ed25519"
},
"c919b6e358fdb4ed062311ac5cebd44787d0f7ae9e5a5a213929dd4e3cde07c4": {
"keyid_hash_algorithms": [
"sha256"
],
"keytype": "ed25519",
"keyval": {
"public": "be0b983f7396da675c40c6b93e47fced7c1e9ea8a32a1fe952ba8f519760b307"
},
"scheme": "ed25519"
},
"f6ee2f092af683f6c1d8cbf477c2a8b7e01cc496fb4324150a172a54f514e4e7": {
"keyid_hash_algorithms": [
"sha256"
],
"keytype": "ed25519",
"keyval": {
"public": "8e70ed31f117087a08ad23e00c2e1c353bf76fc0e0ac1aac334336e2b83ee7f4"
},
"scheme": "ed25519"
}
},
"roles": {
"root": {
"keyids": [
"8bcc00bc3575eea5fb608dea6a521845d4f287d2fa80baa40a902f1f3ec7911e",
"c919b6e358fdb4ed062311ac5cebd44787d0f7ae9e5a5a213929dd4e3cde07c4",
"f6ee2f092af683f6c1d8cbf477c2a8b7e01cc496fb4324150a172a54f514e4e7"
]
},
"other": {
"keyids": [
"33efe3720e278de9ac57c810c1be71b9ef4dd49c0951edd9a2f9a39af08b5776",
"f6ee2f092af683f6c1d8cbf477c2a8b7e01cc496fb4324150a172a54f514e4e7"
]
}
}
}
`
var root tuf_data.Root
if err := json.Unmarshal([]byte(rootJSONStr), &root); err != nil {
t.Fatalf("failed to unmarshal root metadata: %v", err)
}
actual, err := GetRootKeys(&root)
if err != nil {
t.Fatalf("failed to derive root keys: %v", err)
}
sort.Slice(actual, func(i, j int) bool {
return actual[i].ED25519Key <= actual[j].ED25519Key
})
expected := []KeyConfig{
{
ED25519Key: "8e70ed31f117087a08ad23e00c2e1c353bf76fc0e0ac1aac334336e2b83ee7f4",
},
{
ED25519Key: "be0b983f7396da675c40c6b93e47fced7c1e9ea8a32a1fe952ba8f519760b307",
},
}
if !reflect.DeepEqual(expected, actual) {
t.Errorf("unexpected keys:\nexpected: %v\nactual: %v", expected, actual)
}
}