blob: d1fb62606ec40db2f8379417293466b30c33bb47 [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 runtests
import (
"path"
"reflect"
"testing"
)
type fakeViewer struct {
s TestSummary
allSinks []string
copiedFiles map[string]string
}
func (v fakeViewer) summary(_ string) (*TestSummary, error) {
return &v.s, nil
}
func (v fakeViewer) getAllDataSinks(remote string) ([]string, error) {
return v.allSinks, nil
}
func (v fakeViewer) copyFile(remote, local string) error {
v.copiedFiles[remote] = local
return nil
}
func (v fakeViewer) removeAll(_ string) error {
return nil
}
func (v fakeViewer) close() error {
return nil
}
func TestGetAllDataSinks(t *testing.T) {
expectedSinks := []DataSink{
{
Name: "sink1",
File: "sink1",
},
{
Name: "sink2",
File: "sink2",
},
}
viewer := fakeViewer{allSinks: []string{"sink1", "sink2"}, copiedFiles: map[string]string{}}
copier := DataSinkCopier{viewer: viewer}
dataSinks, err := copier.GetAllDataSinks("REMOTE_DIR")
if err != nil {
t.Fatalf("failed to get data sinks: %s", err)
} else if !reflect.DeepEqual(dataSinks, expectedSinks) {
t.Errorf("got data sinks %v, expected %v", dataSinks, expectedSinks)
}
}
func TestCopyDataSinks(t *testing.T) {
expectedSinks := map[string]DataSinkReference{
"foo_test": {
DataSinkMap{
"sink": {
{
Name: "sink1",
File: "a/b/c/sink1",
},
{
Name: "sink2",
File: "a/d/e/sink2",
},
},
}, "REMOTE_DIR",
},
}
summary := TestSummary{
Tests: []TestDetails{
{
Name: "foo_test",
DataSinks: expectedSinks["foo_test"].Sinks,
},
},
}
viewer := fakeViewer{s: summary, copiedFiles: map[string]string{}}
copier := DataSinkCopier{viewer: viewer}
dataSinks, err := copier.GetReferences("REMOTE_DIR")
if err != nil {
t.Fatalf("failed to get data sinks: %s", err)
} else if !reflect.DeepEqual(dataSinks, expectedSinks) {
t.Errorf("got data sinks %v, expected %v", dataSinks, expectedSinks)
}
var sinkRefs []DataSinkReference
for _, ref := range dataSinks {
sinkRefs = append(sinkRefs, ref)
}
_, err = copier.Copy(sinkRefs, "LOCAL_DIR")
if err != nil {
t.Fatalf("failed to copy data sinks: %s", err)
}
for _, ref := range dataSinks {
for _, sink := range ref.Sinks["sink"] {
src := path.Join("REMOTE_DIR", sink.File)
expectedDest := path.Join("LOCAL_DIR", sink.File)
actualDest, ok := viewer.copiedFiles[src]
if !ok {
t.Errorf("sink %q was not copied", sink.File)
}
if expectedDest != actualDest {
t.Errorf("sink %q was copied to the wrong destination:\nexpected: %s\nactual %s",
sink.File, expectedDest, actualDest)
}
}
}
}