2021-09-07 11:36:58

by Kiran K

[permalink] [raw]
Subject: [PATCH v2 1/3] tools/sco-tester: add test cases to get offload codecs

Add a test case to query offload codecs supported over sco
---

Notes:
changes in v2:
- Fix unused variables

lib/bluetooth.h | 18 +++++++++++
tools/sco-tester.c | 76 ++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 91 insertions(+), 3 deletions(-)

diff --git a/lib/bluetooth.h b/lib/bluetooth.h
index 9ab033ec41a4..0fcf412c6c6b 100644
--- a/lib/bluetooth.h
+++ b/lib/bluetooth.h
@@ -140,6 +140,24 @@ struct bt_voice {

#define BT_SCM_PKT_STATUS 0x03

+#define BT_CODEC 19
+struct bt_codec {
+ uint8_t id;
+ uint16_t cid;
+ uint16_t vid;
+ uint8_t data_path_id;
+ uint8_t num_caps;
+ struct codec_caps {
+ uint8_t len;
+ uint8_t data[];
+ } caps[];
+} __attribute__((packed));
+
+struct bt_codecs {
+ uint8_t num_codecs;
+ struct bt_codec codecs[];
+} __attribute__((packed));
+
/* Connection and socket states */
enum {
BT_CONNECTED = 1, /* Equal to TCP_ESTABLISHED to make net code happy */
diff --git a/tools/sco-tester.c b/tools/sco-tester.c
index 2b8dc0d4a8f8..0c4d9d76e4df 100644
--- a/tools/sco-tester.c
+++ b/tools/sco-tester.c
@@ -38,6 +38,7 @@ struct test_data {
enum hciemu_type hciemu_type;
unsigned int io_id;
bool disable_esco;
+ bool enable_codecs;
};

struct sco_client_data {
@@ -124,6 +125,18 @@ static void index_removed_callback(uint16_t index, uint16_t length,
tester_post_teardown_complete();
}

+static void enable_codec_callback(uint8_t status, uint16_t length,
+ const void *param, void *user_data)
+{
+ if (status != MGMT_STATUS_SUCCESS) {
+ tester_warn("Failed to enable codecs");
+ tester_setup_failed();
+ return;
+ }
+
+ tester_print("Enabled codecs");
+}
+
static void read_index_list_callback(uint8_t status, uint16_t length,
const void *param, void *user_data)
{
@@ -202,7 +215,7 @@ static void test_data_free(void *test_data)
free(data);
}

-#define test_sco_full(name, data, setup, func, _disable_esco) \
+#define test_sco_full(name, data, setup, func, _disable_esco, _enable_codecs) \
do { \
struct test_data *user; \
user = malloc(sizeof(struct test_data)); \
@@ -212,16 +225,20 @@ static void test_data_free(void *test_data)
user->io_id = 0; \
user->test_data = data; \
user->disable_esco = _disable_esco; \
+ user->enable_codecs = _enable_codecs; \
tester_add_full(name, data, \
test_pre_setup, setup, func, NULL, \
test_post_teardown, 2, user, test_data_free); \
} while (0)

#define test_sco(name, data, setup, func) \
- test_sco_full(name, data, setup, func, false)
+ test_sco_full(name, data, setup, func, false, false)

#define test_sco_11(name, data, setup, func) \
- test_sco_full(name, data, setup, func, true)
+ test_sco_full(name, data, setup, func, true, false)
+
+#define test_offload_sco(name, data, setup, func) \
+ test_sco_full(name, data, setup, func, false, true)

static const struct sco_client_data connect_success = {
.expect_err = 0
@@ -281,6 +298,25 @@ static void setup_powered(const void *test_data)
mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
sizeof(param), param, NULL, NULL, NULL);

+ if (data->enable_codecs) {
+ /* a6695ace-ee7f-4fb9-881a-5fac66c629af */
+ static const uint8_t uuid[16] = {
+ 0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, 0x1a, 0x88,
+ 0xb9, 0x4f, 0x7f, 0xee, 0xce, 0x5a, 0x69, 0xa6,
+ };
+
+ struct mgmt_cp_set_exp_feature cp;
+
+ memset(&cp, 0, sizeof(cp));
+ memcpy(cp.uuid, uuid, 16);
+ cp.action = 1;
+
+ tester_print("Enabling codecs");
+
+ mgmt_send(data->mgmt, MGMT_OP_SET_EXP_FEATURE, data->mgmt_index,
+ sizeof(cp), &cp, enable_codec_callback, NULL, NULL);
+ }
+
mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
sizeof(param), param,
setup_powered_callback, NULL, NULL);
@@ -308,6 +344,37 @@ static void test_socket(const void *test_data)
tester_test_passed();
}

+static void test_codecs_getsockopt(const void *test_data)
+{
+ int sk, err;
+ socklen_t len;
+ char buffer[255];
+
+ sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO);
+ if (sk < 0) {
+ tester_warn("Can't create socket: %s (%d)", strerror(errno),
+ errno);
+ tester_test_failed();
+ return;
+ }
+
+ len = sizeof(buffer);
+ memset(buffer, 0, len);
+
+ err = getsockopt(sk, SOL_BLUETOOTH, BT_CODEC, buffer, &len);
+ if (err < 0) {
+ tester_warn("Can't get socket option : %s (%d)",
+ strerror(errno), errno);
+ tester_test_failed();
+ goto end;
+ }
+
+ tester_test_passed();
+
+end:
+ close(sk);
+}
+
static void test_getsockopt(const void *test_data)
{
int sk, err;
@@ -599,5 +666,8 @@ int main(int argc, char *argv[])
test_sco_11("SCO mSBC 1.1 - Failure", &connect_failure, setup_powered,
test_connect_transp);

+ test_offload_sco("Basic SCO Get Socket Option - Offload - Success",
+ NULL, setup_powered, test_codecs_getsockopt);
+
return tester_run();
}
--
2.17.1


