blob: dcc7fd067a89b84f16c4ec2966b7deddb37b4531 [file] [log] [blame]
// 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/filtered_service_directory.h"
#include <lib/zx/channel.h>
#include <utility>
#include "base/fuchsia/service_directory_test_base.h"
#include "starboard/types.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base {
namespace fuchsia {
class FilteredServiceDirectoryTest : public ServiceDirectoryTestBase {
public:
FilteredServiceDirectoryTest() {
filtered_service_dir_ =
std::make_unique<FilteredServiceDirectory>(client_context_.get());
filtered_client_context_ = std::make_unique<ComponentContext>(
filtered_service_dir_->ConnectClient());
}
protected:
std::unique_ptr<FilteredServiceDirectory> filtered_service_dir_;
std::unique_ptr<ComponentContext> filtered_client_context_;
};
// Verify that we can connect to a whitelisted service.
TEST_F(FilteredServiceDirectoryTest, Connect) {
filtered_service_dir_->AddService(testfidl::TestInterface::Name_);
auto stub =
filtered_client_context_->ConnectToService<testfidl::TestInterface>();
VerifyTestInterface(&stub, false);
}
// Verify that multiple connections to the same service work properly.
TEST_F(FilteredServiceDirectoryTest, ConnectMultiple) {
filtered_service_dir_->AddService(testfidl::TestInterface::Name_);
auto stub1 =
filtered_client_context_->ConnectToService<testfidl::TestInterface>();
auto stub2 =
filtered_client_context_->ConnectToService<testfidl::TestInterface>();
VerifyTestInterface(&stub1, false);
VerifyTestInterface(&stub2, false);
}
// Verify that non-whitelisted services are blocked.
TEST_F(FilteredServiceDirectoryTest, ServiceBlocked) {
auto stub =
filtered_client_context_->ConnectToService<testfidl::TestInterface>();
VerifyTestInterface(&stub, true);
}
// Verify that FilteredServiceDirectory handles the case when the target service
// is not available in the underlying service directory.
TEST_F(FilteredServiceDirectoryTest, NoService) {
filtered_service_dir_->AddService(testfidl::TestInterface::Name_);
service_binding_.reset();
auto stub =
filtered_client_context_->ConnectToService<testfidl::TestInterface>();
VerifyTestInterface(&stub, true);
}
// Verify that FilteredServiceDirectory handles the case when the underlying
// service directory is destroyed.
TEST_F(FilteredServiceDirectoryTest, NoServiceDir) {
filtered_service_dir_->AddService(testfidl::TestInterface::Name_);
service_binding_.reset();
service_directory_.reset();
auto stub =
filtered_client_context_->ConnectToService<testfidl::TestInterface>();
VerifyTestInterface(&stub, true);
}
} // namespace fuchsia
} // namespace base