blob: 38c60cc07ab896c57953724f36f3e6ee4644cbf7 [file] [log] [blame]
// Copyright 2020 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 fuzz
import (
"os"
"path/filepath"
"testing"
"github.com/google/go-cmp/cmp"
)
func TestHandleSerialize(t *testing.T) {
connector := NewSSHConnector("host", 1234, "key")
launcher := NewQemuLauncher(nil)
launcher.TmpDir = "フクシャ"
data := HandleData{connector, launcher}
handle, err := NewHandleWithData(data)
if err != nil {
t.Fatalf("error creating handle: %s", err)
}
defer handle.Release()
s := handle.Serialize()
reloadedHandle, err := LoadHandleFromString(s)
if err != nil {
t.Fatalf("error deserializing handle: %s", err)
}
result, err := reloadedHandle.GetData()
if err != nil {
t.Fatalf("error getting handle data: %s", err)
}
if diff := cmp.Diff(&data, result, cmp.AllowUnexported(HandleData{},
SSHConnector{}, QemuLauncher{})); diff != "" {
t.Fatalf("incorrect reloaded handle (-want +got):\n%s", diff)
}
}
func TestHandleRelease(t *testing.T) {
handle, err := NewHandleWithData(HandleData{})
if err != nil {
t.Fatalf("error creating handle: %s", err)
}
s := handle.Serialize()
handle.Release()
if err := handle.SetData(HandleData{}); err == nil {
t.Fatalf("SetData unexpectedly succeeded on released handle %q", handle)
}
if _, err := LoadHandleFromString(s); err == nil {
t.Fatalf("LoadHandleFromString unexpectedly succeeded on released handle %q", handle)
}
if _, err := handle.GetData(); err == nil {
t.Fatalf("GetData unexpectedly succeeded on released handle %q", handle)
}
}
func TestLoadInvalidHandle(t *testing.T) {
// Point to nonexistent file
invalidPath := filepath.Join(t.TempDir(), "invalid")
if _, err := LoadHandleFromString(invalidPath); err == nil {
t.Fatalf("expected error loading from invalid path, but succeeded")
}
// Point to file that exists, but does not contain JSON
nonJsonFile := createTempfileWithContents(t, "garbage", "json")
defer os.Remove(nonJsonFile)
if _, err := LoadHandleFromString(nonJsonFile); err == nil {
t.Fatalf("expected error loading from non-json file, but succeeded")
}
}
func TestHandleGetEmptyData(t *testing.T) {
// JSON with empty contents
emptyJsonFile := createTempfileWithContents(t, `{}`, "json")
defer os.Remove(emptyJsonFile)
handle, err := LoadHandleFromString(emptyJsonFile)
if err != nil {
t.Fatalf("error deserializing handle: %s", err)
}
if _, err := handle.GetData(); err != nil {
t.Fatalf("error loading from empty handle: %s", err)
}
}
func TestHandleGetInvalidData(t *testing.T) {
// JSON with unsupported type
badTypeFile := createTempfileWithContents(t, `{"ConnectorType": "UnsupportedConnector"}`, "json")
defer os.Remove(badTypeFile)
handle, err := LoadHandleFromString(badTypeFile)
if err != nil {
t.Fatalf("error deserializing handle: %s", err)
}
if data, err := handle.GetData(); err == nil {
t.Fatalf("expected error loading invalid type, but succeeded: %+v", data)
}
}