blob: af1f3d1ea3274eb1524c263b2114fe8fdc18fd95 [file] [log] [blame]
/******************************************************************************
*
* Copyright 2021 The Android Open Source Project
*
* 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:
*
* http://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 <gtest/gtest.h>
#include "bta/sdp/bta_sdp_act.cc"
#include "stack/sdp/sdp_api.cc"
#include "types/bluetooth/uuid.h"
#include "types/raw_address.h"
namespace {
const RawAddress bdaddr({0x11, 0x22, 0x33, 0x44, 0x55, 0x66});
} // namespace
extern tBTA_SDP_CB bta_sdp_cb;
extern tBTA_SDP_CFG* p_bta_sdp_cfg;
static tSDP_DISC_ATTR g_attr_service_class_id_list;
static tSDP_DISC_ATTR g_sub_attr;
static tSDP_DISC_ATTR g_attr_spec_id;
static tSDP_DISC_ATTR g_attr_vendor_id;
static tSDP_DISC_ATTR g_attr_vendor_id_src;
static tSDP_DISC_ATTR g_attr_vendor_product_id;
static tSDP_DISC_ATTR g_attr_vendor_product_version;
static tSDP_DISC_ATTR g_attr_vendor_product_primary_record;
static tSDP_DISC_REC g_rec;
bool sdpu_compare_uuid_with_attr(const Uuid& uuid, tSDP_DISC_ATTR* p_attr) {
return true;
}
static void sdp_dm_cback(tBTA_SDP_EVT event, tBTA_SDP* p_data,
void* user_data) {
return;
}
class BtaDipTest : public ::testing::Test {
protected:
void SetUp() override {
g_attr_service_class_id_list.p_next_attr = &g_attr_spec_id;
g_attr_service_class_id_list.attr_id = ATTR_ID_SERVICE_CLASS_ID_LIST;
g_attr_service_class_id_list.attr_len_type = (DATA_ELE_SEQ_DESC_TYPE<<12)|2;
g_attr_service_class_id_list.attr_value.v.p_sub_attr = &g_sub_attr;
g_sub_attr.attr_len_type = (UUID_DESC_TYPE<<12)|2;
g_sub_attr.attr_value.v.u16 = 0x1200;
g_attr_spec_id.p_next_attr = &g_attr_vendor_id;
g_attr_spec_id.attr_id = ATTR_ID_SPECIFICATION_ID;
g_attr_spec_id.attr_len_type = (UINT_DESC_TYPE<<12)|2;
g_attr_spec_id.attr_value.v.u16 = 0x0103;
g_attr_vendor_id.p_next_attr = &g_attr_vendor_id_src;
g_attr_vendor_id.attr_id = ATTR_ID_VENDOR_ID;
g_attr_vendor_id.attr_len_type = (UINT_DESC_TYPE<<12)|2;
g_attr_vendor_id.attr_value.v.u16 = 0x18d1;
// Allocation should succeed
g_attr_vendor_id_src.p_next_attr = &g_attr_vendor_product_id;
g_attr_vendor_id_src.attr_id = ATTR_ID_VENDOR_ID_SOURCE;
g_attr_vendor_id_src.attr_len_type = (UINT_DESC_TYPE<<12)|2;
g_attr_vendor_id_src.attr_value.v.u16 = 1;
g_attr_vendor_product_id.p_next_attr = &g_attr_vendor_product_version;
g_attr_vendor_product_id.attr_id = ATTR_ID_PRODUCT_ID;
g_attr_vendor_product_id.attr_len_type = (UINT_DESC_TYPE<<12)|2;
g_attr_vendor_product_id.attr_value.v.u16 = 0x1234;
g_attr_vendor_product_version.p_next_attr = &g_attr_vendor_product_primary_record;
g_attr_vendor_product_version.attr_id = ATTR_ID_PRODUCT_VERSION;
g_attr_vendor_product_version.attr_len_type = (UINT_DESC_TYPE<<12)|2;
g_attr_vendor_product_version.attr_value.v.u16 = 0x0100;
g_attr_vendor_product_primary_record.p_next_attr = &g_attr_vendor_product_primary_record;
g_attr_vendor_product_primary_record.attr_id = ATTR_ID_PRIMARY_RECORD;
g_attr_vendor_product_primary_record.attr_len_type = (BOOLEAN_DESC_TYPE<<12);
g_attr_vendor_product_primary_record.attr_value.v.u8 = 1;
g_rec.p_first_attr = &g_attr_service_class_id_list;
g_rec.p_next_rec = nullptr;
g_rec.remote_bd_addr = bdaddr;
g_rec.time_read = 0;
bta_sdp_cb.p_dm_cback = sdp_dm_cback;
bta_sdp_cb.remote_addr = bdaddr;
p_bta_sdp_cfg->p_sdp_db->p_first_rec = &g_rec;
}
void TearDown() override {}
};
// Test that bta_create_dip_sdp_record can parse sdp record to bluetooth_sdp_record correctly
TEST_F(BtaDipTest, test_bta_create_dip_sdp_record) {
bluetooth_sdp_record record;
bta_create_dip_sdp_record(&record, &g_rec);
ASSERT_EQ(record.dip.spec_id, 0x0103);
ASSERT_EQ(record.dip.vendor, 0x18d1);
ASSERT_EQ(record.dip.vendor_id_source, 1);
ASSERT_EQ(record.dip.product, 0x1234);
ASSERT_EQ(record.dip.version, 0x0100);
ASSERT_EQ(record.dip.primary_record, true);
}
TEST_F(BtaDipTest, test_bta_sdp_search_cback) {
Uuid* userdata = (Uuid*)malloc(sizeof(Uuid));
memcpy(userdata, &UUID_DIP, sizeof(UUID_DIP));
bta_sdp_search_cback(SDP_SUCCESS, userdata);
}