Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 550c3306 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "VtsHalBluetooth: Add test for double init"

parents 7b29d267 0daa164e
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -35,6 +35,9 @@ interface IBluetoothHci {

    /**
     * Initialize the Bluetooth interface and set the callbacks.
     * Only one client can initialize the interface at a time.  When a
     * call to initialize fails, the Status parameter of the callback
     * will indicate the reason for the failure.
     */
    void initialize(in IBluetoothHciCallbacks callback);

+2 −0
Original line number Diff line number Diff line
@@ -39,6 +39,8 @@ interface IBluetoothHciCallbacks {
    /**
     * Invoked when the Bluetooth controller initialization has been
     * completed.
     * @param status contains a return code indicating success, or the
     *               reason the initialization failed.
     */
    void initializationComplete(in Status status);

+42 −0
Original line number Diff line number Diff line
@@ -867,6 +867,48 @@ TEST_P(BluetoothAidlTest, SetLeEventMask) {
  wait_for_command_complete_event(set_event_mask);
}

// Call initialize twice, second one should fail.
TEST_P(BluetoothAidlTest, CallInitializeTwice) {
  class SecondCb
      : public aidl::android::hardware::bluetooth::BnBluetoothHciCallbacks {
   public:
    ndk::ScopedAStatus initializationComplete(Status status) {
      EXPECT_EQ(status, Status::ALREADY_INITIALIZED);
      init_promise.set_value();
      return ScopedAStatus::ok();
    };

    ndk::ScopedAStatus hciEventReceived(const std::vector<uint8_t>& /*event*/) {
      ADD_FAILURE();
      return ScopedAStatus::ok();
    };

    ndk::ScopedAStatus aclDataReceived(const std::vector<uint8_t>& /*data*/) {
      ADD_FAILURE();
      return ScopedAStatus::ok();
    };

    ndk::ScopedAStatus scoDataReceived(const std::vector<uint8_t>& /*data*/) {
      ADD_FAILURE();
      return ScopedAStatus::ok();
    };

    ndk::ScopedAStatus isoDataReceived(const std::vector<uint8_t>& /*data*/) {
      ADD_FAILURE();
      return ScopedAStatus::ok();
    };
    std::promise<void> init_promise;
  };

  std::shared_ptr<SecondCb> second_cb = ndk::SharedRefBase::make<SecondCb>();
  ASSERT_NE(second_cb, nullptr);

  auto future = second_cb->init_promise.get_future();
  ASSERT_TRUE(hci->initialize(second_cb).isOk());
  auto status = future.wait_for(std::chrono::seconds(1));
  ASSERT_EQ(status, std::future_status::ready);
}

GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(BluetoothAidlTest);
INSTANTIATE_TEST_SUITE_P(PerInstance, BluetoothAidlTest,
                         testing::ValuesIn(android::getAidlHalInstanceNames(