blob: 82c90d0c25dd0d988614e1a07442005d32f136f7 [file] [log] [blame]
// Copyright 2017 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 <iostream>
#include <lib/async-loop/cpp/loop.h>
#include <lib/async/cpp/task.h>
#include <lib/fxl/command_line.h>
#include <lib/fxl/files/file.h>
#include <lib/fxl/logging.h>
#include <lib/fxl/strings/concatenate.h>
#include <lib/fxl/strings/string_view.h>
#include "peridot/bin/cloud_provider_firestore/include/types.h"
#include "peridot/bin/cloud_provider_firestore/testing/cloud_provider_factory.h"
#include "peridot/bin/ledger/testing/sync_params.h"
#include "peridot/bin/ledger/tests/cloud_provider/launcher/validation_tests_launcher.h"
#include "peridot/lib/rng/system_random.h"
namespace cloud_provider_firestore {
void PrintUsage(const char* executable_name) {
std::cerr << "Usage: "
<< executable_name
// Comment to make clang format not break formatting.
<< ledger::GetSyncParamsUsage();
}
} // namespace cloud_provider_firestore
int main(int argc, char** argv) {
fxl::CommandLine command_line = fxl::CommandLineFromArgcArgv(argc, argv);
async::Loop loop(&kAsyncLoopConfigAttachToThread);
std::unique_ptr<component::StartupContext> startup_context =
component::StartupContext::CreateFromStartupInfo();
ledger::SyncParams sync_params;
if (!ledger::ParseSyncParamsFromCommandLine(
command_line, startup_context.get(), &sync_params)) {
cloud_provider_firestore::PrintUsage(argv[0]);
return -1;
}
const std::set<std::string> known_options = ledger::GetSyncParamFlags();
std::vector<std::string> arguments;
for (auto& option : command_line.options()) {
if (known_options.count(option.name) == 0u) {
arguments.push_back(
fxl::Concatenate({"--", option.name, "=", option.value}));
}
}
rng::SystemRandom random;
cloud_provider_firestore::CloudProviderFactory factory(
startup_context.get(), &random, sync_params.api_key,
sync_params.credentials->Clone());
cloud_provider::ValidationTestsLauncher launcher(
startup_context.get(), [&factory](auto request) {
factory.MakeCloudProvider(
cloud_provider_firestore::CloudProviderFactory::UserId::New(),
std::move(request));
});
int32_t return_code = -1;
async::PostTask(loop.dispatcher(), [&factory, &launcher, &return_code, &loop,
arguments = std::move(arguments)] {
factory.Init();
launcher.Run(arguments, [&return_code, &loop](int32_t result) {
return_code = result;
loop.Quit();
});
});
loop.Run();
return return_code;
}