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

#ifndef CHROMEOS_DBUS_FAKE_SHILL_THIRD_PARTY_VPN_DRIVER_CLIENT_H_
#define CHROMEOS_DBUS_FAKE_SHILL_THIRD_PARTY_VPN_DRIVER_CLIENT_H_

#include <stdint.h>

#include <map>
#include <string>
#include <vector>

#include "base/macros.h"
#include "chromeos/chromeos_export.h"
#include "chromeos/dbus/shill_third_party_vpn_driver_client.h"

namespace chromeos {

// A fake implementation of ShillThirdPartyVpnDriverClient.
// The client can generate fake DBus signals when
// ShillThirdPartyVpnDriverClient::TestInterface methods are called. The
// DBus methods are nops that only acknowledge the caller.
class CHROMEOS_EXPORT FakeShillThirdPartyVpnDriverClient
    : public ShillThirdPartyVpnDriverClient,
      public ShillThirdPartyVpnDriverClient::TestInterface {
 public:
  FakeShillThirdPartyVpnDriverClient();
  ~FakeShillThirdPartyVpnDriverClient() override;

  // ShillThirdPartyVpnDriverClient overrides
  void Init(dbus::Bus* bus) override;
  void AddShillThirdPartyVpnObserver(
      const std::string& object_path_value,
      ShillThirdPartyVpnObserver* observer) override;
  void RemoveShillThirdPartyVpnObserver(
      const std::string& object_path_value) override;
  void SetParameters(
      const std::string& object_path_value,
      const base::DictionaryValue& parameters,
      const ShillClientHelper::StringCallback& callback,
      const ShillClientHelper::ErrorCallback& error_callback) override;
  void UpdateConnectionState(
      const std::string& object_path_value,
      const uint32_t connection_state,
      const base::Closure& callback,
      const ShillClientHelper::ErrorCallback& error_callback) override;
  void SendPacket(
      const std::string& object_path_value,
      const std::vector<char>& ip_packet,
      const base::Closure& callback,
      const ShillClientHelper::ErrorCallback& error_callback) override;
  ShillThirdPartyVpnDriverClient::TestInterface* GetTestInterface() override;

  // ShillThirdPartyVpnDriverClient::TestInterface overrides
  void OnPacketReceived(const std::string& object_path_value,
                        const std::vector<char>& packet) override;
  void OnPlatformMessage(const std::string& object_path_value,
                         uint32_t message) override;

 private:
  using ObserverMap = std::map<std::string, ShillThirdPartyVpnObserver*>;

  ObserverMap observer_map_;

  DISALLOW_COPY_AND_ASSIGN(FakeShillThirdPartyVpnDriverClient);
};

}  // namespace chromeos

#endif  // CHROMEOS_DBUS_FAKE_SHILL_THIRD_PARTY_VPN_DRIVER_CLIENT_H_
