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

#ifndef SRC_LEDGER_BIN_TESTS_INTEGRATION_TEST_UTILS_H_
#define SRC_LEDGER_BIN_TESTS_INTEGRATION_TEST_UTILS_H_

#include <lib/fsl/vmo/sized_vmo.h>

#include <string>
#include <vector>

#include "peridot/lib/rng/random.h"
#include "src/ledger/bin/fidl/include/types.h"
#include "src/ledger/bin/testing/ledger_app_instance_factory.h"

namespace ledger {

// Builds an array of length |size|, starting with |prefix| and completed with
// random data.
std::vector<uint8_t> RandomArray(rng::Random* random, size_t size,
                                 const std::vector<uint8_t>& prefix = {});

// Extracts the content of |vmo| as a std::string.
std::string ToString(const fuchsia::mem::BufferPtr& vmo);

// Extracts the content of |vmo| as a FIDL vector.
std::vector<uint8_t> ToArray(const fuchsia::mem::BufferPtr& vmo);

// Retrieves all entries from the snapshot with a key greater of equals to
// |start|. If |num_queries| is not null, returns the number of calls to
// |GetEntries|. If any call fails, this function will fail the current test.
std::vector<Entry> SnapshotGetEntries(
    LoopController* loop_controller, PageSnapshotPtr* snapshot,
    fidl::VectorPtr<uint8_t> start = fidl::VectorPtr<uint8_t>::New(0),
    int* num_queries = nullptr);

}  // namespace ledger

#endif  // SRC_LEDGER_BIN_TESTS_INTEGRATION_TEST_UTILS_H_
