blob: 59785b146e5f8601727a96f9094f51db3d8e7073 [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 testsharder
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"reflect"
"sort"
"testing"
)
var barTestModifier = TestModifier{
Target: "//obsidian/lib/bar:bar_tests",
TotalRuns: 2,
}
var bazTestModifier = TestModifier{
Target: "//obsidian/public/lib/baz:baz_host_tests",
OS: Linux,
}
func TestLoadTestModifiers(t *testing.T) {
areEqual := func(a, b []TestModifier) bool {
stringify := func(modifier TestModifier) string {
return fmt.Sprintf("%#v", modifier)
}
sort := func(list []TestModifier) {
sort.Slice(list[:], func(i, j int) bool {
return stringify(list[i]) < stringify(list[j])
})
}
sort(a)
sort(b)
return reflect.DeepEqual(a, b)
}
tmpDir, err := ioutil.TempDir("", "test-spec")
if err != nil {
t.Fatalf("failed to create temp dir: %v", err)
}
defer os.RemoveAll(tmpDir)
initial := []TestModifier{barTestModifier, bazTestModifier}
modifiersPath := filepath.Join(tmpDir, "test_modifiers.json")
m, err := os.Create(modifiersPath)
if err != nil {
t.Fatal(err)
}
defer m.Close()
if err := json.NewEncoder(m).Encode(&initial); err != nil {
t.Fatal(err)
}
actual, err := LoadTestModifiers(modifiersPath)
if err != nil {
t.Fatalf("failed to load test modifiers: %v", err)
}
bazOut := bazTestModifier
// If TotalRuns is missing, it gets set to default 1.
bazOut.TotalRuns = 1
barOut := barTestModifier
// If OS is missing, it gets set to default Fuchsia.
barOut.OS = Fuchsia
expected := []TestModifier{barOut, bazOut}
if !areEqual(expected, actual) {
t.Fatalf("test modifiers not properly loaded:\nexpected:\n%+v\nactual:\n%+v", expected, actual)
}
}