// 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.
//
// Fuzzer for Resource Manager.

#include <base/logging.h>

#include "trunks/fuzzed_command_transceiver.h"
#include "trunks/resource_manager.h"
#include "trunks/trunks_factory_for_test.h"

// Max fuzzed message length.
constexpr size_t kMaxMessageLength = 512;
// Max number of commands to send.
constexpr size_t kMaxCommands = 4;

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

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

  FuzzedDataProvider data_provider(data, size);

  trunks::TrunksFactoryForTest test_factory;
  trunks::FuzzedCommandTransceiver transceiver(&data_provider,
                                               kMaxMessageLength);
  trunks::ResourceManager resource_manager(test_factory, &transceiver);

  size_t num_cmd =
      data_provider.ConsumeIntegralInRange<uint32_t>(1, kMaxCommands);
  for (size_t n = 0; n < num_cmd; n++) {
    resource_manager.SendCommandAndWait(transceiver.ConsumeCommand());
  }

  return 0;
}
