// 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.

#include <stdint.h>

#include <unittest/unittest.h>

#include "fuzzer-fixture.h"
#include "test-fuzzer.h"

namespace fuzzing {
namespace testing {
namespace {

// See fuzzer-fixture.cpp for the location and contents of test files.

bool TestSetOption() {
    BEGIN_TEST;
    TestFuzzer test;
    ASSERT_TRUE(test.InitZircon());

    EXPECT_NE(ZX_OK, test.SetOption("", "value1"));
    EXPECT_NE(ZX_OK, test.SetOption("key1", ""));

    // Value isn't set
    const char* value = test.GetOption("key1");
    EXPECT_NULL(value);

    // Empty options are ignored
    EXPECT_EQ(ZX_OK, test.SetOption("", ""));
    EXPECT_EQ(ZX_OK, test.SetOption(""));
    EXPECT_EQ(ZX_OK, test.SetOption("# A comment"));
    EXPECT_EQ(ZX_OK, test.SetOption("   # A comment with leading whitespace"));

    // Set some values normally
    EXPECT_EQ(ZX_OK, test.SetOption("key1", "value1"));
    EXPECT_EQ(ZX_OK, test.SetOption("key2", "value2"));
    EXPECT_EQ(ZX_OK, test.SetOption("key3=value3"));
    EXPECT_EQ(ZX_OK, test.SetOption("\t -key4 \t=\t value4 \t# A comment"));

    // Check values
    value = test.GetOption("key1");
    ASSERT_NONNULL(value);
    EXPECT_STR_EQ(value, "value1");

    value = test.GetOption("key2");
    ASSERT_NONNULL(value);
    EXPECT_STR_EQ(value, "value2");

    value = test.GetOption("key3");
    ASSERT_NONNULL(value);
    EXPECT_STR_EQ(value, "value3");

    value = test.GetOption("key4");
    ASSERT_NONNULL(value);
    EXPECT_STR_EQ(value, "value4");

    // Replace each option
    EXPECT_EQ(ZX_OK, test.SetOption("key3", "value4"));
    EXPECT_EQ(ZX_OK, test.SetOption("key2=value3"));
    EXPECT_EQ(ZX_OK, test.SetOption(" \t-key1\t = \tvalue2\t # A comment"));
    EXPECT_EQ(ZX_OK, test.SetOption("key4", "value1"));

    // Check values
    value = test.GetOption("key1");
    ASSERT_NONNULL(value);
    EXPECT_STR_EQ(value, "value2");

    value = test.GetOption("key2");
    ASSERT_NONNULL(value);
    EXPECT_STR_EQ(value, "value3");

    value = test.GetOption("key3");
    ASSERT_NONNULL(value);
    EXPECT_STR_EQ(value, "value4");

    value = test.GetOption("key4");
    ASSERT_NONNULL(value);
    EXPECT_STR_EQ(value, "value1");

    // Must be key value pair
    EXPECT_NE(ZX_OK, test.SetOption("key1", ""));
    EXPECT_NE(ZX_OK, test.SetOption("", "value2"));
    EXPECT_NE(ZX_OK, test.SetOption("key3"));
    EXPECT_NE(ZX_OK, test.SetOption("key5=#value5"));

    END_TEST;
}

bool TestRebasePath() {
    BEGIN_TEST;
    TestFuzzer test;
    ASSERT_TRUE(test.InitZircon());
    const FuzzerFixture& fixture = test.fixture();

    Path path;
    EXPECT_EQ(ZX_OK, test.RebasePath("boot", &path));
    EXPECT_CSTR_EQ(path, fixture.path("boot/"));

    EXPECT_EQ(ZX_OK, test.RebasePath("boot/test/fuzz", &path));
    EXPECT_CSTR_EQ(path, fixture.path("boot/test/fuzz/"));

    EXPECT_NE(ZX_OK, test.RebasePath("pkgfs", &path));
    EXPECT_CSTR_EQ(path, fixture.path());

    END_TEST;
}

bool TestGetPackagePath() {
    BEGIN_TEST;
    TestFuzzer test;
    ASSERT_TRUE(test.InitFuchsia());
    const FuzzerFixture& fixture = test.fixture();

    Path path;
    fbl::String expected;
    EXPECT_NE(ZX_OK, test.GetPackagePath("", &path));
    EXPECT_CSTR_EQ(path, fixture.path());

    EXPECT_NE(ZX_OK, test.GetPackagePath("not-a-package", &path));
    EXPECT_CSTR_EQ(path, fixture.path());

    const char* package = "zircon_fuzzers";
    EXPECT_EQ(ZX_OK, test.GetPackagePath(package, &path));
    EXPECT_CSTR_EQ(path,
                   fixture.path("pkgfs/packages/%s/%s/", package, fixture.max_version(package)));

    EXPECT_NE(ZX_OK, test.GetPackagePath("fuchsia", &path));
    EXPECT_CSTR_EQ(path, fixture.path());

    package = "fuchsia1_fuzzers";
    EXPECT_EQ(ZX_OK, test.GetPackagePath(package, &path));
    EXPECT_CSTR_EQ(path,
                   fixture.path("pkgfs/packages/%s/%s/", package, fixture.max_version(package)));

    package = "fuchsia2_fuzzers";
    EXPECT_EQ(ZX_OK, test.GetPackagePath(package, &path));
    EXPECT_CSTR_EQ(path,
                   fixture.path("pkgfs/packages/%s/%s/", package, fixture.max_version(package)));

    END_TEST;
}

bool TestFindZirconFuzzers() {
    BEGIN_TEST;
    TestFuzzer test;
    ASSERT_TRUE(test.InitZircon());

    StringMap fuzzers;
    test.FindZirconFuzzers("no/such/dir", "", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 0);

    test.FindZirconFuzzers("boot/test/fuzz", "no-such", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 0);

    // Empty matches all
    test.FindZirconFuzzers("boot/test/fuzz", "", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 2);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target2"));

    // Idempotent
    test.FindZirconFuzzers("boot/test/fuzz", "", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 2);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target2"));

    // Substrings match
    fuzzers.clear();
    test.FindZirconFuzzers("boot/test/fuzz", "target", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 2);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target2"));

    fuzzers.clear();
    test.FindZirconFuzzers("boot/test/fuzz", "1", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 1);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NULL(fuzzers.get("zircon_fuzzers/target2"));

    END_TEST;
}

bool TestFindFuchsiaFuzzers() {
    BEGIN_TEST;
    TestFuzzer test;
    ASSERT_TRUE(test.InitFuchsia());

    StringMap fuzzers;
    test.FindFuchsiaFuzzers("not-a-package", "", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 0);

    test.FindFuchsiaFuzzers("", "not-a-target", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 0);

    // Empty matches all
    test.FindFuchsiaFuzzers("", "", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 4);
    EXPECT_NULL(fuzzers.get("zircon_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));
    EXPECT_NONNULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    // Idempotent
    test.FindFuchsiaFuzzers("", "", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 4);
    EXPECT_NULL(fuzzers.get("zircon_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));
    EXPECT_NONNULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    // Substrings match
    fuzzers.clear();
    test.FindFuchsiaFuzzers("fuchsia", "", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 4);
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));
    EXPECT_NONNULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    fuzzers.clear();
    test.FindFuchsiaFuzzers("", "target", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 4);
    EXPECT_NULL(fuzzers.get("zircon_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));
    EXPECT_NONNULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    fuzzers.clear();
    test.FindFuchsiaFuzzers("fuchsia", "target", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 4);
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));
    EXPECT_NONNULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    fuzzers.clear();
    test.FindFuchsiaFuzzers("", "1", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 1);
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));

    fuzzers.clear();
    test.FindFuchsiaFuzzers("1", "", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 3);
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));

