From: Bastien Nocera <hadess@hadess.net>
To: linux-bluetooth@vger.kernel.org
Subject: [BlueZ, v1] unit: Add test for sdp_xml_parse_record()
Date: Wed, 5 Aug 2026 15:52:20 +0200 [thread overview]
Message-ID: <20260805135228.2653665-1-hadess@hadess.net> (raw)
This adds 2 example XML files from other repositories, under a fair use
license exception.
---
Makefile.am | 10 ++
unit/sdp-xml/Bluetooth_HID-sdp_record.xml | 123 ++++++++++++++++++++++
unit/sdp-xml/qt-SerialPortSDPRecord.xml | 57 ++++++++++
unit/test-sdp-xml.c | 69 ++++++++++++
4 files changed, 259 insertions(+)
create mode 100644 unit/sdp-xml/Bluetooth_HID-sdp_record.xml
create mode 100644 unit/sdp-xml/qt-SerialPortSDPRecord.xml
create mode 100644 unit/test-sdp-xml.c
diff --git a/Makefile.am b/Makefile.am
index 19c468d3a504..1c62ee66bdce 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -637,6 +637,16 @@ unit_test_sdp_SOURCES = unit/test-sdp.c \
unit_test_sdp_LDADD = lib/libbluetooth-internal.la \
src/libshared-glib.la $(GLIB_LIBS)
+unit_tests += unit/test-sdp-xml
+
+unit_test_sdp_xml_SOURCES = unit/test-sdp-xml.c \
+ src/sdp-xml.c src/sdp-xml.h \
+ src/log.h src/log.c
+unit_test_sdp_xml_LDADD = lib/libbluetooth-internal.la \
+ src/libshared-glib.la $(GLIB_LIBS)
+unit_test_sdp_xml_CFLAGS = $(AM_CFLAGS) $(GLIB_CFLAGS) -DTOP_SRCDIR=\""$(srcdir)"\"
+unit_test_sdp_xml_CPPFLAGS = -I$(srcdir)/lib
+
unit_tests += unit/test-avdtp
unit_test_avdtp_SOURCES = unit/test-avdtp.c \
diff --git a/unit/sdp-xml/Bluetooth_HID-sdp_record.xml b/unit/sdp-xml/Bluetooth_HID-sdp_record.xml
new file mode 100644
index 000000000000..687b0b15b520
--- /dev/null
+++ b/unit/sdp-xml/Bluetooth_HID-sdp_record.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!--
+
+ From: https://github.com/AnesBenmerzoug/Bluetooth_HID/blob/master/sdp_record.xml
+ A description of these fields can be found in the following links:
+ http://www.bluecove.org/bluecove/apidocs/javax/bluetooth/ServiceRecord.html
+ https://www.bluetooth.com/specifications/assigned-numbers/service-discovery
+
+ -->
+
+<record>
+ <attribute id="0x0001"> <!-- Service Class ID List -->
+ <sequence>
+ <uuid value="0x1124" /> <!-- Human Interface Device -->
+ </sequence>
+ </attribute>
+ <attribute id="0x0004"> <!-- Protocol Descriptor List -->
+ <sequence>
+ <sequence>
+ <uuid value="0x0100" /> <!-- L2CAP -->
+ <uint16 value="0x0011" /> <!-- HIDP -->
+ </sequence>
+ <sequence>
+ <uuid value="0x0011" /> <!-- HIDP -->
+ </sequence>
+ </sequence>
+ </attribute>
+ <attribute id="0x0005"> <!-- Browse Group List -->
+ <sequence>
+ <uuid value="0x1002" />
+ </sequence>
+ </attribute>
+ <attribute id="0x0006"> <!-- Language Based Attribute ID List -->
+ <sequence>
+ <uint16 value="0x656e" /> <!-- code_ISO639 -->
+ <uint16 value="0x006a" /> <!-- encoding -->
+ <uint16 value="0x0100" /> <!-- base_offset -->
+ </sequence>
+ </attribute>
+ <attribute id="0x0009"> <!-- Bluetooth Profile Descriptor List -->
+ <sequence>
+ <sequence>
+ <uuid value="0x1124" /> <!-- Human Interface Device -->
+ <uint16 value="0x0100" /> <!-- L2CAP -->
+ </sequence>
+ </sequence>
+ </attribute>
+ <attribute id="0x000d"> <!-- Additional Protocol Descriptor Lists -->
+ <sequence>
+ <sequence>
+ <sequence>
+ <uuid value="0x0100" /> <!-- L2CAP -->
+ <uint16 value="0x0013" />
+ </sequence>
+ <sequence>
+ <uuid value="0x0011" /> <!-- HIDP -->
+ </sequence>
+ </sequence>
+ </sequence>
+ </attribute>
+ <attribute id="0x0100">
+ <text value="Bluetooth_Keyboard/Mouse" />
+ </attribute>
+ <attribute id="0x0101">
+ <text value="USB > BT Keyboard/Mouse" />
+ </attribute>
+ <attribute id="0x0102">
+ <text value="Raspberry Pi 3" />
+ </attribute>
+ <attribute id="0x0200">
+ <uint16 value="0x0100" />
+ </attribute>
+ <attribute id="0x0201">
+ <uint16 value="0x0111" />
+ </attribute>
+ <attribute id="0x0202">
+ <uint8 value="0x40" />
+ </attribute>
+ <attribute id="0x0203">
+ <uint8 value="0x00" />
+ </attribute>
+ <attribute id="0x0204">
+ <boolean value="false" />
+ </attribute>
+ <attribute id="0x0205">
+ <boolean value="false" />
+ </attribute>
+ <attribute id="0x0206">
+ <sequence>
+ <sequence>
+ <uint8 value="0x22" />
+ <text encoding="hex" value="05010906A1018501A100050719E029E71500250175019508810295017508810195087508150025650507190029658100C0C005010902A10185020901A1000509190129031500250175019503810275059501810105010930093109381581257F750895038106C0C0"/>
+ </sequence>
+ </sequence>
+ </attribute>
+ <attribute id="0x0207">
+ <sequence>
+ <sequence>
+ <uint16 value="0x0409" />
+ <uint16 value="0x0100" />
+ </sequence>
+ </sequence>
+ </attribute>
+ <attribute id="0x020b">
+ <uint16 value="0x0100" />
+ </attribute>
+ <attribute id="0x020c">
+ <uint16 value="0x0c80" />
+ </attribute>
+ <attribute id="0x020d">
+ <boolean value="true" />
+ </attribute>
+ <attribute id="0x020e">
+ <boolean value="false" />
+ </attribute>
+ <attribute id="0x020f">
+ <uint16 value="0x0640" />
+ </attribute>
+ <attribute id="0x0210">
+ <uint16 value="0x0320" />
+ </attribute>
+</record>
diff --git a/unit/sdp-xml/qt-SerialPortSDPRecord.xml b/unit/sdp-xml/qt-SerialPortSDPRecord.xml
new file mode 100644
index 000000000000..1f62ccf11a41
--- /dev/null
+++ b/unit/sdp-xml/qt-SerialPortSDPRecord.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!--
+ This is an XML file describing an SDP service record for a Serial Port
+ service.
+
+ You can use the linux sdptool command to create a file like this for
+ publishing your Bluetooth services. See the "Creating a Bluetooth service"
+ tutorial for more details.
+
+ From: https://radekp.github.io/qtmoko/api/bluetooth-bluetoothservice-serialportsdprecord-xml.html
+-->
+
+ <record>
+ <attribute id="0x0001">
+ <sequence>
+ <uuid value="0x1101" />
+ </sequence>
+ </attribute>
+ <attribute id="0x0004">
+ <sequence>
+ <sequence>
+ <uuid value="0x0100" />
+ </sequence>
+ <sequence>
+ <uuid value="0x0003" />
+ <uint8 value="0x05" />
+ </sequence>
+ </sequence>
+ </attribute>
+ <attribute id="0x0005">
+ <sequence>
+ <uuid value="0x1002" />
+ </sequence>
+ </attribute>
+ <attribute id="0x0006">
+ <sequence>
+ <uint16 value="0x656e" />
+ <uint16 value="0x006a" />
+ <uint16 value="0x0100" />
+ </sequence>
+ </attribute>
+ <attribute id="0x0009">
+ <sequence>
+ <sequence>
+ <uuid value="0x1101" />
+ <uint16 value="0x0100" />
+ </sequence>
+ </sequence>
+ </attribute>
+ <attribute id="0x0100">
+ <text value="Serial Port" />
+ </attribute>
+ <attribute id="0x0101">
+ <text value="COM Port" />
+ </attribute>
+ </record>
diff --git a/unit/test-sdp-xml.c b/unit/test-sdp-xml.c
new file mode 100644
index 000000000000..bdb10fa5831b
--- /dev/null
+++ b/unit/test-sdp-xml.c
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2026 Intel Corporation. All rights reserved.
+ *
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+
+#include "bluetooth/sdp.h"
+#include "bluetooth/sdp_lib.h"
+
+#include "src/shared/util.h"
+#include "src/shared/tester.h"
+#include "src/log.h"
+#include "src/sdp-xml.h"
+
+static void parse_xml(gconstpointer data, gsize len)
+{
+ sdp_record_t *rec = NULL;
+
+ rec = sdp_xml_parse_record(data, len);
+ if (rec) {
+ tester_test_passed();
+ sdp_record_free(rec);
+ } else {
+ tester_test_failed();
+ }
+}
+
+static void parse_xml_for_filename(gconstpointer data)
+{
+ const char *filename = (const char *) data;
+ char *path = NULL;
+ GError *error = NULL;
+ char *contents = NULL;
+ gsize len;
+
+ path = g_build_filename(TOP_SRCDIR, "unit", "sdp-xml", filename, NULL);
+ if (!g_file_get_contents(path, &contents, &len, &error)) {
+ g_warning("Can't load file '%s': %s", path, error->message);
+ g_free(path);
+ g_error_free(error);
+ tester_test_failed();
+ }
+ parse_xml(contents, len);
+ g_free(contents);
+ g_free(path);
+}
+
+#define DEFINE_TEST(fname) \
+ tester_add("/" fname, fname, NULL, parse_xml_for_filename, NULL);
+
+int main(int argc, char *argv[])
+{
+ tester_init(&argc, &argv);
+
+ DEFINE_TEST("Bluetooth_HID-sdp_record.xml");
+ DEFINE_TEST("qt-SerialPortSDPRecord.xml");
+
+ return tester_run();
+}
--
2.55.0
next reply other threads:[~2026-08-05 14:12 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-05 13:52 Bastien Nocera [this message]
2026-08-05 16:17 ` [BlueZ,v1] unit: Add test for sdp_xml_parse_record() bluez.test.bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260805135228.2653665-1-hadess@hadess.net \
--to=hadess@hadess.net \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).