| // 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 botanist |
| |
| import ( |
| "encoding/json" |
| "os" |
| "strings" |
| |
| "fuchsia.googlesource.com/infra/infra/pdu" |
| ) |
| |
| const ( |
| netbootFilenamePrefix = "<<netboot>>" |
| KernelFilename = netbootFilenamePrefix + "kernel.bin" |
| RamdiskFilename = netbootFilenamePrefix + "ramdisk.bin" |
| CmdlineFilename = netbootFilenamePrefix + "cmdline" |
| |
| imageFilenamePrefix = "<<image>>" |
| EFIFilename = imageFilenamePrefix + "efi.img" |
| KerncFilename = imageFilenamePrefix + "kernc.img" |
| FVMFilename = imageFilenamePrefix + "sparse.fvm" |
| |
| TestSummaryFilename = "summary.json" |
| ) |
| |
| // StringsFlag implements flag.Value so it may be treated as a flag type. |
| type StringsFlag []string |
| |
| // Set implments flag.Value.Set. |
| func (s *StringsFlag) Set(val string) error { |
| *s = append(*s, val) |
| return nil |
| } |
| |
| // Strings implments flag.Value.String. |
| func (s *StringsFlag) String() string { |
| if s == nil { |
| return "" |
| } |
| return strings.Join([]string(*s), ", ") |
| } |
| |
| // DeviceProperties contains static properties of a hardware device. |
| type DeviceProperties struct { |
| // Nodename is the hostname of the device that we want to boot on. |
| Nodename string `json:"nodename"` |
| |
| // PDU is the configuration for the attached Power Distribution Unit. |
| PDU *pdu.Config `json:"pdu,omitempty"` |
| } |
| |
| // LoadDeviceProperties unmarshalls the DeviceProperties found in a given file. |
| func LoadDeviceProperties(propertiesFile string, properties *DeviceProperties) error { |
| file, err := os.Open(propertiesFile) |
| if err != nil { |
| return err |
| } |
| |
| return json.NewDecoder(file).Decode(properties) |
| } |
| |
| // TestSummary is the runtest summary output file format. |
| type TestSummary struct { |
| Tests []struct { |
| Name string `json:"name"` |
| OutputFile string `json:"output_file"` |
| Result string `json:"result"` |
| DataSinks map[string][]struct { |
| Name string `json:"name"` |
| File string `json:"file"` |
| } `json:"data_sinks,omitempty"` |
| } `json:"tests"` |
| Outputs map[string]string `json:"outputs,omitempty"` |
| } |