mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-12-01 01:36:09 +03:00
83 lines
2.5 KiB
C++
83 lines
2.5 KiB
C++
|
// Copyright 2018 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.
|
||
|
|
||
|
#include "base/fuchsia/service_directory_test_base.h"
|
||
|
|
||
|
#include <lib/fdio/util.h>
|
||
|
|
||
|
namespace base {
|
||
|
namespace fuchsia {
|
||
|
|
||
|
TestInterfaceImpl::TestInterfaceImpl() = default;
|
||
|
TestInterfaceImpl::~TestInterfaceImpl() = default;
|
||
|
|
||
|
// TestInterface implementation.
|
||
|
void TestInterfaceImpl::Add(int32_t a, int32_t b, AddCallback callback) {
|
||
|
callback(a + b);
|
||
|
}
|
||
|
|
||
|
ServiceDirectoryTestBase::ServiceDirectoryTestBase() {
|
||
|
zx::channel service_directory_channel;
|
||
|
EXPECT_EQ(zx::channel::create(0, &service_directory_channel,
|
||
|
&service_directory_client_channel_),
|
||
|
ZX_OK);
|
||
|
|
||
|
// Mount service dir and publish the service.
|
||
|
service_directory_ =
|
||
|
std::make_unique<ServiceDirectory>(std::move(service_directory_channel));
|
||
|
service_binding_ =
|
||
|
std::make_unique<ScopedServiceBinding<testfidl::TestInterface>>(
|
||
|
service_directory_.get(), &test_service_);
|
||
|
|
||
|
ConnectClientContextToDirectory("public");
|
||
|
}
|
||
|
|
||
|
ServiceDirectoryTestBase::~ServiceDirectoryTestBase() = default;
|
||
|
|
||
|
void ServiceDirectoryTestBase::ConnectClientContextToDirectory(
|
||
|
const char* path) {
|
||
|
// Open directory |path| from the service directory.
|
||
|
zx::channel public_directory_channel;
|
||
|
zx::channel public_directory_client_channel;
|
||
|
EXPECT_EQ(zx::channel::create(0, &public_directory_channel,
|
||
|
&public_directory_client_channel),
|
||
|
ZX_OK);
|
||
|
EXPECT_EQ(fdio_open_at(service_directory_client_channel_.get(), path, 0,
|
||
|
public_directory_channel.release()),
|
||
|
ZX_OK);
|
||
|
|
||
|
// Create ComponentContext and connect to the test service.
|
||
|
client_context_ = std::make_unique<ComponentContext>(
|
||
|
std::move(public_directory_client_channel));
|
||
|
}
|
||
|
|
||
|
void ServiceDirectoryTestBase::VerifyTestInterface(
|
||
|
fidl::InterfacePtr<testfidl::TestInterface>* stub,
|
||
|
bool expect_error) {
|
||
|
// Call the service and wait for response.
|
||
|
base::RunLoop run_loop;
|
||
|
bool error = false;
|
||
|
|
||
|
stub->set_error_handler([&run_loop, &error]() {
|
||
|
error = true;
|
||
|
run_loop.Quit();
|
||
|
});
|
||
|
|
||
|
(*stub)->Add(2, 2, [&run_loop](int32_t result) {
|
||
|
EXPECT_EQ(result, 4);
|
||
|
run_loop.Quit();
|
||
|
});
|
||
|
|
||
|
run_loop.Run();
|
||
|
|
||
|
EXPECT_EQ(error, expect_error);
|
||
|
|
||
|
// Reset error handler because the current one captures |run_loop| and
|
||
|
// |error| references which are about to be destroyed.
|
||
|
stub->set_error_handler([]() {});
|
||
|
}
|
||
|
|
||
|
} // namespace fuchsia
|
||
|
} // namespace base
|