blob: f8b1e293784c4bf505903c47cd1c77fbf2b0c789 [file] [log] [blame] [edit]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "rmad/utils/rpc_utils.h"
#include <list>
#include <string>
#include <base/functional/bind.h>
#include <base/functional/callback.h>
#include <gtest/gtest.h>
namespace rmad {
class RpcUtilsTest : public testing::Test {
public:
RpcUtilsTest() : message_(""), rpc_output_(0) {}
~RpcUtilsTest() = default;
void SetMessage(const std::string& s) { message_ = s; }
// A simple function that runs the callback function with the input.
void Rpc(int x, base::OnceCallback<void(int)> rpc_callback) const {
std::move(rpc_callback).Run(x);
}
bool RpcOutputChecker(int x) const { return x > 3; }
void SuccessHandler(base::OnceCallback<void(const std::string&)> callback,
int x) {
rpc_output_ = x;
std::move(callback).Run("success");
}
void FailHandler(base::OnceCallback<void(const std::string&)> callback) {
std::move(callback).Run("fail");
}
protected:
std::string message_;
int rpc_output_;
};
TEST_F(RpcUtilsTest, SuccessHandlerCalled) {
RunRpcWithInputs(
base::BindOnce(&RpcUtilsTest::SetMessage, base::Unretained(this)),
base::BindRepeating(&RpcUtilsTest::Rpc, base::Unretained(this)),
std::list<int>{1, 2, 3, 4, 5},
base::BindRepeating(&RpcUtilsTest::RpcOutputChecker,
base::Unretained(this)),
base::BindOnce(&RpcUtilsTest::SuccessHandler, base::Unretained(this)),
base::BindOnce(&RpcUtilsTest::FailHandler, base::Unretained(this)));
EXPECT_EQ(message_, "success");
EXPECT_EQ(rpc_output_, 4);
}
TEST_F(RpcUtilsTest, FailHandlerCalled) {
RunRpcWithInputs(
base::BindOnce(&RpcUtilsTest::SetMessage, base::Unretained(this)),
base::BindRepeating(&RpcUtilsTest::Rpc, base::Unretained(this)),
std::list<int>{1, 2, 3},
base::BindRepeating(&RpcUtilsTest::RpcOutputChecker,
base::Unretained(this)),
base::BindOnce(&RpcUtilsTest::SuccessHandler, base::Unretained(this)),
base::BindOnce(&RpcUtilsTest::FailHandler, base::Unretained(this)));
EXPECT_EQ(message_, "fail");
EXPECT_EQ(rpc_output_, 0);
}
} // namespace rmad