1 /******************************************************************************
2  *
3  *  Copyright 2015 Google, Inc.
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 #include "device/include/interop.h"
20 
21 #include <gtest/gtest.h>
22 
23 #include "btcore/include/module.h"
24 #include "device/include/interop_config.h"
25 #include "types/raw_address.h"
26 
27 #ifndef __ANDROID__
28 #include <base/files/file_util.h>
29 #include <unistd.h>
30 
31 #include <filesystem>
32 #include <system_error>
33 
34 static const std::filesystem::path kStaticConfigFileConfigFile =
35         std::filesystem::temp_directory_path() / "interop_database.conf";
36 
37 static const char* INTEROP_STATIC_FILE_PATH = kStaticConfigFileConfigFile.c_str();
38 static const char INTEROP_STATIC_FILE_CONTENT[] =
39         "                                                                                        \n\
40 #Disable secure connections                                                                  \n\
41 #This is for pre BT 4.1/2 devices that do not handle secure mode very well.                  \n\
42 [INTEROP_DISABLE_LE_SECURE_CONNECTIONS]                                                      \n\
43 08:62:66 = Address_Based                                                                     \n\
44 38:2C:4A:E6 = Address_Based                                                                  \n\
45                                                                                              \n\
46 # Disable automatic pairing with headsets/car-kits                                           \n\
47 # Some car kits do not react kindly to a failed pairing attempt and                          \n\
48 # do not allow immediate re-pairing. Denylist these so that the initial                      \n\
49 # pairing attempt makes it to the user instead                                               \n\
50 [INTEROP_DISABLE_AUTO_PAIRING]                                                               \n\
51 34:C7:31 = Address_Based                                                                     \n\
52 Audi = Name_Based                                                                            \n\
53 BMW = Name_Based                                                                             \n\
54                                                                                              \n\
55 # Devices requiring this workaround do not handle Bluetooth Absolute Volume                  \n\
56 # control correctly, leading to undesirable (potentially harmful) volume levels              \n\
57 # or general lack of controlability.                                                         \n\
58 [INTEROP_DISABLE_ABSOLUTE_VOLUME]                                                            \n\
59 A0:E9:DB = Address_Based                                                                     \n\
60 00:0f:59:50:00:00-00:0f:59:6f:ff:ff = Address_Range_Based                                    \n\
61                                                                                              \n\
62 # HID Keyboards that claim support for multitouch functionality have issue with              \n\
63 # normal functioning of keyboard because of issues in USB HID kernel driver.                 \n\
64 # To avoid degrading the user experience with those devices, digitizer record                \n\
65 # is removed from the report descriptor.                                                     \n\
66 [INTEROP_REMOVE_HID_DIG_DESCRIPTOR]                                                          \n\
67 Motorola Keyboard KZ500 = Name_Based                                                         \n\
68 0x22b8-0x093D = Vndr_Prdt_Based                                                              \n\
69                                                                                              \n\
70 # some remote hid devices cannot work properly as they load special hid usb driver in kernel,\n\
71 # so modify their vid/pid so that generic hid driver are loaded.                             \n\
72 [INTEROP_CHANGE_HID_VID_PID]                                                                 \n\
73 CK87BT = Name_Based                                                                          \n\
74 0x05ac-0x0255 = Vndr_Prdt_Based                                                              \n\
75                                                                                              \n\
76 # Some HID devices have problematic behaviour where when hid link is in Sniff                \n\
77 # and DUT is in Peripheral role for SCO link ( not eSCO) any solution cannot maintain        \n\
78 # the link as  SCO scheduling over a small period will overlap with Sniff link due to        \n\
79 # peripheral drift.                                                                          \n\
80 # To avoid degrading the user experience with those devices, sniff is disabled from          \n\
81 # link policy when sco is active, and enabled when sco is disabled.                          \n\
82 [INTEROP_DISABLE_SNIFF_DURING_SCO]                                                           \n\
83 20:4C:10 = Address_Based                                                                     \n\
84 0x004C = Manufacturer_Based                                                                  \n\
85                                                                                              \n\
86 # Devices requiring this workaround do not handle SSR max latency values as mentioned,       \n\
87 # in their SDP HID Record properly and lead to connection timeout or lags. To prevent        \n\
88 # such scenarios, device requiring this workaround need to use specific ssr max latency      \n\
89 # values.                                                                                    \n\
90 [INTEROP_UPDATE_HID_SSR_MAX_LAT]                                                             \n\
91 00:1B:DC-0x0012 = SSR_Max_Lat_Based                                                          \n\
92 DC:2C:26-0x0000 = SSR_Max_Lat_Based                                                          \n\
93 ";
94 #endif
95 
96 extern const module_t interop_module;
97 
98 class InteropTest : public ::testing::Test {
99 protected:
SetUp()100   virtual void SetUp() override {
101 #ifndef __ANDROID__
102     FILE* fp = fopen(INTEROP_STATIC_FILE_PATH, "wte");
103     ASSERT_NE(fp, nullptr);
104     ASSERT_EQ(fwrite(INTEROP_STATIC_FILE_CONTENT, 1, sizeof(INTEROP_STATIC_FILE_CONTENT), fp),
105               sizeof(INTEROP_STATIC_FILE_CONTENT));
106     // Force data to be flushed on disk and not only in user-space
107     ASSERT_EQ(fsync(fileno(fp)), 0) << "Associated ERRNO error is: " << strerror(errno);
108     ASSERT_EQ(fclose(fp), 0);
109 #endif
110   }
TearDown()111   virtual void TearDown() override {
112 #ifndef __ANDROID__
113     std::error_code ec;
114     EXPECT_TRUE(std::filesystem::remove(kStaticConfigFileConfigFile, ec))
115             << "Associated error is: " << ec;
116 #endif
117   }
118 };
119 
TEST_F(InteropTest,test_lookup_hit)120 TEST_F(InteropTest, test_lookup_hit) {
121   module_init(&interop_module);
122 
123   RawAddress test_address;
124 
125   RawAddress::FromString("38:2c:4a:e6:67:89", test_address);
126   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address));
127 
128   RawAddress::FromString("34:c7:31:12:34:56", test_address);
129   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_AUTO_PAIRING, &test_address));
130 
131 #ifdef __ANDROID__
132   RawAddress::FromString("9c:df:03:12:34:56", test_address);
133   EXPECT_TRUE(interop_match_addr(INTEROP_AUTO_RETRY_PAIRING, &test_address));
134 
135   RawAddress::FromString("a0:e9:db:e6:67:89", test_address);
136   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_ABSOLUTE_VOLUME, &test_address));
137 
138   RawAddress::FromString("00:0f:f6:e6:67:89", test_address);
139   EXPECT_TRUE(interop_match_addr(INTEROP_KEYBOARD_REQUIRES_FIXED_PIN, &test_address));
140 
141   RawAddress::FromString("00:18:91:12:34:56", test_address);
142   EXPECT_TRUE(interop_match_addr(INTEROP_2MBPS_LINK_ONLY, &test_address));
143 
144   RawAddress::FromString("00:12:a1:e6:67:89", test_address);
145   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_AUTH_FOR_HID_POINTING, &test_address));
146 
147   RawAddress::FromString("20:4c:10:12:34:56", test_address);
148   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_SNIFF_DURING_SCO, &test_address));
149 
150   RawAddress::FromString("00:14:09:e6:67:89", test_address);
151   EXPECT_TRUE(interop_match_addr(INTEROP_INCREASE_AG_CONN_TIMEOUT, &test_address));
152 
153   RawAddress::FromString("fc:c2:de:12:34:56", test_address);
154   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_ROLE_SWITCH, &test_address));
155 
156   RawAddress::FromString("28:a1:83:9c:20:a8", test_address);
157   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_AAC_CODEC, &test_address));
158 
159   RawAddress::FromString("28:83:35:7a:5f:23", test_address);
160   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_AAC_VBR_CODEC, &test_address));
161 
162   RawAddress::FromString("b8:ad:3e:12:34:56", test_address);
163   EXPECT_TRUE(interop_match_addr(INTEROP_ENABLE_AAC_CODEC, &test_address));
164 
165   RawAddress::FromString("ac:fd:ce:e6:67:89", test_address);
166   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_PCE_SDP_AFTER_PAIRING, &test_address));
167 
168   RawAddress::FromString("98:7b:f3:12:34:56", test_address);
169   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_HF_INDICATOR, &test_address));
170 
171   RawAddress::FromString("04:52:c7:e6:67:89", test_address);
172   EXPECT_TRUE(interop_match_addr(INTEROP_DELAY_SCO_FOR_MT_CALL, &test_address));
173 
174   RawAddress::FromString("04:52:c7:12:34:56", test_address);
175   EXPECT_TRUE(interop_match_addr(INTEROP_DELAY_SCO_FOR_MT_CALL, &test_address));
176 
177   RawAddress::FromString("00:08:8a:f0:1d:8a", test_address);
178   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_CODEC_NEGOTIATION, &test_address));
179 
180   RawAddress::FromString("a0:56:b2:4f:86:a8", test_address);
181   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_PLAYER_APPLICATION_SETTING_CMDS, &test_address));
182 
183   RawAddress::FromString("a0:14:3d:e6:67:89", test_address);
184   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_CONNECTION_AFTER_COLLISION, &test_address));
185 
186   RawAddress::FromString("38:2c:4a:c9:34:56", test_address);
187   EXPECT_TRUE(interop_match_addr(INTEROP_HID_PREF_CONN_SUP_TIMEOUT_3S, &test_address));
188 
189   RawAddress::FromString("00:1d:86:e6:67:89", test_address);
190   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_AVDTP_RECONFIGURE, &test_address));
191 
192   RawAddress::FromString("2c:dc:ad:08:91:89", test_address);
193   EXPECT_TRUE(interop_match_addr(INTEROP_AVRCP_BROWSE_OPEN_CHANNEL_COLLISION, &test_address));
194 
195   RawAddress::FromString("10:b7:f6:03:38:b0", test_address);
196   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_SNIFF_DURING_CALL, &test_address));
197 
198   RawAddress::FromString("00:0e:9f:12:34:56", test_address);
199   EXPECT_TRUE(interop_match_addr(INTEROP_SKIP_INCOMING_STATE, &test_address));
200 
201   RawAddress::FromString("98:b6:e9:e6:67:89", test_address);
202   EXPECT_TRUE(interop_match_addr(INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL, &test_address));
203 
204   RawAddress::FromString("04:4e:af:a8:a0:01", test_address);
205   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_REFRESH_ACCEPT_SIG_TIMER, &test_address));
206 
207   RawAddress::FromString("bc:30:7e:5e:f6:27", test_address);
208   EXPECT_TRUE(interop_match_addr(INTEROP_NOT_UPDATE_AVRCP_PAUSED_TO_REMOTE, &test_address));
209 
210   RawAddress::FromString("10:4f:a8:08:91:89", test_address);
211   EXPECT_TRUE(interop_match_addr(INTEROP_PHONE_POLICY_REDUCED_DELAY_CONNECT_OTHER_PROFILES,
212                                  &test_address));
213 
214   RawAddress::FromString("00:15:83:03:38:b0", test_address);
215   EXPECT_TRUE(interop_match_addr(INTEROP_HFP_FAKE_INCOMING_CALL_INDICATOR, &test_address));
216 
217   RawAddress::FromString("00:09:93:a6:c5:4d", test_address);
218   EXPECT_TRUE(interop_match_addr(INTEROP_DELAY_SCO_FOR_MO_CALL, &test_address));
219 
220   RawAddress::FromString("48:eb:62:e6:67:89", test_address);
221   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_ROLE_SWITCH_DURING_CONNECTION, &test_address));
222 
223   RawAddress::FromString("9c:df:03:a8:a0:01", test_address);
224   EXPECT_TRUE(interop_match_addr(INTEROP_AUTO_RETRY_PAIRING, &test_address));
225 
226   RawAddress::FromString("d4:7a:e2:5e:f6:27", test_address);
227   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_NAME_REQUEST, &test_address));
228 
229   RawAddress::FromString("48:f0:7b:08:91:89", test_address);
230   EXPECT_TRUE(interop_match_addr(INTEROP_AVRCP_1_4_ONLY, &test_address));
231 
232   RawAddress::FromString("00:0a:08:03:38:b0", test_address);
233   EXPECT_TRUE(interop_match_addr(INTEROP_AVRCP_1_3_ONLY, &test_address));
234 
235   RawAddress::FromString("44:ea:d8:a6:c5:4d", test_address);
236   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_SNIFF, &test_address));
237 
238   RawAddress::FromString("94:b2:cc:30:c5:4d", test_address);
239   EXPECT_TRUE(interop_match_addr(INTEROP_SLC_SKIP_BIND_COMMAND, &test_address));
240 #endif
241 
242   module_clean_up(&interop_module);
243 }
244 
TEST_F(InteropTest,test_lookup_miss)245 TEST_F(InteropTest, test_lookup_miss) {
246   module_init(&interop_module);
247 
248   RawAddress test_address;
249 
250   RawAddress::FromString("00:00:00:00:00:00", test_address);
251   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address));
252 
253   RawAddress::FromString("ff:ff:ff:ff:ff:ff", test_address);
254   EXPECT_FALSE(interop_match_addr(INTEROP_AUTO_RETRY_PAIRING, &test_address));
255 
256   RawAddress::FromString("42:08:15:ae:ae:ae", test_address);
257   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address));
258 
259   RawAddress::FromString("38:2c:4a:59:67:89", test_address);
260   EXPECT_FALSE(interop_match_addr(INTEROP_AUTO_RETRY_PAIRING, &test_address));
261 
262   RawAddress::FromString("ff:ff:ff:ff:ff:ff", test_address);
263   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address));
264   EXPECT_FALSE(interop_match_addr(INTEROP_AUTO_RETRY_PAIRING, &test_address));
265   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_ABSOLUTE_VOLUME, &test_address));
266   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_AUTO_PAIRING, &test_address));
267   EXPECT_FALSE(interop_match_addr(INTEROP_KEYBOARD_REQUIRES_FIXED_PIN, &test_address));
268   EXPECT_FALSE(interop_match_addr(INTEROP_2MBPS_LINK_ONLY, &test_address));
269   EXPECT_FALSE(interop_match_addr(INTEROP_HID_PREF_CONN_SUP_TIMEOUT_3S, &test_address));
270   EXPECT_FALSE(interop_match_addr(INTEROP_GATTC_NO_SERVICE_CHANGED_IND, &test_address));
271   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_SDP_AFTER_PAIRING, &test_address));
272   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_AUTH_FOR_HID_POINTING, &test_address));
273   EXPECT_FALSE(interop_match_addr(INTEROP_REMOVE_HID_DIG_DESCRIPTOR, &test_address));
274   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_SNIFF_DURING_SCO, &test_address));
275   EXPECT_FALSE(interop_match_addr(INTEROP_INCREASE_AG_CONN_TIMEOUT, &test_address));
276   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS, &test_address));
277   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_AAC_CODEC, &test_address));
278   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_AAC_VBR_CODEC, &test_address));
279   EXPECT_FALSE(interop_match_addr(INTEROP_DYNAMIC_ROLE_SWITCH, &test_address));
280   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_ROLE_SWITCH, &test_address));
281   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_ROLE_SWITCH_POLICY, &test_address));
282   EXPECT_FALSE(interop_match_addr(INTEROP_HFP_1_7_DENYLIST, &test_address));
283   EXPECT_FALSE(interop_match_addr(INTEROP_ADV_PBAP_VER_1_1, &test_address));
284   EXPECT_FALSE(interop_match_addr(INTEROP_UPDATE_HID_SSR_MAX_LAT, &test_address));
285   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_AVDTP_RECONFIGURE, &test_address));
286   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_HF_INDICATOR, &test_address));
287   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_LE_CONN_UPDATES, &test_address));
288   EXPECT_FALSE(interop_match_addr(INTEROP_DELAY_SCO_FOR_MT_CALL, &test_address));
289   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_CODEC_NEGOTIATION, &test_address));
290   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_PLAYER_APPLICATION_SETTING_CMDS, &test_address));
291   EXPECT_FALSE(interop_match_addr(INTEROP_ENABLE_AAC_CODEC, &test_address));
292   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_CONNECTION_AFTER_COLLISION, &test_address));
293   EXPECT_FALSE(interop_match_addr(INTEROP_AVRCP_BROWSE_OPEN_CHANNEL_COLLISION, &test_address));
294   EXPECT_FALSE(interop_match_addr(INTEROP_ADV_PBAP_VER_1_2, &test_address));
295   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_PCE_SDP_AFTER_PAIRING, &test_address));
296   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_SNIFF_LINK_DURING_SCO, &test_address));
297   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_SNIFF_DURING_CALL, &test_address));
298   EXPECT_FALSE(interop_match_addr(INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL, &test_address));
299   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_REFRESH_ACCEPT_SIG_TIMER, &test_address));
300   EXPECT_FALSE(interop_match_addr(INTEROP_SKIP_INCOMING_STATE, &test_address));
301   EXPECT_FALSE(interop_match_addr(INTEROP_NOT_UPDATE_AVRCP_PAUSED_TO_REMOTE, &test_address));
302   EXPECT_FALSE(interop_match_addr(INTEROP_PHONE_POLICY_INCREASED_DELAY_CONNECT_OTHER_PROFILES,
303                                   &test_address));
304   EXPECT_FALSE(interop_match_addr(INTEROP_PHONE_POLICY_REDUCED_DELAY_CONNECT_OTHER_PROFILES,
305                                   &test_address));
306   EXPECT_FALSE(interop_match_addr(INTEROP_HFP_FAKE_INCOMING_CALL_INDICATOR, &test_address));
307   EXPECT_FALSE(interop_match_addr(INTEROP_HFP_SEND_CALL_INDICATORS_BACK_TO_BACK, &test_address));
308   EXPECT_FALSE(
309           interop_match_addr(INTEROP_SETUP_SCO_WITH_NO_DELAY_AFTER_SLC_DURING_CALL, &test_address));
310   EXPECT_FALSE(interop_match_addr(INTEROP_ENABLE_PREFERRED_CONN_PARAMETER, &test_address));
311   EXPECT_FALSE(interop_match_addr(INTEROP_RETRY_SCO_AFTER_REMOTE_REJECT_SCO, &test_address));
312   EXPECT_FALSE(interop_match_addr(INTEROP_DELAY_SCO_FOR_MO_CALL, &test_address));
313   EXPECT_FALSE(interop_match_addr(INTEROP_CHANGE_HID_VID_PID, &test_address));
314   EXPECT_FALSE(interop_match_addr(END_OF_INTEROP_LIST, &test_address));
315   EXPECT_FALSE(interop_match_addr(INTEROP_HFP_1_8_DENYLIST, &test_address));
316   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_ROLE_SWITCH_DURING_CONNECTION, &test_address));
317   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_NAME_REQUEST, &test_address));
318   EXPECT_FALSE(interop_match_addr(INTEROP_AVRCP_1_4_ONLY, &test_address));
319   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_SNIFF, &test_address));
320   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_AVDTP_SUSPEND, &test_address));
321   EXPECT_FALSE(interop_match_addr(INTEROP_SLC_SKIP_BIND_COMMAND, &test_address));
322   EXPECT_FALSE(interop_match_addr(INTEROP_AVRCP_1_3_ONLY, &test_address));
323 
324   module_clean_up(&interop_module);
325 }
326 
TEST_F(InteropTest,test_dynamic_db_clear)327 TEST_F(InteropTest, test_dynamic_db_clear) {
328   module_init(&interop_module);
329 
330   RawAddress test_address;
331 
332   RawAddress::FromString("11:22:33:44:55:66", test_address);
333   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address));
334 
335   interop_database_add(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address, 3);
336   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address));
337   EXPECT_FALSE(interop_match_addr(INTEROP_AUTO_RETRY_PAIRING, &test_address));
338 
339   RawAddress::FromString("66:55:44:33:22:11", test_address);
340   EXPECT_FALSE(interop_match_addr(INTEROP_AUTO_RETRY_PAIRING, &test_address));
341 
342   interop_database_add(INTEROP_AUTO_RETRY_PAIRING, &test_address, 3);
343   EXPECT_TRUE(interop_match_addr(INTEROP_AUTO_RETRY_PAIRING, &test_address));
344   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address));
345 
346   interop_database_clear();
347 
348   EXPECT_FALSE(interop_match_addr(INTEROP_AUTO_RETRY_PAIRING, &test_address));
349 
350   module_clean_up(&interop_module);
351 }
352 
TEST_F(InteropTest,test_name_hit)353 TEST_F(InteropTest, test_name_hit) {
354   module_init(&interop_module);
355 
356   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_AUTO_PAIRING, "BMW M3"));
357   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_AUTO_PAIRING, "Audi"));
358 
359 #ifdef __ANDROID__
360   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_AUTO_PAIRING,
361                                  "Caramel"));  // Starts with "Car" ;)
362 
363   EXPECT_TRUE(interop_match_name(INTEROP_GATTC_NO_SERVICE_CHANGED_IND, "MiMouse"));
364   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_AUTH_FOR_HID_POINTING,
365                                  "Targus BT Laser Notebook Mouse"));
366   EXPECT_TRUE(interop_match_name(INTEROP_REMOVE_HID_DIG_DESCRIPTOR, "Motorola Keyboard KZ500"));
367   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS, "BSMBB09DS"));
368   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS, "DXCMog"));
369   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS, "Dexcom 123"));
370   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS, "DX01ab"));
371   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_AAC_CODEC, "abramtek M1"));
372   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_AAC_VBR_CODEC, "Audi_MMI_2781"));
373   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_AVDTP_RECONFIGURE, "KMM-BT51*HD"));
374   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_LE_CONN_UPDATES, "ITAG"));
375   EXPECT_TRUE(interop_match_name(INTEROP_DELAY_SCO_FOR_MT_CALL, "AirPods Pro"));
376   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_CODEC_NEGOTIATION, "JABRA EASYGO"));
377   EXPECT_TRUE(interop_match_name(INTEROP_ENABLE_AAC_CODEC, "MDR-1RBT"));
378   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_SNIFF_LINK_DURING_SCO, "AirPods"));
379   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_SNIFF_DURING_CALL, "AirPods"));
380   EXPECT_TRUE(interop_match_name(INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL, "Joy-Con"));
381   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_REFRESH_ACCEPT_SIG_TIMER, "HB20"));
382   EXPECT_TRUE(interop_match_name(INTEROP_NOT_UPDATE_AVRCP_PAUSED_TO_REMOTE, "Audi"));
383   EXPECT_TRUE(
384           interop_match_name(INTEROP_SETUP_SCO_WITH_NO_DELAY_AFTER_SLC_DURING_CALL, "Geely_BT"));
385   EXPECT_TRUE(
386           interop_match_name(INTEROP_ENABLE_PREFERRED_CONN_PARAMETER, "Microsoft Bluetooth Mouse"));
387   EXPECT_TRUE(interop_match_name(INTEROP_RETRY_SCO_AFTER_REMOTE_REJECT_SCO, "HAVAL M6"));
388   EXPECT_TRUE(interop_match_name(INTEROP_CHANGE_HID_VID_PID, "CK87BT"));
389 #endif
390 
391   module_clean_up(&interop_module);
392 }
393 
TEST_F(InteropTest,test_name_miss)394 TEST_F(InteropTest, test_name_miss) {
395   module_init(&interop_module);
396 
397   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_AUTO_PAIRING, "__GOOGLE__"));
398   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_AUTO_PAIRING, "BM"));
399   EXPECT_FALSE(interop_match_name(INTEROP_AUTO_RETRY_PAIRING, "BMW M3"));
400   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, "TEST"));
401   EXPECT_FALSE(interop_match_name(INTEROP_AUTO_RETRY_PAIRING, "TEST"));
402   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_ABSOLUTE_VOLUME, "TEST"));
403   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_AUTO_PAIRING, "TEST"));
404   EXPECT_FALSE(interop_match_name(INTEROP_KEYBOARD_REQUIRES_FIXED_PIN, "TEST"));
405   EXPECT_FALSE(interop_match_name(INTEROP_2MBPS_LINK_ONLY, "TEST"));
406   EXPECT_FALSE(interop_match_name(INTEROP_HID_PREF_CONN_SUP_TIMEOUT_3S, "TEST"));
407   EXPECT_FALSE(interop_match_name(INTEROP_GATTC_NO_SERVICE_CHANGED_IND, "TEST"));
408   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_SDP_AFTER_PAIRING, "TEST"));
409   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_AUTH_FOR_HID_POINTING, "TEST"));
410   EXPECT_FALSE(interop_match_name(INTEROP_REMOVE_HID_DIG_DESCRIPTOR, "TEST"));
411   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_SNIFF_DURING_SCO, "TEST"));
412   EXPECT_FALSE(interop_match_name(INTEROP_INCREASE_AG_CONN_TIMEOUT, "TEST"));
413   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS, "TEST"));
414   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_AAC_CODEC, "TEST"));
415   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_AAC_VBR_CODEC, "TEST"));
416   EXPECT_FALSE(interop_match_name(INTEROP_DYNAMIC_ROLE_SWITCH, "TEST"));
417   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_ROLE_SWITCH, "TEST"));
418   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_ROLE_SWITCH_POLICY, "TEST"));
419   EXPECT_FALSE(interop_match_name(INTEROP_HFP_1_7_DENYLIST, "TEST"));
420   EXPECT_FALSE(interop_match_name(INTEROP_ADV_PBAP_VER_1_1, "TEST"));
421   EXPECT_FALSE(interop_match_name(INTEROP_UPDATE_HID_SSR_MAX_LAT, "TEST"));
422   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_AVDTP_RECONFIGURE, "TEST"));
423   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_HF_INDICATOR, "TEST"));
424   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_LE_CONN_UPDATES, "TEST"));
425   EXPECT_FALSE(interop_match_name(INTEROP_DELAY_SCO_FOR_MT_CALL, "TEST"));
426   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_CODEC_NEGOTIATION, "TEST"));
427   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_PLAYER_APPLICATION_SETTING_CMDS, "TEST"));
428   EXPECT_FALSE(interop_match_name(INTEROP_ENABLE_AAC_CODEC, "TEST"));
429   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_CONNECTION_AFTER_COLLISION, "TEST"));
430   EXPECT_FALSE(interop_match_name(INTEROP_AVRCP_BROWSE_OPEN_CHANNEL_COLLISION, "TEST"));
431   EXPECT_FALSE(interop_match_name(INTEROP_ADV_PBAP_VER_1_2, "TEST"));
432   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_PCE_SDP_AFTER_PAIRING, "TEST"));
433   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_SNIFF_LINK_DURING_SCO, "TEST"));
434   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_SNIFF_DURING_CALL, "TEST"));
435   EXPECT_FALSE(interop_match_name(INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL, "TEST"));
436   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_REFRESH_ACCEPT_SIG_TIMER, "TEST"));
437   EXPECT_FALSE(interop_match_name(INTEROP_SKIP_INCOMING_STATE, "TEST"));
438   EXPECT_FALSE(interop_match_name(INTEROP_NOT_UPDATE_AVRCP_PAUSED_TO_REMOTE, "TEST"));
439   EXPECT_FALSE(
440           interop_match_name(INTEROP_PHONE_POLICY_INCREASED_DELAY_CONNECT_OTHER_PROFILES, "TEST"));
441   EXPECT_FALSE(
442           interop_match_name(INTEROP_PHONE_POLICY_REDUCED_DELAY_CONNECT_OTHER_PROFILES, "TEST"));
443   EXPECT_FALSE(interop_match_name(INTEROP_HFP_FAKE_INCOMING_CALL_INDICATOR, "TEST"));
444   EXPECT_FALSE(interop_match_name(INTEROP_HFP_SEND_CALL_INDICATORS_BACK_TO_BACK, "TEST"));
445   EXPECT_FALSE(interop_match_name(INTEROP_SETUP_SCO_WITH_NO_DELAY_AFTER_SLC_DURING_CALL, "TEST"));
446   EXPECT_FALSE(interop_match_name(INTEROP_ENABLE_PREFERRED_CONN_PARAMETER, "TEST"));
447   EXPECT_FALSE(interop_match_name(INTEROP_RETRY_SCO_AFTER_REMOTE_REJECT_SCO, "TEST"));
448   EXPECT_FALSE(interop_match_name(INTEROP_DELAY_SCO_FOR_MO_CALL, "TEST"));
449   EXPECT_FALSE(interop_match_name(INTEROP_CHANGE_HID_VID_PID, "TEST"));
450   EXPECT_FALSE(interop_match_name(INTEROP_HFP_1_8_DENYLIST, "TEST"));
451   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_ROLE_SWITCH_DURING_CONNECTION, "TEST"));
452   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_NAME_REQUEST, "TEST"));
453   EXPECT_FALSE(interop_match_name(INTEROP_AVRCP_1_4_ONLY, "TEST"));
454   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_SNIFF, "TEST"));
455   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_AVDTP_SUSPEND, "TEST"));
456   EXPECT_FALSE(interop_match_name(INTEROP_SLC_SKIP_BIND_COMMAND, "TEST"));
457   EXPECT_FALSE(interop_match_name(INTEROP_AVRCP_1_3_ONLY, "TEST"));
458 
459   module_clean_up(&interop_module);
460 }
461 
TEST_F(InteropTest,test_range_hit)462 TEST_F(InteropTest, test_range_hit) {
463   module_init(&interop_module);
464 
465   RawAddress test_address;
466   RawAddress::FromString("00:0f:59:50:00:00", test_address);
467   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_ABSOLUTE_VOLUME, &test_address));
468   RawAddress::FromString("00:0f:59:59:12:34", test_address);
469   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_ABSOLUTE_VOLUME, &test_address));
470   RawAddress::FromString("00:0f:59:6f:ff:ff", test_address);
471   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_ABSOLUTE_VOLUME, &test_address));
472 
473   module_clean_up(&interop_module);
474 }
475 
TEST_F(InteropTest,test_range_miss)476 TEST_F(InteropTest, test_range_miss) {
477   module_init(&interop_module);
478 
479   RawAddress test_address;
480   RawAddress::FromString("00:0f:59:49:12:34", test_address);
481   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_ABSOLUTE_VOLUME, &test_address));
482   RawAddress::FromString("00:0f:59:70:12:34", test_address);
483   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_ABSOLUTE_VOLUME, &test_address));
484 
485   module_clean_up(&interop_module);
486 }
487 
TEST_F(InteropTest,test_vndr_prdt_hit)488 TEST_F(InteropTest, test_vndr_prdt_hit) {
489   module_init(&interop_module);
490 
491   uint16_t vendor_id = 0x22b8;
492   uint16_t product_id = 0x093D;
493 
494   EXPECT_TRUE(interop_database_match_vndr_prdt(INTEROP_REMOVE_HID_DIG_DESCRIPTOR, vendor_id,
495                                                product_id));
496 
497   vendor_id = 0x05ac;
498   product_id = 0x0255;
499 
500   EXPECT_TRUE(interop_database_match_vndr_prdt(INTEROP_CHANGE_HID_VID_PID, vendor_id, product_id));
501 
502   module_clean_up(&interop_module);
503 }
504 
TEST_F(InteropTest,test_vndr_prdt_miss)505 TEST_F(InteropTest, test_vndr_prdt_miss) {
506   module_init(&interop_module);
507 
508   uint16_t vendor_id = 0x22b9;
509   uint16_t product_id = 0x093D;
510 
511   EXPECT_FALSE(interop_database_match_vndr_prdt(INTEROP_REMOVE_HID_DIG_DESCRIPTOR, vendor_id,
512                                                 product_id));
513 
514   module_clean_up(&interop_module);
515 }
516 
TEST_F(InteropTest,test_manufacturer_hit)517 TEST_F(InteropTest, test_manufacturer_hit) {
518   module_init(&interop_module);
519 
520   uint16_t manufacturer = 0x004C;
521 
522   EXPECT_TRUE(interop_database_match_manufacturer(INTEROP_DISABLE_SNIFF_DURING_SCO, manufacturer));
523 
524   module_clean_up(&interop_module);
525 }
526 
TEST_F(InteropTest,test_manufacturer_miss)527 TEST_F(InteropTest, test_manufacturer_miss) {
528   module_init(&interop_module);
529 
530   uint16_t manufacturer = 0x004D;
531 
532   EXPECT_FALSE(interop_database_match_manufacturer(INTEROP_DISABLE_SNIFF_DURING_SCO, manufacturer));
533 
534   module_clean_up(&interop_module);
535 }
536 
TEST_F(InteropTest,test_ssr_max_latency_hit)537 TEST_F(InteropTest, test_ssr_max_latency_hit) {
538   module_init(&interop_module);
539 
540   RawAddress test_address;
541   RawAddress::FromString("00:1b:dc:70:12:34", test_address);
542   uint16_t max_lat = 0;
543 
544   EXPECT_TRUE(interop_database_match_addr_get_max_lat(INTEROP_UPDATE_HID_SSR_MAX_LAT, &test_address,
545                                                       &max_lat));
546   EXPECT_EQ(0x0012, max_lat);
547 
548   module_clean_up(&interop_module);
549 }
550 
TEST_F(InteropTest,test_ssr_max_latency_miss)551 TEST_F(InteropTest, test_ssr_max_latency_miss) {
552   module_init(&interop_module);
553 
554   RawAddress test_address;
555   RawAddress::FromString("00:1b:db:70:12:34", test_address);
556   uint16_t max_lat = 0;
557 
558   EXPECT_FALSE(interop_database_match_addr_get_max_lat(INTEROP_UPDATE_HID_SSR_MAX_LAT,
559                                                        &test_address, &max_lat));
560 
561   module_clean_up(&interop_module);
562 }
563 
TEST_F(InteropTest,test_dynamic_addr)564 TEST_F(InteropTest, test_dynamic_addr) {
565   module_init(&interop_module);
566 
567   RawAddress test_address;
568 
569   RawAddress::FromString("11:22:33:44:55:66", test_address);
570   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address));
571 
572   interop_database_add_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address, 3);
573   EXPECT_TRUE(interop_match_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address));
574 
575   interop_database_remove_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address);
576   EXPECT_FALSE(interop_match_addr(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, &test_address));
577 
578   module_clean_up(&interop_module);
579 }
580 
TEST_F(InteropTest,test_dynamic_name)581 TEST_F(InteropTest, test_dynamic_name) {
582   module_init(&interop_module);
583 
584   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, "TEST"));
585 
586   interop_database_add_name(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, "TEST");
587   EXPECT_TRUE(interop_match_name(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, "TEST"));
588 
589   interop_database_remove_name(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, "TEST");
590   EXPECT_FALSE(interop_match_name(INTEROP_DISABLE_LE_SECURE_CONNECTIONS, "TEST"));
591 
592   module_clean_up(&interop_module);
593 }
594 
TEST_F(InteropTest,test_dynamic_vndr_prdt)595 TEST_F(InteropTest, test_dynamic_vndr_prdt) {
596   module_init(&interop_module);
597 
598   uint16_t vendor_id = 0x11b8;
599   uint16_t product_id = 0x193D;
600 
601   EXPECT_FALSE(interop_database_match_vndr_prdt(INTEROP_REMOVE_HID_DIG_DESCRIPTOR, vendor_id,
602                                                 product_id));
603 
604   interop_database_add_vndr_prdt(INTEROP_REMOVE_HID_DIG_DESCRIPTOR, vendor_id, product_id);
605   EXPECT_TRUE(interop_database_match_vndr_prdt(INTEROP_REMOVE_HID_DIG_DESCRIPTOR, vendor_id,
606                                                product_id));
607 
608   interop_database_remove_vndr_prdt(INTEROP_REMOVE_HID_DIG_DESCRIPTOR, vendor_id, product_id);
609 
610   EXPECT_FALSE(interop_database_match_vndr_prdt(INTEROP_CHANGE_HID_VID_PID, vendor_id, product_id));
611 
612   module_clean_up(&interop_module);
613 }
614 
TEST_F(InteropTest,test_dynamic_addr_get_ssr_max_lat)615 TEST_F(InteropTest, test_dynamic_addr_get_ssr_max_lat) {
616   module_init(&interop_module);
617 
618   RawAddress test_address;
619   RawAddress::FromString("11:22:33:44:55:66", test_address);
620   uint16_t max_lat = 0;
621 
622   EXPECT_FALSE(interop_database_match_addr_get_max_lat(INTEROP_UPDATE_HID_SSR_MAX_LAT,
623                                                        &test_address, &max_lat));
624   interop_database_add_addr_max_lat(INTEROP_UPDATE_HID_SSR_MAX_LAT, &test_address, 0x0012);
625 
626   interop_database_match_addr_get_max_lat(INTEROP_UPDATE_HID_SSR_MAX_LAT, &test_address, &max_lat);
627   EXPECT_EQ(0x0012, max_lat);
628 
629   interop_database_remove_addr_max_lat(INTEROP_UPDATE_HID_SSR_MAX_LAT, &test_address, 0x0012);
630 
631   max_lat = 0;
632   EXPECT_FALSE(interop_database_match_addr_get_max_lat(INTEROP_UPDATE_HID_SSR_MAX_LAT,
633                                                        &test_address, &max_lat));
634 
635   EXPECT_NE(0x0012, max_lat);
636 
637   module_clean_up(&interop_module);
638 }
639 
TEST_F(InteropTest,test_dynamic_manufacturer)640 TEST_F(InteropTest, test_dynamic_manufacturer) {
641   module_init(&interop_module);
642 
643   uint16_t manufacturer = 0xFFFF;
644 
645   EXPECT_FALSE(interop_database_match_manufacturer(INTEROP_DISABLE_SNIFF_DURING_SCO, manufacturer));
646 
647   interop_database_add_manufacturer(INTEROP_DISABLE_SNIFF_DURING_SCO, manufacturer);
648 
649   EXPECT_TRUE(interop_database_match_manufacturer(INTEROP_DISABLE_SNIFF_DURING_SCO, manufacturer));
650 
651   interop_database_remove_manufacturer(INTEROP_DISABLE_SNIFF_DURING_SCO, manufacturer);
652 
653   EXPECT_FALSE(interop_database_match_manufacturer(INTEROP_DISABLE_SNIFF_DURING_SCO, manufacturer));
654 
655   module_clean_up(&interop_module);
656 }
657 
TEST_F(InteropTest,test_dynamic_addr_get_lmp_version)658 TEST_F(InteropTest, test_dynamic_addr_get_lmp_version) {
659   module_init(&interop_module);
660 
661   RawAddress test_address;
662   RawAddress::FromString("11:22:33:44:55:66", test_address);
663   uint8_t lmp_version = 0;
664   uint16_t lmp_sub_version = 0;
665 
666   EXPECT_FALSE(interop_database_match_addr_get_lmp_ver(
667           INTEROP_DISABLE_SNIFF_DURING_SCO, &test_address, &lmp_version, &lmp_sub_version));
668   interop_database_add_addr_lmp_version(INTEROP_DISABLE_SNIFF_DURING_SCO, &test_address, 0xFF,
669                                         0xFFFF);
670 
671   EXPECT_TRUE(interop_database_match_addr_get_lmp_ver(
672           INTEROP_DISABLE_SNIFF_DURING_SCO, &test_address, &lmp_version, &lmp_sub_version));
673 
674   EXPECT_TRUE(lmp_version == 0xFF && lmp_sub_version == 0xFFFF);
675 
676   interop_database_remove_addr_lmp_version(INTEROP_DISABLE_SNIFF_DURING_SCO, &test_address, 0xFF,
677                                            0xFFFF);
678 
679   lmp_version = 0;
680   lmp_sub_version = 0;
681 
682   EXPECT_FALSE(interop_database_match_addr_get_lmp_ver(
683           INTEROP_DISABLE_SNIFF_DURING_SCO, &test_address, &lmp_version, &lmp_sub_version));
684 
685   EXPECT_FALSE(lmp_version == 0xFF && lmp_sub_version == 0xFFFF);
686 
687   module_clean_up(&interop_module);
688 }
689 
TEST_F(InteropTest,test_dynamic_did_version)690 TEST_F(InteropTest, test_dynamic_did_version) {
691   module_init(&interop_module);
692 
693   RawAddress test_address;
694   RawAddress::FromString("11:22:33:44:55:66", test_address);
695   uint16_t did_version = 0xABCD;
696 
697   EXPECT_FALSE(interop_database_match_version(INTEROP_DISABLE_SNIFF_DURING_SCO, did_version));
698   interop_database_add_version(INTEROP_DISABLE_SNIFF_DURING_SCO, did_version);
699 
700   EXPECT_TRUE(interop_database_match_version(INTEROP_DISABLE_SNIFF_DURING_SCO, did_version));
701 
702   interop_database_remove_version(INTEROP_DISABLE_SNIFF_DURING_SCO, did_version);
703 
704   EXPECT_FALSE(interop_database_match_version(INTEROP_DISABLE_SNIFF_DURING_SCO, did_version));
705 
706   module_clean_up(&interop_module);
707 }
708