blob: eea6baa11ca6409eef9190a1821d49ca18574647 [file] [log] [blame]
// Copyright 2018 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 "src/developer/forensics/testing/fakes/data_provider.h"
#include <fuchsia/feedback/cpp/fidl.h>
#include <fuchsia/mem/cpp/fidl.h>
#include <lib/syslog/cpp/macros.h>
#include <memory>
#include <vector>
#include "src/developer/forensics/utils/archive.h"
#include "src/lib/fsl/vmo/file.h"
#include "src/lib/fsl/vmo/sized_vmo.h"
#include "src/lib/fxl/strings/string_printf.h"
namespace forensics {
namespace fakes {
namespace {
using namespace fuchsia::feedback;
std::string AnnotationsToJSON(const std::vector<Annotation>& annotations) {
std::string json = "{\n";
for (const auto& annotation : annotations) {
json +=
fxl::StringPrintf("\t\"%s\": \"%s\"\n", annotation.key.c_str(), annotation.value.c_str());
}
json += "}\n";
return json;
}
std::vector<Annotation> CreateAnnotations() {
return {
Annotation{.key = "annotation_key_1", .value = "annotation_value_1"},
Annotation{.key = "annotation_key_2", .value = "annotation_value_2"},
Annotation{.key = "annotation_key_3", .value = "annotation_value_3"},
};
}
Attachment CreateSnapshot() {
std::map<std::string, std::string> attachments;
attachments["annotations.json"] = AnnotationsToJSON(CreateAnnotations());
attachments["attachment_key"] = "attachment_value";
Attachment snapshot;
snapshot.key = "snapshot.zip";
Archive(attachments, &snapshot.value);
return snapshot;
}
std::unique_ptr<Screenshot> LoadPngScreenshot() {
fsl::SizedVmo image;
FX_CHECK(fsl::VmoFromFilename("/pkg/data/checkerboard_100.png", &image))
<< "Failed to create image vmo";
const size_t image_dim_in_px = 100u;
fuchsia::math::Size dimensions;
dimensions.width = image_dim_in_px;
dimensions.height = image_dim_in_px;
std::unique_ptr<Screenshot> screenshot = Screenshot::New();
screenshot->image = std::move(image).ToTransport();
screenshot->dimensions_in_px = dimensions;
return screenshot;
}
} // namespace
void DataProvider::GetSnapshot(fuchsia::feedback::GetSnapshotParameters parms,
GetSnapshotCallback callback) {
callback(
std::move(Snapshot().set_annotations(CreateAnnotations()).set_archive(CreateSnapshot())));
}
void DataProvider::GetScreenshot(ImageEncoding encoding, GetScreenshotCallback callback) {
switch (encoding) {
case ImageEncoding::PNG:
callback(LoadPngScreenshot());
default:
callback(nullptr);
}
}
} // namespace fakes
} // namespace forensics