| // 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. |
| |
| // We say that an Environment (or FooSpec) "resolves to" another if the |
| // properties or constraints given by the former are also given by the latter. |
| // This gives a partial ordering on environments expressing a subobject |
| // relationship. |
| // |
| // The utility of being able to express that one environment is a |
| // subenvironment of another lies in validation: an environment is valid if |
| // it resolves to any member of a golden set of environments we refer to as |
| // "platforms", as they correspond to the currently available test platforms |
| // supported by the infrastructure. |
| // |
| // The GN environments specified by test authors in the Fuchsia source |
| // correspond directly to the Environment struct defined here. |
| package testexec |
| |
| import ( |
| "encoding/json" |
| "io/ioutil" |
| ) |
| |
| // Environment describes the environment a test requires. |
| type Environment struct { |
| // Device represents properties of the device that are part of the test |
| // environment. |
| Device DeviceSpec `json:"device"` |
| } |
| |
| // ResolvesTo gives a partial ordering on environments in which one environment |
| // resolves to another if the properties given by the former are also given by |
| // the latter. |
| func (env Environment) resolvesTo(other Environment) bool { |
| if !env.Device.resolvesTo(other.Device) { |
| return false |
| } |
| return true |
| } |
| |
| // DeviceSpec describes the device environment a test requires. |
| type DeviceSpec struct { |
| // Type represents the class of device the test should run on. |
| // This is a required field. |
| Type string `json:"type"` |
| } |
| |
| func (ds DeviceSpec) resolvesTo(other DeviceSpec) bool { |
| if ds.Type != "" && ds.Type != other.Type { |
| return false |
| } |
| return true |
| } |
| |
| // LoadPlatforms loads the list of test platform environments specified as a |
| // JSON list at a given filepath. |
| func LoadPlatforms(platformManifestPath string) ([]Environment, error) { |
| bytes, err := ioutil.ReadFile(platformManifestPath) |
| if err != nil { |
| return nil, err |
| } |
| var platforms []Environment |
| if err = json.Unmarshal(bytes, &platforms); err != nil { |
| return nil, err |
| } |
| return platforms, err |
| } |