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

#include <fcntl.h>
#include <lib/fdio/io.h>
#include <lib/zx/vmo.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <zircon/sanitizer.h>

#include <string>

#include <fbl/unique_fd.h>
#include <zxtest/zxtest.h>

namespace {

constexpr char kTestName[] = "15822697145192797690.profraw";
constexpr char kTestData[] = "llvm-profile";
constexpr char kTestMessage[] = "{{{dumpfile:llvm-profile:15822697145192797690.profraw}}}";

TEST(RunTestHelper, PublishData) {
  std::string test_root_dir{getenv("TEST_ROOT_DIR")};
  std::string test_data_dir{test_root_dir + "/" + "test/sys/runtests-utils-testdata/profile"};

  fbl::unique_fd fd{open((test_data_dir + "/" + kTestName).c_str(), O_RDONLY)};
  ASSERT_TRUE(fd.is_valid());

  zx::vmo vmo;
  ASSERT_OK(fdio_get_vmo_copy(fd.get(), vmo.reset_and_get_address()));
  vmo.set_property(ZX_PROP_NAME, kTestName, sizeof(kTestName) - 1);
  __sanitizer_publish_data(kTestData, vmo.release());
  __sanitizer_log_write(kTestMessage, sizeof(kTestMessage) - 1);
}

}  // anonymous namespace
