blob: 809a1c1fdc2442865c971cff04f77859d2279d44 [file] [log] [blame]
// 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.
#include "peridot/bin/ledger/tests/integration/test_utils.h"
#include <string>
#include <utility>
#include <vector>
#include <fuchsia/ledger/internal/cpp/fidl.h>
#include <lib/fidl/cpp/binding.h>
#include <lib/fsl/vmo/strings.h>
#include <lib/fxl/files/scoped_temp_dir.h>
#include <lib/fxl/macros.h>
#include <lib/fxl/time/time_delta.h>
#include <lib/zx/time.h>
#include "garnet/public/lib/callback/capture.h"
#include "gtest/gtest.h"
#include "peridot/bin/ledger/fidl/include/types.h"
#include "peridot/lib/convert/convert.h"
namespace ledger {
std::vector<uint8_t> RandomArray(rng::Random* random, size_t size,
const std::vector<uint8_t>& prefix) {
EXPECT_TRUE(size >= prefix.size());
std::vector<uint8_t> array(size);
for (size_t i = 0; i < prefix.size(); ++i) {
array.at(i) = prefix[i];
}
random->Draw(&array[prefix.size()], size - prefix.size());
return array;
}
std::string ToString(const fuchsia::mem::BufferPtr& vmo) {
std::string value;
bool status = fsl::StringFromVmo(*vmo, &value);
FXL_DCHECK(status);
return value;
}
std::vector<uint8_t> ToArray(const fuchsia::mem::BufferPtr& vmo) {
return convert::ToArray(ToString(vmo));
}
std::vector<Entry> SnapshotGetEntries(LoopController* loop_controller,
PageSnapshotPtr* snapshot,
fidl::VectorPtr<uint8_t> start,
int* num_queries) {
std::vector<Entry> result;
std::unique_ptr<Token> token;
if (num_queries) {
*num_queries = 0;
}
do {
Status status;
std::vector<Entry> entries;
auto waiter = loop_controller->NewWaiter();
(*snapshot)->GetEntries(
start.Clone(), std::move(token),
callback::Capture(waiter->GetCallback(), &status, &entries, &token));
if (!waiter->RunUntilCalled()) {
ADD_FAILURE() << "|GetEntries| failed to call back.";
return {};
}
if (status != Status::OK && status != Status::PARTIAL_RESULT) {
ADD_FAILURE() << "Actual status: " << fidl::ToUnderlying(status);
return {};
}
if (num_queries) {
(*num_queries)++;
}
for (auto& entry : entries) {
result.push_back(std::move(entry));
}
} while (token);
return result;
}
} // namespace ledger