filtered_service_directory_unittest.cc 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // Copyright 2018 The Chromium 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. #include "base/fuchsia/filtered_service_directory.h"
  5. #include <utility>
  6. #include "base/fuchsia/scoped_service_binding.h"
  7. #include "base/fuchsia/service_directory_test_base.h"
  8. #include "testing/gtest/include/gtest/gtest.h"
  9. namespace base {
  10. class FilteredServiceDirectoryTest : public ServiceDirectoryTestBase {
  11. public:
  12. FilteredServiceDirectoryTest() {
  13. filtered_service_directory_ =
  14. std::make_unique<FilteredServiceDirectory>(public_service_directory_);
  15. fidl::InterfaceHandle<::fuchsia::io::Directory> directory;
  16. EXPECT_EQ(
  17. filtered_service_directory_->ConnectClient(directory.NewRequest()),
  18. ZX_OK);
  19. filtered_client_ =
  20. std::make_unique<sys::ServiceDirectory>(std::move(directory));
  21. }
  22. protected:
  23. std::unique_ptr<FilteredServiceDirectory> filtered_service_directory_;
  24. std::unique_ptr<sys::ServiceDirectory> filtered_client_;
  25. };
  26. // Verify that we can connect to an allowed service.
  27. TEST_F(FilteredServiceDirectoryTest, Connect) {
  28. EXPECT_EQ(
  29. filtered_service_directory_->AddService(testfidl::TestInterface::Name_),
  30. ZX_OK);
  31. auto stub = filtered_client_->Connect<testfidl::TestInterface>();
  32. VerifyTestInterface(&stub, ZX_OK);
  33. }
  34. // Verify that multiple connections to the same service work properly.
  35. TEST_F(FilteredServiceDirectoryTest, ConnectMultiple) {
  36. EXPECT_EQ(
  37. filtered_service_directory_->AddService(testfidl::TestInterface::Name_),
  38. ZX_OK);
  39. auto stub1 = filtered_client_->Connect<testfidl::TestInterface>();
  40. auto stub2 = filtered_client_->Connect<testfidl::TestInterface>();
  41. VerifyTestInterface(&stub1, ZX_OK);
  42. VerifyTestInterface(&stub2, ZX_OK);
  43. }
  44. // Verify that non-allowed services are blocked.
  45. TEST_F(FilteredServiceDirectoryTest, ServiceBlocked) {
  46. auto stub = filtered_client_->Connect<testfidl::TestInterface>();
  47. VerifyTestInterface(&stub, ZX_ERR_PEER_CLOSED);
  48. }
  49. // Verify that FilteredServiceDirectory handles the case when the target service
  50. // is not available in the underlying service directory.
  51. TEST_F(FilteredServiceDirectoryTest, NoService) {
  52. EXPECT_EQ(
  53. filtered_service_directory_->AddService(testfidl::TestInterface::Name_),
  54. ZX_OK);
  55. service_binding_.reset();
  56. auto stub = filtered_client_->Connect<testfidl::TestInterface>();
  57. VerifyTestInterface(&stub, ZX_ERR_PEER_CLOSED);
  58. }
  59. // Verify that FilteredServiceDirectory handles the case when the underlying
  60. // service directory is destroyed.
  61. TEST_F(FilteredServiceDirectoryTest, NoServiceDir) {
  62. EXPECT_EQ(
  63. filtered_service_directory_->AddService(testfidl::TestInterface::Name_),
  64. ZX_OK);
  65. service_binding_.reset();
  66. outgoing_directory_.reset();
  67. auto stub = filtered_client_->Connect<testfidl::TestInterface>();
  68. VerifyTestInterface(&stub, ZX_ERR_PEER_CLOSED);
  69. }
  70. // Verify that FilteredServiceDirectory allows extra services to be added.
  71. TEST_F(FilteredServiceDirectoryTest, AdditionalService) {
  72. ScopedServiceBinding<testfidl::TestInterface> binding(
  73. filtered_service_directory_->outgoing_directory(), &test_service_);
  74. auto stub = filtered_client_->Connect<testfidl::TestInterface>();
  75. VerifyTestInterface(&stub, ZX_OK);
  76. }
  77. } // namespace base