blob: fe9ce2c99e907ef6c0aa39c583765bbced956011 [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 outputs
import (
"archive/tar"
"bytes"
"io"
"path"
"go.fuchsia.dev/tools/lib/tarutil"
"go.fuchsia.dev/tools/testing/runtests"
"go.fuchsia.dev/tools/testing/testrunner"
)
// TarOutput records test stdout and stderr streams in a TAR archive.
type TarOutput struct {
w *tar.Writer
}
func NewTarOutput(w io.Writer) *TarOutput {
tw := tar.NewWriter(w)
return &TarOutput{w: tw}
}
// Record writes the given test result's stdout and stderr streams to the same file within
// a Tar archive.
func (o *TarOutput) Record(result testrunner.TestResult) {
pathInArchive := path.Join(result.Name, runtests.TestOutputFilename)
stdout := bytes.NewReader(result.Stdout)
stderr := bytes.NewReader(result.Stderr)
tarutil.TarReader(o.w, io.MultiReader(stdout, stderr), pathInArchive)
}
// TarFile adds a file to the underlying archive.
func (o *TarOutput) TarFile(bytes []byte, filename string) error {
return tarutil.TarBuffer(o.w, bytes, filename)
}
// Close flushes all data to the archive.
func (o *TarOutput) Close() error {
return o.w.Close()
}