// Copyright (c) 2019 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 QUICHE_QUIC_QBONE_PLATFORM_MOCK_KERNEL_H_
#define QUICHE_QUIC_QBONE_PLATFORM_MOCK_KERNEL_H_

#include <sys/uio.h>

#include <cstddef>
#include <ctime>

#include "quiche/quic/platform/api/quic_test.h"
#include "quiche/quic/qbone/platform/kernel_interface.h"

namespace quic {

class MockKernel : public KernelInterface {
 public:
  MockKernel() {}

  MOCK_METHOD(int, bind, (int fd, const struct sockaddr*, socklen_t addr_len),
              (override));
  MOCK_METHOD(int, close, (int fd), (override));
  MOCK_METHOD(int, ioctl, (int fd, int request, void*), (override));
  MOCK_METHOD(int, open, (const char*, int flags), (override));
  MOCK_METHOD(ssize_t, read, (int fd, void*, size_t count), (override));
  MOCK_METHOD(ssize_t, readv, (int fd, const struct iovec* iov, int iovcnt),
              (override));
  MOCK_METHOD(ssize_t, recvfrom,
              (int sockfd, void*, size_t len, int flags, struct sockaddr*,
               socklen_t*),
              (override));
  MOCK_METHOD(int, recvmmsg,
              (int sockfd, struct mmsghdr* msgvec, unsigned int vlen, int flags,
               struct timespec* timeout),
              (override));
  MOCK_METHOD(ssize_t, sendmsg, (int sockfd, const struct msghdr*, int flags),
              (override));
  MOCK_METHOD(ssize_t, sendto,
              (int sockfd, const void*, size_t len, int flags,
               const struct sockaddr*, socklen_t addrlen),
              (override));
  MOCK_METHOD(int, socket, (int domain, int type, int protocol), (override));
  MOCK_METHOD(int, setsockopt, (int, int, int, const void*, socklen_t),
              (override));
  MOCK_METHOD(ssize_t, write, (int fd, const void*, size_t count), (override));
  MOCK_METHOD(ssize_t, writev, (int fd, const struct iovec* iov, int iovcnt),
              (override));
  MOCK_METHOD(int, getsockname,
              (int sockfd, struct sockaddr* addr, socklen_t* addrlen),
              (override));
  MOCK_METHOD(unsigned int, if_nametoindex, (const char* ifname), (override));
};

}  // namespace quic

#endif  // QUICHE_QUIC_QBONE_PLATFORM_MOCK_KERNEL_H_
