blob: 57678122b286f415446d0e2d64d47f0911ce8755 [file] [log] [blame]
Garrick Evansf0ab7132019-06-18 14:50:42 +09001// Copyright 2019 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Garrick Evans3388a032020-03-24 11:25:55 +09005#ifndef PATCHPANEL_FAKE_PROCESS_RUNNER_H_
6#define PATCHPANEL_FAKE_PROCESS_RUNNER_H_
Garrick Evansf0ab7132019-06-18 14:50:42 +09007
8#include <string>
9#include <utility>
10#include <vector>
11
12#include <base/strings/string_util.h>
13
14#include <gtest/gtest.h>
15
Garrick Evans3388a032020-03-24 11:25:55 +090016#include "patchpanel/minijailed_process_runner.h"
Garrick Evansf0ab7132019-06-18 14:50:42 +090017
Garrick Evans3388a032020-03-24 11:25:55 +090018namespace patchpanel {
Garrick Evansf0ab7132019-06-18 14:50:42 +090019
20class FakeProcessRunner : public MinijailedProcessRunner {
21 public:
22 explicit FakeProcessRunner(std::vector<std::string>* runs = nullptr)
23 : runs_(runs ? runs : &runs_vec_) {}
24 ~FakeProcessRunner() = default;
25
26 int Run(const std::vector<std::string>& argv, bool log_failures) override {
27 if (capture_)
28 runs_->emplace_back(base::JoinString(argv, " "));
Taoyu Lica49c832019-12-06 17:56:43 +090029 if (run_override_)
30 return run_override_.Run(argv);
Garrick Evansf0ab7132019-06-18 14:50:42 +090031 return 0;
32 }
33
Garrick Evansf0ab7132019-06-18 14:50:42 +090034 void Capture(bool on, std::vector<std::string>* runs = nullptr) {
35 capture_ = on;
36 if (runs)
37 runs_ = runs;
38 }
39
40 void VerifyRuns(const std::vector<std::string>& expected) {
41 VerifyRuns(*runs_, expected);
42 }
43
44 static void VerifyRuns(const std::vector<std::string>& got,
45 const std::vector<std::string>& expected) {
46 ASSERT_EQ(got.size(), expected.size());
47 for (int i = 0; i < got.size(); ++i) {
48 EXPECT_EQ(got[i], expected[i]);
49 }
50 }
51
52 void VerifyAddInterface(const std::string& host_ifname,
53 const std::string& con_ifname,
Garrick Evans7a1a9ee2020-01-28 11:03:57 +090054 uint32_t con_ipv4,
55 uint32_t con_prefix_len,
Garrick Evansf0ab7132019-06-18 14:50:42 +090056 bool enable_multicast,
57 const std::string& con_pid) {
58 EXPECT_EQ(host_ifname, add_host_ifname_);
59 EXPECT_EQ(con_ifname, add_con_ifname_);
60 EXPECT_EQ(con_ipv4, add_con_ipv4_);
Garrick Evans7a1a9ee2020-01-28 11:03:57 +090061 EXPECT_EQ(con_prefix_len, add_con_prefix_len_);
Garrick Evansf0ab7132019-06-18 14:50:42 +090062 EXPECT_EQ(enable_multicast, add_enable_multicast_);
63 EXPECT_EQ(con_pid, add_con_pid_);
64 }
65
Taoyu Lica49c832019-12-06 17:56:43 +090066 void SetRunOverride(
67 base::Callback<int(const std::vector<std::string>&)> callback) {
68 run_override_ = callback;
69 }
70
Garrick Evansf0ab7132019-06-18 14:50:42 +090071 private:
72 bool capture_ = false;
Taoyu Lica49c832019-12-06 17:56:43 +090073 base::Callback<int(const std::vector<std::string>&)> run_override_;
Garrick Evansf0ab7132019-06-18 14:50:42 +090074 std::vector<std::string>* runs_;
75 std::vector<std::string> runs_vec_;
76 std::string add_host_ifname_;
77 std::string add_con_ifname_;
Garrick Evans7a1a9ee2020-01-28 11:03:57 +090078 uint32_t add_con_ipv4_;
79 uint32_t add_con_prefix_len_;
Garrick Evansf0ab7132019-06-18 14:50:42 +090080 bool add_enable_multicast_;
81 std::string add_con_pid_;
Garrick Evansf0ab7132019-06-18 14:50:42 +090082
83 DISALLOW_COPY_AND_ASSIGN(FakeProcessRunner);
84};
85
Garrick Evans3388a032020-03-24 11:25:55 +090086} // namespace patchpanel
Garrick Evansf0ab7132019-06-18 14:50:42 +090087
Garrick Evans3388a032020-03-24 11:25:55 +090088#endif // PATCHPANEL_FAKE_PROCESS_RUNNER_H_