blob: 2bfd39e81d1620b6ccfecbf1ec8dd7335d717670 [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 "src/developer/forensics/testing/stubs/cobalt_logger_factory.h"
#include <fuchsia/metrics/cpp/fidl.h>
#include <lib/async/cpp/task.h>
#include <lib/fidl/cpp/interface_request.h>
#include <lib/fidl/cpp/internal/stub.h>
#include <lib/syslog/cpp/macros.h>
#include <zircon/errors.h>
#include "src/lib/fsl/vmo/strings.h"
namespace forensics {
namespace stubs {
using fuchsia::metrics::Error;
using fuchsia::metrics::MetricEventLogger;
void CobaltLoggerFactoryBase::CloseLoggerConnection() {
if (logger_binding_) {
logger_binding_->Close(ZX_ERR_PEER_CLOSED);
}
}
void CobaltLoggerFactory::CreateMetricEventLogger(
::fuchsia::metrics::ProjectSpec project_spec,
::fidl::InterfaceRequest<::fuchsia::metrics::MetricEventLogger> logger,
CreateMetricEventLoggerCallback callback) {
logger_binding_ = std::make_unique<::fidl::Binding<fuchsia::metrics::MetricEventLogger>>(
logger_.get(), std::move(logger));
callback(fpromise::ok());
}
void CobaltLoggerFactoryFailsToCreateLogger::CreateMetricEventLogger(
::fuchsia::metrics::ProjectSpec project_spec,
::fidl::InterfaceRequest<::fuchsia::metrics::MetricEventLogger> logger,
CreateMetricEventLoggerCallback callback) {
callback(fpromise::error(Error::INVALID_ARGUMENTS));
}
void CobaltLoggerFactoryCreatesOnRetry::CreateMetricEventLogger(
::fuchsia::metrics::ProjectSpec project_spec,
::fidl::InterfaceRequest<::fuchsia::metrics::MetricEventLogger> logger,
CreateMetricEventLoggerCallback callback) {
++num_calls_;
if (num_calls_ >= succeed_after_) {
logger_binding_ = std::make_unique<::fidl::Binding<fuchsia::metrics::MetricEventLogger>>(
logger_.get(), std::move(logger));
callback(fpromise::ok());
return;
}
callback(fpromise::error(Error::INVALID_ARGUMENTS));
}
void CobaltLoggerFactoryDelaysCallback::CreateMetricEventLogger(
::fuchsia::metrics::ProjectSpec project_spec,
::fidl::InterfaceRequest<::fuchsia::metrics::MetricEventLogger> logger,
CreateMetricEventLoggerCallback callback) {
logger_binding_ = std::make_unique<::fidl::Binding<fuchsia::metrics::MetricEventLogger>>(
logger_.get(), std::move(logger));
async::PostDelayedTask(
dispatcher_, [cb = std::move(callback)]() { cb(fpromise::ok()); }, delay_);
}
} // namespace stubs
} // namespace forensics