// 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_NET_MOCK_SOCKETS_H_
#define SHILL_NET_MOCK_SOCKETS_H_

#include <string>

#include "shill/net/sockets.h"

#include <base/macros.h>
#include <gmock/gmock.h>

namespace shill {

class MockSockets : public Sockets {
 public:
  MockSockets() = default;
  ~MockSockets() override = default;

  MOCK_METHOD(int,
              Accept,
              (int, struct sockaddr*, socklen_t*),
              (const, override));
  MOCK_METHOD(int, AttachFilter, (int, struct sock_fprog*), (const, override));
  MOCK_METHOD(int,
              Bind,
              (int, const struct sockaddr*, socklen_t),
              (const, override));
  MOCK_METHOD(int, BindToDevice, (int, const std::string&), (const, override));
  MOCK_METHOD(int, ReuseAddress, (int), (const, override));
  MOCK_METHOD(int, AddMulticastMembership, (int, in_addr_t), (const, override));
  MOCK_METHOD(int, Close, (int fd), (const, override));
  MOCK_METHOD(int,
              Connect,
              (int, const struct sockaddr*, socklen_t),
              (const, override));
  MOCK_METHOD(int, Error, (), (const, override));
  MOCK_METHOD(int,
              GetSockName,
              (int, struct sockaddr*, socklen_t*),
              (const, override));
  MOCK_METHOD(int, GetSocketError, (int), (const, override));
  MOCK_METHOD(int, Ioctl, (int, int, void*), (const, override));
  MOCK_METHOD(int, Listen, (int, int), (const, override));
  MOCK_METHOD(ssize_t,
              RecvFrom,
              (int, void*, size_t, int, struct sockaddr*, socklen_t*),
              (const, override));
  MOCK_METHOD(int,
              Select,
              (int, fd_set*, fd_set*, fd_set*, struct timeval*),
              (const, override));
  MOCK_METHOD(ssize_t,
              Send,
              (int, const void*, size_t, int),
              (const, override));
  MOCK_METHOD(
      ssize_t,
      SendTo,
      (int, const void*, size_t, int, const struct sockaddr*, socklen_t),
      (const, override));
  MOCK_METHOD(int, SetNonBlocking, (int), (const, override));
  MOCK_METHOD(int, SetReceiveBuffer, (int, int), (const, override));
  MOCK_METHOD(int, ShutDown, (int, int), (const, override));
  MOCK_METHOD(int, Socket, (int, int, int), (const, override));

 private:
  DISALLOW_COPY_AND_ASSIGN(MockSockets);
};

}  // namespace shill

#endif  // SHILL_NET_MOCK_SOCKETS_H_
