chromium/chromecast/metrics/mock_cast_event_builder.h

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMECAST_METRICS_MOCK_CAST_EVENT_BUILDER_H_
#define CHROMECAST_METRICS_MOCK_CAST_EVENT_BUILDER_H_

#include <string>
#include <vector>

#include "base/check_op.h"
#include "base/time/time.h"
#include "chromecast/metrics/cast_event_builder.h"
#include "net/base/ip_address.h"
#include "testing/gmock/include/gmock/gmock.h"

namespace chromecast {

class MockCastEventBuilder : public CastEventBuilder {
 public:
  MockCastEventBuilder();
  MockCastEventBuilder(const MockCastEventBuilder&) = delete;
  MockCastEventBuilder& operator=(const MockCastEventBuilder&) = delete;
  ~MockCastEventBuilder() override;
  MOCK_METHOD(std::string, GetName, (), (override));
  MOCK_METHOD(CastEventBuilder&, SetName, (const std::string&), (override));
  MOCK_METHOD(CastEventBuilder&, SetTime, (const base::TimeTicks&), (override));
  MOCK_METHOD(CastEventBuilder&,
              SetTimezoneId,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&, SetAppId, (const std::string&), (override));
  MOCK_METHOD(CastEventBuilder&,
              SetRemoteAppId,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              SetSessionId,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              SetSdkVersion,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              SetMplVersion,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              SetConnectionInfo,
              (const std::string&, const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              SetGroupUuid,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&, SetExtraValue, (int64_t), (override));
  MOCK_METHOD(CastEventBuilder&,
              SetConversationKey,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&, SetRequestId, (int32_t), (override));
  MOCK_METHOD(CastEventBuilder&, SetEventId, (const std::string&), (override));
  MOCK_METHOD(CastEventBuilder&,
              SetAoghRequestId,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&, SetAoghLocalDeviceId, (int64_t), (override));
  MOCK_METHOD(CastEventBuilder&,
              SetAoghAgentId,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              SetAoghStandardAgentId,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              SetUiVersion,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              SetAuditReport,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&, SetDuoCoreVersion, (int64_t), (override));
  MOCK_METHOD(CastEventBuilder&,
              SetHotwordModelId,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              SetDiscoveryAppSubtype,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              SetDiscoveryNamespaceSubtype,
              (const std::string&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              SetDiscoverySender,
              (const net::IPAddressBytes&),
              (override));
  MOCK_METHOD(CastEventBuilder&, SetDiscoveryUnicastFlag, (bool), (override));
  MOCK_METHOD(CastEventBuilder&,
              SetFeatureVector,
              (const std::vector<float>&),
              (override));
  MOCK_METHOD(CastEventBuilder&,
              AddMetadata,
              (const std::string&, int64_t),
              (override));
  MOCK_METHOD(CastEventBuilder&, SetLaunchFrom, (LaunchFrom), (override));

  MOCK_METHOD(CastEventBuilder&,
              MergeFrom,
              (const ::metrics::CastLogsProto_CastEventProto*),
              (override));
  MOCK_METHOD(::metrics::CastLogsProto_CastEventProto*, Build, (), (override));
};

// Stores the last value of each field that was set in the builder. These values
// are exposed as public members for tests to verify.
class FakeCastEventBuilder : public CastEventBuilder {
 public:
  FakeCastEventBuilder();
  FakeCastEventBuilder(const FakeCastEventBuilder&) = delete;
  FakeCastEventBuilder& operator=(const FakeCastEventBuilder&) = delete;
  ~FakeCastEventBuilder() override;

  std::string GetName() override;
  CastEventBuilder& SetName(const std::string& arg_name) override;
  CastEventBuilder& SetTime(const base::TimeTicks& arg_time) override;
  CastEventBuilder& SetTimezoneId(const std::string& arg_timezone_id) override;
  CastEventBuilder& SetAppId(const std::string& arg_app_id) override;
  CastEventBuilder& SetRemoteAppId(
      const std::string& arg_remote_app_id) override;
  CastEventBuilder& SetSessionId(const std::string& arg_session_id) override;
  CastEventBuilder& SetSdkVersion(const std::string& arg_sdk_version) override;
  CastEventBuilder& SetMplVersion(const std::string& arg_mpl_version) override;
  CastEventBuilder& SetConnectionInfo(
      const std::string& arg_transport_connection_id,
      const std::string& arg_virtual_connection_id) override;
  CastEventBuilder& SetGroupUuid(const std::string& arg_group_uuid) override;
  CastEventBuilder& SetExtraValue(int64_t arg_extra_value) override;
  CastEventBuilder& SetConversationKey(
      const std::string& arg_conversation_key) override;
  CastEventBuilder& SetRequestId(int32_t request_id) override;
  CastEventBuilder& SetEventId(const std::string& id) override;
  CastEventBuilder& SetAoghRequestId(const std::string& request_id) override;
  CastEventBuilder& SetAoghLocalDeviceId(int64_t local_id) override;
  CastEventBuilder& SetAoghAgentId(const std::string& request_id) override;
  CastEventBuilder& SetAoghStandardAgentId(
      const std::string& standard_agent_id) override;
  CastEventBuilder& SetUiVersion(const std::string& ui_version) override;
  CastEventBuilder& SetAuditReport(const std::string& audit_report) override;
  CastEventBuilder& SetDuoCoreVersion(int64_t version) override;
  CastEventBuilder& SetHotwordModelId(const std::string& model_id) override;
  CastEventBuilder& SetDiscoveryAppSubtype(
      const std::string& arg_discovery_app_subtype) override;
  CastEventBuilder& SetDiscoveryNamespaceSubtype(
      const std::string& arg_discovery_namespace_subtype) override;
  CastEventBuilder& SetDiscoverySender(
      const net::IPAddressBytes& arg_discovery_sender_bytes) override;
  CastEventBuilder& SetDiscoveryUnicastFlag(
      bool arg_discovery_unicast_flag) override;
  CastEventBuilder& SetFeatureVector(
      const std::vector<float>& arg_features) override;
  CastEventBuilder& AddMetadata(const std::string& name,
                                int64_t value) override;
  CastEventBuilder& SetLaunchFrom(LaunchFrom launch_from) override;
  CastEventBuilder& MergeFrom(
      const ::metrics::CastLogsProto_CastEventProto* event_proto) override;
  ::metrics::CastLogsProto_CastEventProto* Build() override;

  std::string name;
  base::TimeTicks time;
  std::string timezone_id;
  std::string app_id;
  std::string remote_app_id;
  std::string session_id;
  std::string sdk_version;
  std::string mpl_version;
  std::string transport_connection_id;
  std::string virtual_connection_id;
  std::string group_uuid;
  int64_t extra_value;
  std::string conversation_key;
  int32_t request_id;
  std::string event_id;
  std::string aogh_request_id;
  int64_t aogh_local_device_id;
  std::string aogh_agent_id;
  std::string aogh_standard_agent_id;
  std::string ui_version;
  std::string audit_report;
  int64_t duo_core_version;
  std::string hotword_model_id;
  std::string discovery_app_subtype;
  std::string discovery_namespace_subtype;
  net::IPAddressBytes discovery_sender_bytes;
  bool discovery_unicast_flag;
  std::vector<float> features;
  struct Metadata {
    std::string name;
    int64_t value;
  };
  Metadata metadata;
  LaunchFrom launch_from = FROM_UNKNOWN;
  const ::metrics::CastLogsProto_CastEventProto* cast_event_proto;
};

}  // namespace chromecast

#endif  // CHROMECAST_INTERNAL_METRICS_MOCK_CAST_EVENT_BUILDER_H_