    fuzzers.clear();
    test.FindFuchsiaFuzzers("1", "4", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 0);

    fuzzers.clear();
    test.FindFuchsiaFuzzers("2", "1", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 0);

    END_TEST;
}

bool TestFindFuzzers() {
    BEGIN_TEST;

    // Zircon tests
    TestFuzzer test;
    ASSERT_TRUE(test.InitZircon());

    // Empty matches all
    StringMap fuzzers;
    test.FindFuzzers("", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 2);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target2"));

    // Idempotent
    test.FindFuzzers("", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 2);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target2"));

    // Substrings match
    fuzzers.clear();
    test.FindFuzzers("invalid", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 0);

    test.FindFuzzers("fuchsia", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 0);

    fuzzers.clear();
    test.FindFuzzers("zircon", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 2);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target2"));
    EXPECT_NULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NULL(fuzzers.get("fuchsia1_fuzzers/target3"));
    EXPECT_NULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    fuzzers.clear();
    test.FindFuzzers("target", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 2);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target2"));

    fuzzers.clear();
    test.FindFuzzers("1", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 1);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));

    // Fuchsia tests
    ASSERT_TRUE(test.InitFuchsia());

    // Empty matches all
    test.FindFuzzers("", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 6);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));
    EXPECT_NONNULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    // Idempotent
    test.FindFuzzers("", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 6);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));
    EXPECT_NONNULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    // Substrings match
    fuzzers.clear();
    test.FindFuzzers("fuzzers/no-such-target", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 0);

    test.FindFuzzers("no-such-package/target", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 0);

    test.FindFuzzers("zircon", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 2);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target2"));

    fuzzers.clear();
    test.FindFuzzers("fuchsia", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 4);
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));
    EXPECT_NONNULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    fuzzers.clear();
    test.FindFuzzers("fuchsia2", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 1);
    EXPECT_NONNULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    fuzzers.clear();
    test.FindFuzzers("fuchsia", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 4);
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));
    EXPECT_NONNULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    fuzzers.clear();
    test.FindFuzzers("_fuzzers/target", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 6);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));
    EXPECT_NONNULL(fuzzers.get("fuchsia2_fuzzers/target4"));

    fuzzers.clear();
    test.FindFuzzers("1", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 4);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));

    fuzzers.clear();
    test.FindFuzzers("1/", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 3);
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target2"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target3"));

    fuzzers.clear();
    test.FindFuzzers("/1", &fuzzers);
    EXPECT_EQ(fuzzers.size(), 2);
    EXPECT_NONNULL(fuzzers.get("zircon_fuzzers/target1"));
    EXPECT_NONNULL(fuzzers.get("fuchsia1_fuzzers/target1"));

    END_TEST;
}

