// 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_NETLINK_H_
#define QUICHE_QUIC_QBONE_PLATFORM_MOCK_NETLINK_H_

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

namespace quic {

class MockNetlink : public NetlinkInterface {
 public:
  MOCK_METHOD(bool, GetLinkInfo, (const std::string&, LinkInfo*), (override));

  MOCK_METHOD(bool,
              GetAddresses,
              (int, uint8_t, std::vector<AddressInfo>*, int*),
              (override));

  MOCK_METHOD(bool,
              ChangeLocalAddress,
              (uint32_t,
               Verb,
               const QuicIpAddress&,
               uint8_t,
               uint8_t,
               uint8_t,
               const std::vector<struct rtattr*>&),
              (override));

  MOCK_METHOD(bool, GetRouteInfo, (std::vector<RoutingRule>*), (override));

  MOCK_METHOD(bool,
              ChangeRoute,
              (Verb, uint32_t, const IpRange&, uint8_t, QuicIpAddress, int32_t),
              (override));

  MOCK_METHOD(bool, GetRuleInfo, (std::vector<IpRule>*), (override));

  MOCK_METHOD(bool, ChangeRule, (Verb, uint32_t, IpRange), (override));

  MOCK_METHOD(bool, Send, (struct iovec*, size_t), (override));

  MOCK_METHOD(bool, Recv, (uint32_t, NetlinkParserInterface*), (override));
};

}  // namespace quic

#endif  // QUICHE_QUIC_QBONE_PLATFORM_MOCK_NETLINK_H_
