// 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 "src/lib/process/process_builder.h"

#include <gtest/gtest.h>

#include "lib/sys/cpp/service_directory.h"

namespace process {
namespace {

static constexpr char kShell[] = "/pkg/bin/sh";

TEST(ProcessBuilder, Control) {
  ProcessBuilder builder(sys::ServiceDirectory::CreateFromNamespace());
  ASSERT_EQ(ZX_OK, builder.LoadPath(kShell));
  builder.AddArgs({kShell});
  builder.CloneAll();
  ASSERT_EQ(ZX_OK, builder.Prepare(nullptr));
  EXPECT_TRUE(builder.data().process.is_valid());
  EXPECT_TRUE(builder.data().root_vmar.is_valid());
  EXPECT_GT(builder.data().stack, 0u);
  EXPECT_GT(builder.data().entry, 0u);
  EXPECT_GT(builder.data().vdso_base, 0u);
  EXPECT_GT(builder.data().base, 0u);

  zx::process process;
  ASSERT_EQ(ZX_OK, builder.Start(&process));
  process.kill();
}

}  // namespace
}  // namespace process
