// Copyright 2018 The Chromium OS 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 SHILL_MOCK_DEVICE_H_
#define SHILL_MOCK_DEVICE_H_

#include <string>
#include <vector>

#include <base/memory/ref_counted.h>
#include <gmock/gmock.h>

#include "shill/device.h"
#include "shill/geolocation_info.h"

namespace shill {

class MockDevice : public Device {
 public:
  MockDevice(Manager* manager,
             const std::string& link_name,
             const std::string& address,
             int interface_index);
  ~MockDevice() override;

  MOCK_METHOD(void, Initialize, (), (override));
  MOCK_METHOD(void,
              Start,
              (Error*, const EnabledStateChangedCallback&),
              (override));
  MOCK_METHOD(void,
              Stop,
              (Error*, const EnabledStateChangedCallback&),
              (override));
  MOCK_METHOD(void, SetEnabled, (bool), (override));
  MOCK_METHOD(void,
              SetEnabledPersistent,
              (bool, Error*, const ResultCallback&),
              (override));
  MOCK_METHOD(void,
              SetEnabledNonPersistent,
              (bool, Error*, const ResultCallback&),
              (override));
  MOCK_METHOD(void, Scan, (Error*, const std::string&), (override));
  MOCK_METHOD(bool, Load, (StoreInterface*), (override));
  MOCK_METHOD(bool, Save, (StoreInterface*), (override));
  MOCK_METHOD(void, DisableIPv6, (), (override));
  MOCK_METHOD(void, EnableIPv6, (), (override));
  MOCK_METHOD(void, EnableIPv6Privacy, (), (override));
  MOCK_METHOD(void, SetLooseRouting, (bool), (override));
  MOCK_METHOD(void, SetIsMultiHomed, (bool), (override));
  MOCK_METHOD(bool, RestartPortalDetection, (), (override));
  MOCK_METHOD(bool, RequestPortalDetection, (), (override));
  MOCK_METHOD(uint64_t, GetReceiveByteCount, (), (override));
  MOCK_METHOD(uint64_t, GetTransmitByteCount, (), (override));
  MOCK_METHOD(bool,
              IsConnectedToService,
              (const ServiceRefPtr&),
              (const, override));
  MOCK_METHOD(Technology, technology, (), (const, override));
  MOCK_METHOD(void, OnBeforeSuspend, (const ResultCallback&), (override));
  MOCK_METHOD(void, OnDarkResume, (const ResultCallback&), (override));
  MOCK_METHOD(void, OnAfterResume, (), (override));
  MOCK_METHOD(void, OnConnectionUpdated, (), (override));
  MOCK_METHOD(void, OnIPv6AddressChanged, (), (override));
  MOCK_METHOD(std::vector<GeolocationInfo>,
              GetGeolocationObjects,
              (),
              (const, override));
  MOCK_METHOD(void, OnIPv6DnsServerAddressesChanged, (), (override));
  MOCK_METHOD(bool, StartConnectivityTest, (), (override));
  MOCK_METHOD(const ConnectionRefPtr&, connection, (), (const, override));
  MOCK_METHOD(void, UpdateBlackholeUserTraffic, (), (override));

 private:
  DISALLOW_COPY_AND_ASSIGN(MockDevice);
};

}  // namespace shill

#endif  // SHILL_MOCK_DEVICE_H_