2021-09-07 11:37:21

by Kiran K

[permalink] [raw]
Subject: [PATCH v2 3/3] tools/sco-tester: add a test case for offload SCO connect

Add a test case for offload SCO connect with codec type set to mSBC
---

Notes:
* changes in v2:
- No change

tools/sco-tester.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)

diff --git a/tools/sco-tester.c b/tools/sco-tester.c
index 67ea4769ef2b..b341fa49f792 100644
--- a/tools/sco-tester.c
+++ b/tools/sco-tester.c
@@ -675,6 +675,52 @@ end:
close(sk);
}

+static void test_connect_offload_msbc(const void *test_data)
+{
+ struct test_data *data = tester_get_data();
+ const struct sco_client_data *scodata = data->test_data;
+ int sk, err;
+ int len;
+ char buffer[255];
+ struct bt_codecs *codecs;
+
+ sk = create_sco_sock(data);
+ if (sk < 0) {
+ tester_test_failed();
+ return;
+ }
+
+ len = sizeof(buffer);
+ memset(buffer, 0, len);
+
+ codecs = (void *)buffer;
+
+ codecs->codecs[0].id = 0x05;
+ codecs->num_codecs = 1;
+ codecs->codecs[0].data_path_id = 1;
+ codecs->codecs[0].num_caps = 0x00;
+
+ err = setsockopt(sk, SOL_BLUETOOTH, BT_CODEC, codecs, sizeof(buffer));
+ if (err < 0) {
+ tester_warn("Can't set socket option : %s (%d)",
+ strerror(errno), errno);
+ tester_test_failed();
+ goto end;
+ }
+ err = connect_sco_sock(data, sk);
+
+ tester_warn("Connect returned %s (%d), expected %s (%d)",
+ strerror(-err), -err,
+ strerror(scodata->expect_err), scodata->expect_err);
+
+ if (-err != scodata->expect_err)
+ tester_test_failed();
+ else
+ tester_test_passed();
+
+end:
+ close(sk);
+}
int main(int argc, char *argv[])
{
tester_init(&argc, &argv);
@@ -709,5 +755,8 @@ int main(int argc, char *argv[])
test_offload_sco("Basic SCO Set Socket Option - Offload - Success",
NULL, setup_powered, test_codecs_setsockopt);

+ test_offload_sco("eSCO mSBC - Offload - Success",
+ &connect_success, setup_powered, test_connect_offload_msbc);
+
return tester_run();
}
--
2.17.1

2021-09-07 11:58:25

by bluez.test.bot

[permalink] [raw]
Subject: RE: [v2,1/3] tools/sco-tester: add test cases to get offload codecs

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=543085

---Test result---

