blob: 6f554c6b705929c6c86cfbf78e0132e0ad46fba4 [file] [log] [blame]
// Copyright 2019 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 "dockyard_proxy_fake.h"
#include <gtest/gtest.h>
#include <rapidjson/document.h>
#include <rapidjson/pointer.h>
namespace harvester {
DockyardProxyStatus DockyardProxyFake::Init() {
sent_json_.clear();
sent_values_.clear();
sent_strings_.clear();
return DockyardProxyStatus::OK;
}
DockyardProxyStatus DockyardProxyFake::SendInspectJson(
const std::string& stream_name, const std::string& json) {
sent_json_.insert_or_assign(stream_name, json);
return DockyardProxyStatus::OK;
}
DockyardProxyStatus DockyardProxyFake::SendLogs(
const std::vector<const std::string>& batch) {
for (const auto& log : batch) {
sent_logs_.emplace_back(log);
}
return DockyardProxyStatus::OK;
}
DockyardProxyStatus DockyardProxyFake::SendSample(
const std::string& stream_name, uint64_t value) {
sent_values_.insert_or_assign(stream_name, value);
return DockyardProxyStatus::OK;
}
DockyardProxyStatus DockyardProxyFake::SendSampleList(const SampleList& list) {
EXPECT_TRUE(!list.empty());
for (const auto& sample : list) {
#ifdef VERBOSE_OUTPUT
std::cout << "Sending " << sample.first << " " << sample.second
<< std::endl;
#endif // VERBOSE_OUTPUT
sent_values_.insert_or_assign(sample.first, sample.second);
}
return DockyardProxyStatus::OK;
}
DockyardProxyStatus DockyardProxyFake::SendStringSampleList(
const StringSampleList& list) {
EXPECT_TRUE(!list.empty());
for (const auto& sample : list) {
#ifdef VERBOSE_OUTPUT
std::cout << "Sending " << sample.first << " " << sample.second
<< std::endl;
#endif // VERBOSE_OUTPUT
sent_strings_.insert_or_assign(sample.first, sample.second);
}
return DockyardProxyStatus::OK;
}
DockyardProxyStatus DockyardProxyFake::SendSamples(
const SampleList& int_samples, const StringSampleList& string_samples) {
// Either list may be empty, but not both (there's no use in calling this with
// empty lists, no work will be done).
EXPECT_FALSE(int_samples.empty() && string_samples.empty());
for (const auto& sample : int_samples) {
#ifdef VERBOSE_OUTPUT
std::cout << "Sending " << sample.first << " " << sample.second
<< std::endl;
#endif // VERBOSE_OUTPUT
sent_values_.insert_or_assign(sample.first, sample.second);
}
for (const auto& sample : string_samples) {
#ifdef VERBOSE_OUTPUT
std::cout << "Sending " << sample.first << " " << sample.second
<< std::endl;
#endif // VERBOSE_OUTPUT
sent_strings_.insert_or_assign(sample.first, sample.second);
}
return DockyardProxyStatus::OK;
}
bool DockyardProxyFake::CheckJsonSent(const std::string& dockyard_path,
std::string* json) const {
const auto& iter = sent_json_.find(dockyard_path);
if (iter == sent_json_.end()) {
return false;
}
*json = iter->second;
return true;
}
bool DockyardProxyFake::CheckValueSent(const std::string& dockyard_path,
dockyard::SampleValue* value) const {
const auto& iter = sent_values_.find(dockyard_path);
if (iter == sent_values_.end()) {
return false;
}
*value = iter->second;
return true;
}
bool DockyardProxyFake::CheckValueSubstringSent(
const std::string& dockyard_path_substring) const {
for (const auto& iter : sent_values_) {
if (iter.first.find(dockyard_path_substring) != std::string::npos) {
return true;
}
}
return false;
}
bool DockyardProxyFake::CheckValueSubstringSent(
const std::string& dockyard_path_substring, std::string* key,
uint64_t* value) const {
for (const auto& iter : sent_values_) {
if (iter.first.find(dockyard_path_substring) != std::string::npos) {
*key = iter.first;
*value = iter.second;
return true;
}
}
return false;
}
bool DockyardProxyFake::CheckLogSubstringSent(
const std::string& log_message) const {
auto expectedMessage =
rapidjson::Value(log_message.c_str(), log_message.size());
for (const auto& json_array : sent_logs_) {
rapidjson::Document document;
document.Parse(json_array);
assert(document.IsArray());
for (auto& json_log : document.GetArray()) {
std::string message(
rapidjson::GetValueByPointerWithDefault(
json_log, "/payload/root/message", "", document.GetAllocator())
.GetString());
if (message.find(log_message) != std::string::npos) {
return true;
}
}
}
return false;
}
bool DockyardProxyFake::CheckStringSent(const std::string& dockyard_path,
std::string* string) const {
const auto& iter = sent_strings_.find(dockyard_path);
if (iter == sent_strings_.end()) {
return false;
}
*string = iter->second;
return true;
}
bool DockyardProxyFake::CheckStringPrefixSent(
const std::string& dockyard_path_prefix, std::string* string) const {
for (const auto& iter : sent_strings_) {
if (iter.first.find(dockyard_path_prefix) == 0) {
*string = iter.second;
return true;
}
}
return false;
}
std::ostream& operator<<(std::ostream& out, const DockyardProxyFake& dockyard) {
out << "DockyardProxyFake:" << std::endl;
out << " Strings:" << std::endl;
for (const auto& str : dockyard.sent_strings_) {
out << " " << str.first << ": " << str.second << std::endl;
}
out << " Values:" << std::endl;
for (const auto& value : dockyard.sent_values_) {
out << " " << value.first << ": " << value.second << std::endl;
}
return out;
}
} // namespace harvester