// Copyright 2019 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_ROUTING_TABLE_H_
#define SHILL_MOCK_ROUTING_TABLE_H_

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

#include "shill/routing_table.h"

namespace shill {

class MockRoutingTable : public RoutingTable {
 public:
  MockRoutingTable();
  ~MockRoutingTable() override;

  MOCK_METHOD(void, Start, (), (override));
  MOCK_METHOD(void, Stop, (), (override));
  MOCK_METHOD(bool, AddRoute, (int, const RoutingTableEntry&), (override));
  MOCK_METHOD(bool,
              GetDefaultRoute,
              (int, IPAddress::Family, RoutingTableEntry*),
              (override));
  MOCK_METHOD(bool,
              SetDefaultRoute,
              (int, const IPAddress&, uint32_t, uint32_t),
              (override));
  MOCK_METHOD(bool,
              ConfigureRoutes,
              (int, const IPConfigRefPtr&, uint32_t, uint32_t),
              (override));
  MOCK_METHOD(bool,
              CreateBlackholeRoute,
              (int, IPAddress::Family, uint32_t, uint32_t),
              (override));
  MOCK_METHOD(bool,
              CreateLinkRoute,
              (int, const IPAddress&, const IPAddress&, uint32_t),
              (override));
  MOCK_METHOD(void, FlushRoutes, (int), (override));
  MOCK_METHOD(void, FlushRoutesWithTag, (int), (override));
  MOCK_METHOD(bool, FlushCache, (), (override));
  MOCK_METHOD(void, ResetTable, (int), (override));
  MOCK_METHOD(void, SetDefaultMetric, (int, uint32_t), (override));
  MOCK_METHOD(bool,
              RequestRouteToHost,
              (const IPAddress&, int, int, const QueryCallback&, uint32_t),
              (override));
  MOCK_METHOD(uint32_t, RequestAdditionalTableId, (), (override));
  MOCK_METHOD(void, FreeAdditionalTableId, (uint32_t), (override));
  MOCK_METHOD(bool, AddRule, (int, const RoutingPolicyEntry&), (override));
  MOCK_METHOD(void, FlushRules, (int), (override));

 private:
  DISALLOW_COPY_AND_ASSIGN(MockRoutingTable);
};

}  // namespace shill

#endif  // SHILL_MOCK_ROUTING_TABLE_H_