Test Summary:
CheckPatch FAIL 0.72 seconds
GitLint PASS 0.31 seconds
Prep - Setup ELL PASS 41.19 seconds
Build - Prep PASS 0.09 seconds
Build - Configure PASS 7.12 seconds
Build - Make PASS 178.50 seconds
Make Check PASS 8.98 seconds
Make Distcheck PASS 219.84 seconds
Build w/ext ELL - Configure PASS 7.29 seconds
Build w/ext ELL - Make PASS 166.16 seconds

Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script with rule in .checkpatch.conf
Output:
tools/sco-tester: add test cases to get offload codecs
WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#27: FILE: lib/bluetooth.h:154:
+} __attribute__((packed));

WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#32: FILE: lib/bluetooth.h:159:
+} __attribute__((packed));

- total: 0 errors, 2 warnings, 149 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.

"[PATCH] tools/sco-tester: add test cases to get offload codecs" has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.


##############################
Test: GitLint - PASS
Desc: Run gitlint with rule in .gitlint

##############################
Test: Prep - Setup ELL - PASS
Desc: Clone, build, and install ELL

##############################
Test: Build - Prep - PASS
Desc: Prepare environment for build

##############################
Test: Build - Configure - PASS
Desc: Configure the BlueZ source tree

##############################
Test: Build - Make - PASS
Desc: Build the BlueZ source tree

##############################
Test: Make Check - PASS
Desc: Run 'make check'

##############################
Test: Make Distcheck - PASS
Desc: Run distcheck to check the distribution

##############################
Test: Build w/ext ELL - Configure - PASS
Desc: Configure BlueZ source with '--enable-external-ell' configuration

##############################
Test: Build w/ext ELL - Make - PASS
Desc: Build BlueZ source with '--enable-external-ell' configuration



---
Regards,
Linux Bluetooth

2021-09-07 22:12:21

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [v2,1/3] tools/sco-tester: add test cases to get offload codecs

Hi Kiran,

On Tue, Sep 7, 2021 at 4:58 AM <[email protected]> wrote:
>
> This is automated email and please do not reply to this email!
>
> Dear submitter,
>
> Thank you for submitting the patches to the linux bluetooth mailing list.
> This is a CI test results with your patch series:
> PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=543085
>
> ---Test result---
>
> Test Summary:
> CheckPatch FAIL 0.72 seconds
> GitLint PASS 0.31 seconds
> Prep - Setup ELL PASS 41.19 seconds
> Build - Prep PASS 0.09 seconds
> Build - Configure PASS 7.12 seconds
> Build - Make PASS 178.50 seconds
> Make Check PASS 8.98 seconds
> Make Distcheck PASS 219.84 seconds
> Build w/ext ELL - Configure PASS 7.29 seconds
> Build w/ext ELL - Make PASS 166.16 seconds
>
> Details
> ##############################
> Test: CheckPatch - FAIL
> Desc: Run checkpatch.pl script with rule in .checkpatch.conf
> Output:
> tools/sco-tester: add test cases to get offload codecs
> WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
> #27: FILE: lib/bluetooth.h:154:
> +} __attribute__((packed));
>
> WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
> #32: FILE: lib/bluetooth.h:159:
> +} __attribute__((packed));
>
> - total: 0 errors, 2 warnings, 149 lines checked
>
> NOTE: For some of the reported defects, checkpatch may be able to
> mechanically convert to the typical style using --fix or --fix-inplace.
>
> "[PATCH] tools/sco-tester: add test cases to get offload codecs" has style problems, please review.
>
> NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO
>
> NOTE: If any of the errors are false positives, please report
> them to the maintainer, see CHECKPATCH in MAINTAINERS.
>
>
> ##############################
> Test: GitLint - PASS
> Desc: Run gitlint with rule in .gitlint
>
> ##############################
> Test: Prep - Setup ELL - PASS
> Desc: Clone, build, and install ELL
>
> ##############################
> Test: Build - Prep - PASS
> Desc: Prepare environment for build
>
> ##############################
> Test: Build - Configure - PASS
> Desc: Configure the BlueZ source tree
>
> ##############################
> Test: Build - Make - PASS
> Desc: Build the BlueZ source tree
>
> ##############################
> Test: Make Check - PASS
> Desc: Run 'make check'
>
> ##############################
> Test: Make Distcheck - PASS
> Desc: Run distcheck to check the distribution
>
> ##############################
> Test: Build w/ext ELL - Configure - PASS
> Desc: Configure BlueZ source with '--enable-external-ell' configuration
>
> ##############################
> Test: Build w/ext ELL - Make - PASS
> Desc: Build BlueZ source with '--enable-external-ell' configuration
>
>
>
> ---
> Regards,
> Linux Bluetooth

Applied, thanks.

--
Luiz Augusto von Dentz