blob: 6f895aa76507349650a0147b8e976757bc27d607 [file] [log] [blame]
// Copyright 2018 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 source
import (
"bytes"
"encoding/json"
"io/ioutil"
"os"
"path/filepath"
"testing"
)
func TestFileStore(t *testing.T) {
tmpdir, err := ioutil.TempDir("", "amber-filestore-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpdir)
// check that NewFileStore creates it's parent directories if necessary
os.RemoveAll(tmpdir)
s, err := NewFileStore(filepath.Join(tmpdir, "amber-store"))
if err != nil {
t.Fatal(err)
}
_, err = os.Stat(tmpdir)
if err != nil {
t.Fatal(err)
}
// check that NewFileStore works with a pre-existing dir
os.RemoveAll(tmpdir)
err = os.Mkdir(tmpdir, 0755)
if err != nil {
t.Fatal(err)
}
s, err = NewFileStore(filepath.Join(tmpdir, "amber-store"))
if err != nil {
t.Fatal(err)
}
exampleMeta := map[string]json.RawMessage{
"roots.json": json.RawMessage(`{"some":"keys"}`),
"targets.json": json.RawMessage(`{"some":"targets"}`),
}
// GetMeta should not error even if the store was just created. The returned
// metadata should simply be empty.
m, err := s.GetMeta()
if err != nil {
t.Fatal(err)
}
if got, want := len(m), 0; got != want {
t.Fatalf("got %d, want %d", got, want)
}
// Check that we can store and retrieve a value:
if err := s.SetMeta("roots.json", exampleMeta["roots.json"]); err != nil {
t.Fatal(err)
}
m, err = s.GetMeta()
if err != nil {
t.Fatal(err)
}
if got, want := len(m), 1; got != want {
t.Fatalf("got %d, want %d", got, want)
}
if got, want := m["roots.json"], exampleMeta["roots.json"]; !bytes.Equal(got, want) {
t.Fatalf("SetMeta&GetMeta: got %#v, want %#v", got, want)
}
// Check that new values are appended to the existing data, not overwritten:
if err := s.SetMeta("targets.json", exampleMeta["targets.json"]); err != nil {
t.Fatal(err)
}
m, err = s.GetMeta()
if err != nil {
t.Fatal(err)
}
if got, want := len(m), 2; got != want {
t.Fatalf("got %d, want %d", got, want)
}
for k, v := range exampleMeta {
if got, want := json.RawMessage(m[k]), json.RawMessage(v); !bytes.Equal(got, want) {
t.Fatalf("SetMeta&GetMeta: got %#v, want %#v", got, want)
}
}
}