// Copyright 2018 The Chromium OS 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 <stddef.h>
#include <stdint.h>
#include <string.h>

#include <memory>

#include <base/logging.h>
#include <base/test/fuzzed_data_provider.h>
#include <metrics/metrics_library.h>

#include "p2p/common/server_message.h"
#include "p2p/server/http_server_external_process.h"

using base::FilePath;
using p2p::server::HttpServerExternalProcess;
using p2p::util::P2PServerMessage;
using p2p::util::kNumP2PServerMessageTypes;
using p2p::util::kP2PServerMagic;

struct Environment {
  Environment() {
    logging::SetMinLogLevel(logging::LOG_FATAL);  // Disable logging.
  }
};

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  static Environment env;

  if (size < 1)
    return 0;

  base::FuzzedDataProvider data_provider(data, size);

  int64_t value;
  std::string value_bytes = data_provider.ConsumeBytes(sizeof(value));
  memcpy(&value, value_bytes.data(), value_bytes.size());

  // The values of magic and message_type are constrained to ensure
  // OnMessageReceived does not exit().
  P2PServerMessage msg{
      .magic = kP2PServerMagic,
      .message_type =
          data_provider.ConsumeUint32InRange(0, kNumP2PServerMessageTypes - 1),
      .value = value,
  };

  // Create HTTP server external process.
  MetricsLibrary metrics_lib;
  metrics_lib.Init();
  auto process = std::make_unique<HttpServerExternalProcess>(
      &metrics_lib, FilePath("/tmp/p2p-fuzzing.XXXXXX"), FilePath("."), 0);

  // There's no need to Start() the process since OnMessageReceived only updates
  // member variables or sends metrics using the provided metrics library.
  HttpServerExternalProcess::OnMessageReceived(msg, process.get());

  return 0;
}
