blob: 09f0b15482872f562f82e86a64d3dc04e20b8007 [file]
// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Package common provide command utilities and variables for all components in
// cros-test to use.
package common
import (
"bufio"
"fmt"
"io"
"log"
"go.chromium.org/chromiumos/config/go/test/api"
)
// TestScanner makes a scanner to read from test streams.
func TestScanner(stream io.Reader, logger *log.Logger, harness string) {
const maxCapacity = 4096 * 1024
scanner := bufio.NewScanner(stream)
// Expand the buffer size to avoid deadlocks on heavy logs
buf := make([]byte, maxCapacity)
scanner.Buffer(buf, maxCapacity)
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
logger.Printf("[%v] %v", harness, scanner.Text())
}
if scanner.Err() != nil {
logger.Println("Failed to read pipe: ", scanner.Err())
}
}
// UnpackMetadata unpacks the Any metadata field into AutotestExecutionMetadata
func UnpackMetadata(req *api.CrosTestRequest) (interface{}, error) {
if req.Metadata == nil {
return nil, nil
}
if autotestMetaData, err := unpackAutotestMetadata(req); err == nil {
return autotestMetaData, nil
}
return unpackTastMetadata(req)
}
// unpackAutotestMetadata unpacks the Any metadata field into AutotestExecutionMetadata
func unpackAutotestMetadata(req *api.CrosTestRequest) (*api.AutotestExecutionMetadata, error) {
if req.Metadata == nil {
return &api.AutotestExecutionMetadata{}, nil
}
var m api.AutotestExecutionMetadata
if err := req.Metadata.UnmarshalTo(&m); err != nil {
return nil, fmt.Errorf("improperly formatted input proto metadata, %s", err)
}
return &m, nil
}
// unpackTastMetadata unpacks the Any metadata field into TastExecutionMetadata
func unpackTastMetadata(req *api.CrosTestRequest) (*api.TastExecutionMetadata, error) {
if req.Metadata == nil {
return &api.TastExecutionMetadata{}, nil
}
var m api.TastExecutionMetadata
if err := req.Metadata.UnmarshalTo(&m); err != nil {
return nil, fmt.Errorf("improperly formatted input proto metadata, %s", err)
}
return &m, nil
}