// 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_EAP_CREDENTIALS_H_
#define SHILL_MOCK_EAP_CREDENTIALS_H_

#include <string>

#include "shill/eap_credentials.h"

#include <gmock/gmock.h>

namespace shill {

class MockEapCredentials : public EapCredentials {
 public:
  MockEapCredentials();
  ~MockEapCredentials() override;

  MOCK_METHOD(bool, IsConnectable, (), (const, override));
  MOCK_METHOD(bool, IsConnectableUsingPassphrase, (), (const, override));
  MOCK_METHOD(void,
              Load,
              (const StoreInterface*, const std::string&),
              (override));
  MOCK_METHOD(void,
              OutputConnectionMetrics,
              (Metrics*, Technology),
              (const, override));
  MOCK_METHOD(void,
              PopulateSupplicantProperties,
              (CertificateFile*, KeyValueStore*),
              (const, override));
  MOCK_METHOD(void,
              Save,
              (StoreInterface*, const std::string&, bool),
              (const, override));
  MOCK_METHOD(void, Reset, (), (override));
  MOCK_METHOD(bool, SetKeyManagement, (const std::string&, Error*), (override));
  MOCK_METHOD(const std::string&, identity, (), (const, override));
  MOCK_METHOD(const std::string&, key_management, (), (const, override));
  MOCK_METHOD(void, set_password, (const std::string&), (override));
  MOCK_METHOD(const std::string&, pin, (), (const, override));

 private:
  std::string kDefaultKeyManagement;

  DISALLOW_COPY_AND_ASSIGN(MockEapCredentials);
};

}  // namespace shill

#endif  // SHILL_MOCK_EAP_CREDENTIALS_H_