bool TestCheckProcess() {
    BEGIN_TEST;
    TestFuzzer test;
    ASSERT_TRUE(test.InitZircon());

    EXPECT_FALSE(test.CheckProcess(ZX_HANDLE_INVALID));
    EXPECT_FALSE(test.CheckProcess(zx_process_self()));

    char name[ZX_MAX_NAME_LEN];
    ASSERT_EQ(ZX_OK, zx_object_get_property(zx_process_self(), ZX_PROP_NAME, name, sizeof(name)));

    EXPECT_TRUE(test.CheckProcess(zx_process_self(), name));

    END_TEST;
}

bool TestInvalid() {
    BEGIN_TEST;
    TestFuzzer test;
    ASSERT_TRUE(test.InitZircon());

    ASSERT_TRUE(test.Eval(""));
    EXPECT_NE(ZX_OK, test.Run());
    ASSERT_TRUE(test.Eval("bad"));
    EXPECT_NE(ZX_OK, test.Run());

    END_TEST;
}

bool TestHelp() {
    BEGIN_TEST;
    TestFuzzer test;
    ASSERT_TRUE(test.InitZircon());

    ASSERT_TRUE(test.Eval("help"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("help"));
    EXPECT_TRUE(test.InStdOut("list"));
    EXPECT_TRUE(test.InStdOut("seeds"));
    EXPECT_TRUE(test.InStdOut("start"));
    EXPECT_TRUE(test.InStdOut("check"));
    EXPECT_TRUE(test.InStdOut("stop"));
    EXPECT_TRUE(test.InStdOut("repro"));
    EXPECT_TRUE(test.InStdOut("merge"));

    END_TEST;
}

bool TestList() {
    BEGIN_TEST;
    TestFuzzer test;

    // Zircon tests
    ASSERT_TRUE(test.InitZircon());

    ASSERT_TRUE(test.Eval("list"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("zircon_fuzzers/target1"));
    EXPECT_TRUE(test.InStdOut("zircon_fuzzers/target2"));
    EXPECT_FALSE(test.InStdOut("fuchsia1_fuzzers/target1"));
    EXPECT_FALSE(test.InStdOut("fuchsia1_fuzzers/target2"));
    EXPECT_FALSE(test.InStdOut("fuchsia1_fuzzers/target3"));
    EXPECT_FALSE(test.InStdOut("fuchsia2_fuzzers/target4"));

    ASSERT_TRUE(test.Eval("list fuchsia"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("no match"));

    ASSERT_TRUE(test.Eval("list target"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("zircon_fuzzers/target1"));
    EXPECT_TRUE(test.InStdOut("zircon_fuzzers/target2"));
    EXPECT_FALSE(test.InStdOut("fuchsia1_fuzzers/target1"));
    EXPECT_FALSE(test.InStdOut("fuchsia1_fuzzers/target2"));
    EXPECT_FALSE(test.InStdOut("fuchsia1_fuzzers/target3"));
    EXPECT_FALSE(test.InStdOut("fuchsia2_fuzzers/target4"));

    ASSERT_TRUE(test.Eval("list zircon_fuzzers/target1"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("zircon_fuzzers/target1"));
    EXPECT_FALSE(test.InStdOut("zircon_fuzzers/target2"));
    EXPECT_FALSE(test.InStdOut("fuchsia1_fuzzers/target1"));
    EXPECT_FALSE(test.InStdOut("fuchsia1_fuzzers/target2"));
    EXPECT_FALSE(test.InStdOut("fuchsia1_fuzzers/target3"));
    EXPECT_FALSE(test.InStdOut("fuchsia2_fuzzers/target4"));

    // Fuchsia tests
    ASSERT_TRUE(test.InitFuchsia());

    ASSERT_TRUE(test.Eval("list"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("zircon_fuzzers/target1"));
    EXPECT_TRUE(test.InStdOut("zircon_fuzzers/target2"));
    EXPECT_TRUE(test.InStdOut("fuchsia1_fuzzers/target1"));
    EXPECT_TRUE(test.InStdOut("fuchsia1_fuzzers/target2"));
    EXPECT_TRUE(test.InStdOut("fuchsia1_fuzzers/target3"));
    EXPECT_TRUE(test.InStdOut("fuchsia2_fuzzers/target4"));

    ASSERT_TRUE(test.Eval("list fuchsia"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_FALSE(test.InStdOut("zircon_fuzzers/target1"));
    EXPECT_FALSE(test.InStdOut("zircon_fuzzers/target2"));
    EXPECT_TRUE(test.InStdOut("fuchsia1_fuzzers/target1"));
    EXPECT_TRUE(test.InStdOut("fuchsia1_fuzzers/target2"));
    EXPECT_TRUE(test.InStdOut("fuchsia1_fuzzers/target3"));
    EXPECT_TRUE(test.InStdOut("fuchsia2_fuzzers/target4"));

    ASSERT_TRUE(test.Eval("list target"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("zircon_fuzzers/target1"));
    EXPECT_TRUE(test.InStdOut("zircon_fuzzers/target2"));
    EXPECT_TRUE(test.InStdOut("fuchsia1_fuzzers/target1"));
    EXPECT_TRUE(test.InStdOut("fuchsia1_fuzzers/target2"));
    EXPECT_TRUE(test.InStdOut("fuchsia1_fuzzers/target3"));
    EXPECT_TRUE(test.InStdOut("fuchsia2_fuzzers/target4"));

    ASSERT_TRUE(test.Eval("list fuchsia1_fuzzers/target1"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_FALSE(test.InStdOut("zircon_fuzzers/target1"));
    EXPECT_FALSE(test.InStdOut("zircon_fuzzers/target2"));
    EXPECT_TRUE(test.InStdOut("fuchsia1_fuzzers/target1"));
    EXPECT_FALSE(test.InStdOut("fuchsia1_fuzzers/target2"));
    EXPECT_FALSE(test.InStdOut("fuchsia1_fuzzers/target3"));
    EXPECT_FALSE(test.InStdOut("fuchsia2_fuzzers/target4"));

    END_TEST;
}

bool TestSeeds() {
    BEGIN_TEST;
    TestFuzzer test;

    // Zircon tests
    ASSERT_TRUE(test.InitZircon());

    ASSERT_TRUE(test.Eval("seeds"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("missing"));

    ASSERT_TRUE(test.Eval("seeds foobar"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("no match"));

    ASSERT_TRUE(test.Eval("seeds target"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("multiple"));

    ASSERT_TRUE(test.Eval("seeds zircon/target2"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("no seed"));

    // Fuchsia tests
    ASSERT_TRUE(test.InitFuchsia());

    ASSERT_TRUE(test.Eval("seeds zircon/target2"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("//path/to/seed/corpus"));
    EXPECT_TRUE(test.InStdOut("//path/to/cipd/ensure/file"));
    EXPECT_TRUE(test.InStdOut("https://gcs/url"));

    ASSERT_TRUE(test.Eval("seeds fuchsia1/target3"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("//path/to/seed/corpus"));
    EXPECT_TRUE(test.InStdOut("//path/to/cipd/ensure/file"));
    EXPECT_TRUE(test.InStdOut("https://gcs/url"));

    END_TEST;
}

bool TestStart() {
    BEGIN_TEST;
    TestFuzzer test;

    // Zircon tests
    ASSERT_TRUE(test.InitZircon());

    ASSERT_TRUE(test.Eval("start"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("missing"));

    ASSERT_TRUE(test.Eval("start foobar"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("no match"));

    ASSERT_TRUE(test.Eval("start target"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("multiple"));

    // Zircon fuzzer
    ASSERT_TRUE(test.Eval("start zircon/target2"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_GT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-jobs=1"));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_GT(0, test.FindArg("-baz=qux"));
    EXPECT_GT(0, test.FindArg("-dict=%s", test.dictionary()));
    EXPECT_GT(0, test.FindArg("-foo=bar"));
    EXPECT_LT(0, test.FindArg(test.data_path("corpus")));

    // Fuchsia tests
    ASSERT_TRUE(test.InitFuchsia());

    // Zircon fuzzer within Fuchsia
    ASSERT_TRUE(test.Eval("start zircon/target2"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_GT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-jobs=1"));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_LT(0, test.FindArg("-baz=qux"));
    EXPECT_LT(0, test.FindArg("-dict=%s", test.dictionary()));
    EXPECT_LT(0, test.FindArg("-foo=bar"));
    EXPECT_LT(0, test.FindArg(test.data_path("corpus")));

    // Fuchsia fuzzer without resources
    ASSERT_TRUE(test.Eval("start fuchsia1/target1"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_LT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));

    // Fuchsia fuzzer with resources
    ASSERT_TRUE(test.Eval("start fuchsia1/target3"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_LT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-jobs=1"));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_LT(0, test.FindArg("-baz=qux"));
    EXPECT_LT(0, test.FindArg("-dict=%s", test.dictionary()));
    EXPECT_LT(0, test.FindArg("-foo=bar"));
    EXPECT_LT(0, test.FindArg(test.data_path("corpus")));

    // Fuchsia fuzzer with resources, command-line option, and explicit corpus
    ASSERT_TRUE(test.Eval("start fuchsia2/target4 /path/to/another/corpus -foo=baz"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_LT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-jobs=1"));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_LT(0, test.FindArg("-baz=qux"));
    EXPECT_LT(0, test.FindArg("-dict=%s", test.dictionary()));
    EXPECT_LT(0, test.FindArg("-foo=baz"));
    EXPECT_LT(0, test.FindArg("/path/to/another/corpus"));
    EXPECT_GT(0, test.FindArg(test.data_path("corpus")));

    END_TEST;
}

bool TestCheck() {
    BEGIN_TEST;
    TestFuzzer test;

    // Zircon tests
    ASSERT_TRUE(test.InitZircon());

    ASSERT_TRUE(test.Eval("check"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("missing"));

    ASSERT_TRUE(test.Eval("check foobar"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("no match"));

    ASSERT_TRUE(test.Eval("check target"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("multiple"));

    ASSERT_TRUE(test.Eval("check zircon/target1"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("stopped"));
    EXPECT_TRUE(test.InStdOut(test.executable()));
    EXPECT_TRUE(test.InStdOut(test.data_path()));
    EXPECT_TRUE(test.InStdOut("0 inputs"));
    EXPECT_TRUE(test.InStdOut("none"));

    ASSERT_TRUE(test.Eval("check zircon/target2"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("stopped"));
    EXPECT_TRUE(test.InStdOut(test.executable()));
    EXPECT_TRUE(test.InStdOut(test.data_path()));
    EXPECT_TRUE(test.InStdOut("0 inputs"));
    EXPECT_TRUE(test.InStdOut("crash"));

    // Fuchsia tests
    ASSERT_TRUE(test.InitFuchsia());

    ASSERT_TRUE(test.Eval("check zircon/target2"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("stopped"));
    EXPECT_TRUE(test.InStdOut(test.executable()));
    EXPECT_TRUE(test.InStdOut(test.data_path()));
    EXPECT_TRUE(test.InStdOut("0 inputs"));
    EXPECT_TRUE(test.InStdOut("crash"));

    ASSERT_TRUE(test.Eval("check fuchsia/target1"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("stopped"));
    EXPECT_TRUE(test.InStdOut(test.executable()));
    EXPECT_TRUE(test.InStdOut(test.data_path()));
    EXPECT_TRUE(test.InStdOut("0 inputs"));
    EXPECT_TRUE(test.InStdOut("none"));

    ASSERT_TRUE(test.Eval("check fuchsia/target4"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("stopped"));
    EXPECT_TRUE(test.InStdOut(test.executable()));
    EXPECT_TRUE(test.InStdOut(test.data_path()));
    EXPECT_TRUE(test.InStdOut("0 inputs"));
    EXPECT_TRUE(test.InStdOut("crash"));

    END_TEST;
}

bool TestStop() {
    BEGIN_TEST;
    TestFuzzer test;

    ASSERT_TRUE(test.InitZircon());

    ASSERT_TRUE(test.Eval("stop"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("missing"));

    ASSERT_TRUE(test.Eval("stop foobar"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("no match"));

    ASSERT_TRUE(test.Eval("stop target"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("multiple"));

    ASSERT_TRUE(test.Eval("stop zircon/target1"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdOut("stopped"));

    END_TEST;
}

bool TestRepro() {
    BEGIN_TEST;
    TestFuzzer test;

    // Zircon tests
    FuzzerFixture fixture;
    ASSERT_TRUE(test.InitZircon());

    ASSERT_TRUE(test.Eval("repro"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("missing"));

    ASSERT_TRUE(test.Eval("repro foobar"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("no match"));

    ASSERT_TRUE(test.Eval("repro target"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("multiple"));

    ASSERT_TRUE(test.Eval("repro zircon/target1"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("no match"));

    // Automatically add artifacts
    ASSERT_TRUE(test.Eval("repro zircon/target2"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_LT(0, test.FindArg(test.data_path("crash-deadbeef")));
    EXPECT_LT(0, test.FindArg(test.data_path("leak-deadfa11")));
    EXPECT_LT(0, test.FindArg(test.data_path("oom-feedface")));

    // Filter artifacts based on substring
    ASSERT_TRUE(test.Eval("repro zircon/target2 dead"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_LT(0, test.FindArg(test.data_path("crash-deadbeef")));
    EXPECT_LT(0, test.FindArg(test.data_path("leak-deadfa11")));
    EXPECT_GT(0, test.FindArg(test.data_path("oom-feedface")));

    // Fuchsia tests
    ASSERT_TRUE(test.InitFuchsia());

    // Zircon fuzzer within Fuchsia
    ASSERT_TRUE(test.Eval("repro zircon/target2 fa"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_GT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_LT(0, test.FindArg("-baz=qux"));
    EXPECT_LT(0, test.FindArg("-dict=%s", test.dictionary()));
    EXPECT_LT(0, test.FindArg("-foo=bar"));
    EXPECT_LT(0, test.FindArg(test.data_path("leak-deadfa11")));
    EXPECT_LT(0, test.FindArg(test.data_path("oom-feedface")));
    EXPECT_GT(0, test.FindArg(test.data_path("crash-deadbeef")));
    EXPECT_GT(0, test.FindArg(test.data_path("corpus")));

    ASSERT_TRUE(test.Eval("repro fuchsia1/target1"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("no match"));

    // Fuchsia fuzzer with resources
    ASSERT_TRUE(test.Eval("repro fuchsia2/target4"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_LT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_LT(0, test.FindArg("-baz=qux"));
    EXPECT_LT(0, test.FindArg("-dict=%s", test.dictionary()));
    EXPECT_LT(0, test.FindArg("-foo=bar"));
    EXPECT_LT(0, test.FindArg(test.data_path("leak-deadfa11")));
    EXPECT_LT(0, test.FindArg(test.data_path("oom-feedface")));
    EXPECT_LT(0, test.FindArg(test.data_path("crash-deadbeef")));
    EXPECT_GT(0, test.FindArg(test.data_path("corpus")));

    END_TEST;
}

bool TestMerge() {
    BEGIN_TEST;
    TestFuzzer test;

    // Zircon tests
    FuzzerFixture fixture;
    ASSERT_TRUE(test.InitZircon());

    ASSERT_TRUE(test.Eval("merge"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("missing"));

    ASSERT_TRUE(test.Eval("merge foobar"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("no match"));

    ASSERT_TRUE(test.Eval("merge target"));
    EXPECT_NE(ZX_OK, test.Run());
    EXPECT_TRUE(test.InStdErr("multiple"));

    // Zircon minimizing merge
    ASSERT_TRUE(test.Eval("merge zircon/target2"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_GT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_LT(0, test.FindArg("-merge=1"));
    EXPECT_LT(0, test.FindArg("-merge_control_file=%s", test.data_path(".mergefile")));
    EXPECT_LT(0, test.FindArg(test.data_path("corpus")));
    EXPECT_LT(0, test.FindArg(test.data_path("corpus.prev")));

    // Fuchsia tests
    ASSERT_TRUE(test.InitFuchsia());

    Path path;
    size_t len;

    // Zircon minimizing merge in Fuchsia
    ASSERT_TRUE(test.Eval("merge zircon/target2"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_GT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_LT(0, test.FindArg("-merge=1"));
    EXPECT_LT(0, test.FindArg("-merge_control_file=%s", test.data_path(".mergefile")));
    EXPECT_LT(0, test.FindArg(test.data_path("corpus")));
    EXPECT_LT(0, test.FindArg(test.data_path("corpus.prev")));

    path.Reset();
    ASSERT_EQ(ZX_OK, path.Push(test.data_path()));
    EXPECT_NE(ZX_OK, path.Push("corpus.prev"));
    EXPECT_NE(ZX_OK, path.GetSize(".mergefile", &len));

    // Fuchsia minimizing merge
    ASSERT_TRUE(test.Eval("merge fuchsia2/target4"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_LT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_LT(0, test.FindArg("-merge=1"));
    EXPECT_LT(0, test.FindArg("-merge_control_file=%s", test.data_path(".mergefile")));
    EXPECT_LT(0, test.FindArg(test.data_path("corpus")));
    EXPECT_LT(0, test.FindArg(test.data_path("corpus.prev")));

    path.Reset();
    ASSERT_EQ(ZX_OK, path.Push(test.data_path()));
    EXPECT_NE(ZX_OK, path.Push("corpus.prev"));
    EXPECT_NE(ZX_OK, path.GetSize(".mergefile", &len));

    // Fuchsia merge of another corpus without an existing corpus
    ASSERT_TRUE(test.Eval("merge fuchsia1/target3 /path/to/another/corpus"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_LT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_LT(0, test.FindArg("-merge=1"));
    EXPECT_LT(0, test.FindArg("-merge_control_file=%s", test.data_path(".mergefile")));
    EXPECT_LT(0, test.FindArg(test.data_path("corpus")));
    EXPECT_LT(0, test.FindArg("/path/to/another/corpus"));

    path.Reset();
    ASSERT_EQ(ZX_OK, path.Push(test.data_path()));
    EXPECT_NE(ZX_OK, path.Push("corpus.prev"));
    EXPECT_NE(ZX_OK, path.GetSize(".mergefile", &len));

    // Fuchsia merge of another corpus with an existing corpus
    ASSERT_TRUE(test.Eval("merge fuchsia2/target4 /path/to/another/corpus"));
    EXPECT_EQ(ZX_OK, test.Run());
    EXPECT_EQ(0, test.FindArg(test.executable()));
    EXPECT_LT(0, test.FindArg(test.manifest()));
    EXPECT_LT(0, test.FindArg("-artifact_prefix=%s", test.data_path()));
    EXPECT_LT(0, test.FindArg("-merge=1"));
    EXPECT_LT(0, test.FindArg("-merge_control_file=%s", test.data_path(".mergefile")));
    EXPECT_LT(0, test.FindArg(test.data_path("corpus")));
    EXPECT_LT(0, test.FindArg("/path/to/another/corpus"));

    path.Reset();
    ASSERT_EQ(ZX_OK, path.Push(test.data_path()));
    EXPECT_NE(ZX_OK, path.Push("corpus.prev"));
    EXPECT_NE(ZX_OK, path.GetSize(".mergefile", &len));

    END_TEST;
}

BEGIN_TEST_CASE(FuzzerTest)
RUN_TEST(TestSetOption)
RUN_TEST(TestRebasePath)
RUN_TEST(TestGetPackagePath)
RUN_TEST(TestFindZirconFuzzers)
RUN_TEST(TestFindFuchsiaFuzzers)
RUN_TEST(TestFindFuzzers)
RUN_TEST(TestCheckProcess)
RUN_TEST(TestInvalid)
RUN_TEST(TestHelp)
RUN_TEST(TestList)
RUN_TEST(TestSeeds)
RUN_TEST(TestStart)
RUN_TEST(TestCheck)
RUN_TEST(TestStop)
RUN_TEST(TestRepro)
RUN_TEST(TestMerge)
END_TEST_CASE(FuzzerTest)

} // namespace
} // namespace testing
} // namespace fuzzing
