blob: 3f9c822666f646c59f26654647bd06d0d3fb9cf2 [file] [log] [blame]
// Copyright 2023 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
#include "pw_bluetooth_sapphire/internal/host/gap/fake_pairing_delegate.h"
#include "pw_unit_test/framework.h"
namespace bt::gap {
namespace {
void AddFailure(const char* func_name, PeerId peer_id) {
return ADD_FAILURE() << "Unexpected call to " << __func__
<< ", peer_id: " << peer_id.ToString();
}
} // namespace
FakePairingDelegate::FakePairingDelegate(sm::IOCapability io_capability)
: io_capability_(io_capability),
complete_pairing_count_(0),
confirm_pairing_count_(0),
display_passkey_count_(0),
request_passkey_count_(0) {}
FakePairingDelegate::~FakePairingDelegate() {
if (complete_pairing_cb_ && complete_pairing_count_ == 0) {
ADD_FAILURE() << "Expected CompletePairing never called";
}
if (confirm_pairing_cb_ && confirm_pairing_count_ == 0) {
ADD_FAILURE() << "Expected ConfirmPairing never called";
}
if (display_passkey_cb_ && display_passkey_count_ == 0) {
ADD_FAILURE() << "Expected DisplayPasskey never called";
}
if (request_passkey_cb_ && request_passkey_count_ == 0) {
ADD_FAILURE() << "Expected RequestPasskey never called";
}
}
void FakePairingDelegate::CompletePairing(PeerId peer_id, sm::Result<> status) {
if (!complete_pairing_cb_) {
AddFailure(__func__, peer_id);
ADD_FAILURE() << status.error_value();
return;
}
complete_pairing_cb_(peer_id, status);
complete_pairing_count_++;
}
void FakePairingDelegate::ConfirmPairing(PeerId peer_id,
ConfirmCallback confirm) {
if (!confirm_pairing_cb_) {
AddFailure(__func__, peer_id);
return;
}
confirm_pairing_cb_(peer_id, std::move(confirm));
confirm_pairing_count_++;
}
void FakePairingDelegate::DisplayPasskey(PeerId peer_id,
uint32_t passkey,
DisplayMethod method,
ConfirmCallback confirm) {
if (!display_passkey_cb_) {
AddFailure(__func__, peer_id);
ADD_FAILURE() << "passkey: " << passkey << ", method: " << method;
return;
}
display_passkey_cb_(peer_id, passkey, method, std::move(confirm));
display_passkey_count_++;
}
void FakePairingDelegate::RequestPasskey(PeerId peer_id,
PasskeyResponseCallback respond) {
if (!request_passkey_cb_) {
AddFailure(__func__, peer_id);
return;
}
request_passkey_cb_(peer_id, std::move(respond));
request_passkey_count_++;
}
} // namespace bt::gap