• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2023 The Pigweed Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4 // use this file except in compliance with the License. You may obtain a copy of
5 // the License at
6 //
7 //     https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 // License for the specific language governing permissions and limitations under
13 // the License.
14 
15 #include "pw_bluetooth_sapphire/internal/host/gap/fake_pairing_delegate.h"
16 
17 #include "pw_bluetooth_sapphire/internal/host/testing/test_helpers.h"
18 #include "pw_unit_test/framework.h"
19 
20 namespace bt::gap {
21 namespace {
22 
TEST(FakePairingDelegateTest,io_capability)23 TEST(FakePairingDelegateTest, io_capability) {
24   FakePairingDelegate delegate(sm::IOCapability::kDisplayYesNo);
25   EXPECT_EQ(sm::IOCapability::kDisplayYesNo, delegate.io_capability());
26   delegate.set_io_capability(sm::IOCapability::kNoInputNoOutput);
27   EXPECT_EQ(sm::IOCapability::kNoInputNoOutput, delegate.io_capability());
28 }
29 
TEST(FakePairingDelegateTest,CompletePairing)30 TEST(FakePairingDelegateTest, CompletePairing) {
31   FakePairingDelegate delegate(sm::IOCapability::kDisplayYesNo);
32 
33   bool cb_called = false;
34   auto cb = [&cb_called](auto id, auto status) {
35     cb_called = true;
36     EXPECT_EQ(PeerId(5), id);
37     EXPECT_EQ(ToResult(HostError::kFailed), status);
38   };
39   delegate.SetCompletePairingCallback(std::move(cb));
40   delegate.CompletePairing(PeerId(5), ToResult(HostError::kFailed));
41   EXPECT_TRUE(cb_called);
42 }
43 
TEST(FakePairingDelegateTest,ConfirmPairing)44 TEST(FakePairingDelegateTest, ConfirmPairing) {
45   FakePairingDelegate delegate(sm::IOCapability::kDisplayYesNo);
46 
47   bool cb_called = false;
48   auto cb = [&cb_called](auto id, auto confirm) {
49     cb_called = true;
50     EXPECT_EQ(PeerId(5), id);
51     ASSERT_TRUE(confirm);
52     confirm(true);
53   };
54   delegate.SetConfirmPairingCallback(std::move(cb));
55   delegate.ConfirmPairing(PeerId(5), [](bool) {});
56   EXPECT_TRUE(cb_called);
57 }
58 
TEST(FakePairingDelegateTest,DisplayPasskey)59 TEST(FakePairingDelegateTest, DisplayPasskey) {
60   FakePairingDelegate delegate(sm::IOCapability::kDisplayYesNo);
61 
62   bool cb_called = false;
63   auto cb = [&cb_called](auto id, auto passkey, auto method, auto confirm) {
64     cb_called = true;
65     EXPECT_EQ(PeerId(5), id);
66     EXPECT_EQ(123456U, passkey);
67     EXPECT_EQ(PairingDelegate::DisplayMethod::kComparison, method);
68     ASSERT_TRUE(confirm);
69     confirm(true);
70   };
71   delegate.SetDisplayPasskeyCallback(std::move(cb));
72   delegate.DisplayPasskey(
73       PeerId(5), 123456, PairingDelegate::DisplayMethod::kComparison, [](bool) {
74       });
75   EXPECT_TRUE(cb_called);
76 }
77 
TEST(FakePairingDelegateTest,RequestPasskey)78 TEST(FakePairingDelegateTest, RequestPasskey) {
79   FakePairingDelegate delegate(sm::IOCapability::kDisplayYesNo);
80 
81   bool cb_called = false;
82   auto cb = [&cb_called](auto id, auto respond) {
83     cb_called = true;
84     EXPECT_EQ(PeerId(5), id);
85     ASSERT_TRUE(respond);
86     respond(-1);
87   };
88   delegate.SetRequestPasskeyCallback(std::move(cb));
89   delegate.RequestPasskey(PeerId(5), [](uint64_t) {});
90   EXPECT_TRUE(cb_called);
91 }
92 
TEST(FakePairingDelegateTest,UnexpectedCalls)93 TEST(FakePairingDelegateTest, UnexpectedCalls) {
94   FakePairingDelegate delegate(sm::IOCapability::kDisplayYesNo);
95 
96   // Each of the following calls should generate failure(s).
97   // delegate.CompletePairing(PeerId(5), ToResult(HostError::kFailed));
98   // delegate.ConfirmPairing(PeerId(5), [](bool) {});
99   // delegate.DisplayPasskey(PeerId(5), 123456,
100   // PairingDelegate::DisplayMethod::kComparison,
101   //                         [](bool) {});
102   // delegate.RequestPasskey(PeerId(5), [](uint64_t) {});
103 }
104 
TEST(FakePairingDelegateTest,ExpectCallNotCalled)105 TEST(FakePairingDelegateTest, ExpectCallNotCalled) {
106   FakePairingDelegate delegate(sm::IOCapability::kDisplayYesNo);
107 
108   // delegate.SetCompletePairingCallback([](auto, auto) {});
109   // delegate.SetConfirmPairingCallback([](auto, auto) {});
110   // delegate.SetDisplayPasskeyCallback([](auto, auto, auto, auto) {});
111   // delegate.SetRequestPasskeyCallback([](auto, auto) {});
112   // Each of the preceding calls should generate failure(s) when |delegate| goes
113   // out of scope.
114 }
115 
116 }  // namespace
117 }  // namespace bt::gap
118