2021-10-08 19:37:40

by Tedd Ho-Jeong An

[permalink] [raw]
Subject: [BlueZ PATCH v3 1/3] doc/tester-config: Enable Runtime Debugging Feature

From: Tedd Ho-Jeong An <[email protected]>

This patch adds CONFIG_BT_FEATURE_DEBUG=y in tester config to enable the
runtime debug option.
---
doc/tester.config | 1 +
1 file changed, 1 insertion(+)

diff --git a/doc/tester.config b/doc/tester.config
index 892fd5eb3..011475661 100644
--- a/doc/tester.config
+++ b/doc/tester.config
@@ -32,6 +32,7 @@ CONFIG_BT_LE=y
CONFIG_BT_HS=y
CONFIG_BT_MSFTEXT=y
CONFIG_BT_AOSPEXT=y
+CONFIG_BT_FEATURE_DEBUG=y

CONFIG_BT_HCIVHCI=y

--
2.25.1


2021-10-08 19:37:40

by Tedd Ho-Jeong An

[permalink] [raw]
Subject: [BlueZ PATCH v3 3/3] tools/mgmt-tester: Add more suspend/resume test cases

From: Tedd Ho-Jeong An <[email protected]>

This patch adds more suspend/resuem test cases like
- Discover -> Suspend
- Discover -> Suspend -> Resume
- Suspend -> Resume -> Suspend -> Resume
---
tools/mgmt-tester.c | 171 ++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 164 insertions(+), 7 deletions(-)

diff --git a/tools/mgmt-tester.c b/tools/mgmt-tester.c
index 84d81c8ca..8bddf6b03 100644
--- a/tools/mgmt-tester.c
+++ b/tools/mgmt-tester.c
@@ -267,6 +267,7 @@ struct generic_data {
uint16_t setup_send_len;
const struct setup_mgmt_cmd *setup_mgmt_cmd_arr;
bool send_index_none;
+ const void *setup_discovery_param;
uint16_t send_opcode;
const void *send_param;
uint16_t send_len;
@@ -7299,6 +7300,11 @@ proceed:
param = privacy_param;
}

+ if (*cmd == MGMT_OP_START_DISCOVERY) {
+ if (test->setup_discovery_param)
+ memcpy(param, test->setup_discovery_param, 1);
+ }
+
if (*cmd == MGMT_OP_SET_LE && test->setup_nobredr) {
unsigned char off[] = { 0x00 };
mgmt_send(data->mgmt, *cmd, data->mgmt_index,
@@ -10671,6 +10677,21 @@ static void trigger_force_suspend(void *user_data)
}
}

+static void trigger_force_resume(void *user_data)
+{
+ bool suspend;
+ int err;
+
+ /* Triggers the suspend */
+ suspend = false;
+ tester_print("Set the system into Resume via force_suspend");
+ err = set_debugfs_force_suspend(0, suspend);
+ if (err) {
+ tester_warn("Unable to disable the force_suspend");
+ return;
+ }
+}
+
static void test_suspend_resume_success_5(const void *test_data)
{
test_pairing_acceptor(test_data);
@@ -10722,6 +10743,113 @@ static void test_suspend_resume_success_7(const void *test_data)
test_command_generic(test_data);
}

+static const struct generic_data suspend_resume_success_8 = {
+ .setup_settings = settings_powered_le,
+ .send_opcode = MGMT_OP_START_DISCOVERY,
+ .send_param = start_discovery_le_param,
+ .send_len = sizeof(start_discovery_le_param),
+ .expect_status = MGMT_STATUS_SUCCESS,
+ .expect_param = start_discovery_le_param,
+ .expect_len = sizeof(start_discovery_le_param),
+ .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
+ .expect_hci_param = start_discovery_valid_ext_scan_enable,
+ .expect_hci_len = sizeof(start_discovery_valid_ext_scan_enable),
+ .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
+ .expect_alt_ev_param = suspend_state_param_disconnect,
+ .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
+};
+
+static void test_suspend_resume_success_8(const void *test_data)
+{
+ test_command_generic(test_data);
+ tester_wait(1, trigger_force_suspend, NULL);
+}
+
+static uint16_t settings_powered_le_discovery[] = { MGMT_OP_SET_LE,
+ MGMT_OP_SET_POWERED,
+ MGMT_OP_START_DISCOVERY,
+ 0 };
+
+static const struct generic_data suspend_resume_success_9 = {
+ .setup_settings = settings_powered_le_discovery,
+ .setup_discovery_param = start_discovery_bredrle_param,
+ .setup_expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
+ .setup_expect_hci_param = stop_discovery_valid_ext_scan_disable,
+ .setup_expect_hci_len = sizeof(stop_discovery_valid_ext_scan_disable),
+ .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
+ .expect_hci_param = start_discovery_valid_ext_scan_enable,
+ .expect_hci_len = sizeof(start_discovery_valid_ext_scan_enable),
+ .expect_alt_ev = MGMT_EV_CONTROLLER_RESUME,
+ .expect_alt_ev_param = resume_state_param_non_bt_wake,
+ .expect_alt_ev_len = sizeof(resume_state_param_non_bt_wake),
+};
+
+static void trigger_force_suspend_9(void *user_data)
+{
+ trigger_force_suspend(user_data);
+}
+
+static void setup_suspend_resume_success_9(const void *test_data)
+{
+ setup_command_generic(test_data);
+ tester_wait(1, trigger_force_suspend_9, NULL);
+}
+
+static void test_suspend_resume_success_9(const void *test_data)
+{
+ test_command_generic(test_data);
+ tester_wait(2, trigger_force_resume, NULL);
+}
+
+static const struct generic_data suspend_resume_success_10 = {
+ .setup_settings = settings_powered_le,
+ .expect_alt_ev = MGMT_EV_CONTROLLER_RESUME,
+ .expect_alt_ev_param = resume_state_param_non_bt_wake,
+ .expect_alt_ev_len = sizeof(resume_state_param_non_bt_wake),
+};
+
+static void resume_event(uint16_t index, uint16_t length,
+ const void *param, void *user_data)
+{
+ struct test_data *data = tester_get_data();
+ const struct mgmt_ev_controller_resume *ev = param;
+
+ mgmt_unregister(data->mgmt, data->mgmt_discov_ev_id);
+
+ if (length != sizeof(*ev)) {
+ tester_warn("Incorrect resume event length");
+ tester_setup_failed();
+ return;
+ }
+
+ tester_print("New Controller Resume event received");
+ test_condition_complete(data);
+ tester_setup_complete();
+}
+
+
+static void setup_suspend_resume_success_10(const void *test_data)
+{
+ struct test_data *data = tester_get_data();
+ unsigned int id;
+
+ tester_print("Registering Controller Resume notification");
+ id = mgmt_register(data->mgmt, MGMT_EV_CONTROLLER_RESUME,
+ data->mgmt_index, resume_event, NULL, NULL);
+ /* Reuse the variable */
+ data->mgmt_discov_ev_id = id;
+ test_add_condition(data);
+
+ tester_wait(1, trigger_force_suspend, NULL);
+ tester_wait(2, trigger_force_resume, NULL);
+}
+
+static void test_suspend_resume_success_10(const void *test_data)
+{
+ test_command_generic(test_data);
+ tester_wait(1, trigger_force_suspend, NULL);
+ tester_wait(2, trigger_force_resume, NULL);
+}

int main(int argc, char *argv[])
{
@@ -12436,7 +12564,7 @@ int main(int argc, char *argv[])
* Run: Enable suspend via force_suspend
* Expect: Receive the Suspend Event
*/
- test_bredrle50("Suspend/Resume - Success 1 (Suspend)",
+ test_bredrle50("Suspend - Success 1",
&suspend_resume_success_1,
NULL, test_suspend_resume_success_1);

@@ -12445,7 +12573,7 @@ int main(int argc, char *argv[])
* Run: Enable suspend, and then resume via force_suspend
* Expect: Receive the Resume Event
*/
- test_bredrle50("Suspend/Resume - Success 2 (Resume)",
+ test_bredrle50("Resume - Success 2",
&suspend_resume_success_2,
NULL, test_suspend_resume_success_2);

@@ -12454,7 +12582,7 @@ int main(int argc, char *argv[])
* Run: Add new device, and enable suspend.
* Expect: Receive the Suspend Event
*/
- test_bredrle50("Suspend/Resume - Success 3 (Device in WL)",
+ test_bredrle50("Suspend - Success 3 (Device in WL)",
&suspend_resume_success_3,
setup_suspend_resume_success_3,
test_suspend_resume_success_3);
@@ -12464,7 +12592,7 @@ int main(int argc, char *argv[])
* Run: Enable suspend
* Expect: Receive the Suspend Event
*/
- test_bredrle50("Suspend/Resume - Success 4 (Advertising)",
+ test_bredrle50("Suspend - Success 4 (Advertising)",
&suspend_resume_success_4,
setup_suspend_resume_success_4,
test_suspend_resume_success_4);
@@ -12474,7 +12602,7 @@ int main(int argc, char *argv[])
* Run: Enable suspend
* Expect: Receive the Suspend Event
*/
- test_bredrle("Suspend/Resume - Success 5 (Pairing - Legacy)",
+ test_bredrle("Suspend - Success 5 (Pairing - Legacy)",
&suspend_resume_success_5, NULL,
test_suspend_resume_success_5);

@@ -12483,7 +12611,7 @@ int main(int argc, char *argv[])
* Run: Enable suspend
* Expect: Receive the Suspend Event
*/
- test_bredrle("Suspend/Resume - Success 6 (Pairing - SSP)",
+ test_bredrle("Suspend - Success 6 (Pairing - SSP)",
&suspend_resume_success_6,
setup_pairing_acceptor,
test_suspend_resume_success_5);
@@ -12493,10 +12621,39 @@ int main(int argc, char *argv[])
* Run: Enable suspend via force_suspend
* Expect: Receive the Suspend Event
*/
- test_bredrle50("Suspend/Resume - Success 7 (Suspend/Force Wakeup)",
+ test_bredrle50("Suspend - Success 7 (Suspend/Force Wakeup)",
&suspend_resume_success_7,
NULL, test_suspend_resume_success_7);

+ /* Suspend/Resume
+ * Setup : Power on
+ * Run: Start discover and enable suspend
+ * Expect: Receive the Suspend Event
+ */
+ test_bredrle50_full("Suspend - Success 8 (Discovery/Suspend)",
+ &suspend_resume_success_8,
+ NULL, test_suspend_resume_success_8, 4);
+
+ /* Suspend/Resume
+ * Setup : Power on, start discovery
+ * Run: Start discover, enable suspend and resume.
+ * Expect: Receive the Resume Event
+ */
+ test_bredrle50_full("Resume - Success 9 (Discovery/Suspend/Resume)",
+ &suspend_resume_success_9,
+ setup_suspend_resume_success_9,
+ test_suspend_resume_success_9, 4);
+
+ /* Suspend/Resume
+ * Setup : Power on
+ * Run: Suspend, Resume, Suspend, and Resume
+ * Expect:
+ */
+ test_bredrle50_full("Resume - Success 10 (Multiple Suspend/Resume)",
+ &suspend_resume_success_10,
+ setup_suspend_resume_success_10,
+ test_suspend_resume_success_10, 6);
+
/* MGMT_OP_READ_EXP_FEATURE
* Read Experimental features - success
*/
--
2.25.1

2021-10-08 19:38:59

by Tedd Ho-Jeong An

[permalink] [raw]
Subject: [BlueZ PATCH v3 2/3] tools/mgmt-tester: Updates Experimental Feature test cases

From: Tedd Ho-Jeong An <[email protected]>

This patch updates/adds test cases for Read and Set Experimental Feature
commands.
---
tools/mgmt-tester.c | 92 +++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 89 insertions(+), 3 deletions(-)

diff --git a/tools/mgmt-tester.c b/tools/mgmt-tester.c
index 1a2aba7fd..84d81c8ca 100644
--- a/tools/mgmt-tester.c
+++ b/tools/mgmt-tester.c
@@ -390,8 +390,8 @@ static void debug_exp_feature(struct test_data *data)
tester_print("Enabling Debug feature");

mgmt_send(data->mgmt, MGMT_OP_SET_EXP_FEATURE, MGMT_INDEX_NONE,
- sizeof(set_exp_feat_param_debug), set_exp_feat_param_debug,
- debug_exp_callback, NULL, NULL);
+ sizeof(set_exp_feat_param_debug), set_exp_feat_param_debug,
+ debug_exp_callback, NULL, NULL);
}

static void read_index_list_callback(uint8_t status, uint16_t length,
@@ -9702,6 +9702,23 @@ static const struct generic_data read_exp_feat_success = {
.expect_len = sizeof(read_exp_feat_param_success),
};

+
+static const uint8_t read_exp_feat_param_success_index_none[] = {
+ 0x01, 0x00, /* Feature Count */
+ 0x1c, 0xda, 0x47, 0x1c, 0x48, 0x6c, /* UUID - Debug */
+ 0x01, 0xab, 0x9f, 0x46, 0xec, 0xb9,
+ 0x30, 0x25, 0x99, 0xd4,
+ 0x00, 0x00, 0x00, 0x00, /* Flags */
+};
+
+static const struct generic_data read_exp_feat_success_index_none = {
+ .send_index_none = true,
+ .send_opcode = MGMT_OP_READ_EXP_FEATURES_INFO,
+ .expect_status = MGMT_STATUS_SUCCESS,
+ .expect_param = read_exp_feat_param_success_index_none,
+ .expect_len = sizeof(read_exp_feat_param_success_index_none),
+};
+
static uint16_t settings_powered_le_privacy[] = { MGMT_OP_SET_LE,
MGMT_OP_SET_PRIVACY,
MGMT_OP_SET_POWERED, 0 };
@@ -9720,6 +9737,20 @@ static const uint8_t set_exp_feat_rsp_param_ll_privacy[] = {
0x03, 0x00, 0x00, 0x00, /* Action - enable */
};

+static const uint8_t set_exp_feat_param_offload_codec[] = {
+ 0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, /* UUID - Codec Offload */
+ 0x1a, 0x88, 0xb9, 0x4f, 0x7f, 0xee,
+ 0xce, 0x5a, 0x69, 0xa6,
+ 0x01, /* Action - enable */
+};
+
+static const uint8_t set_exp_feat_rsp_param_offload_codec[] = {
+ 0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, /* UUID - Codec Offload */
+ 0x1a, 0x88, 0xb9, 0x4f, 0x7f, 0xee,
+ 0xce, 0x5a, 0x69, 0xa6,
+ 0x01, 0x00, 0x00, 0x00, /* Action - enable */
+};
+
static const struct generic_data set_exp_feat_enable_ll_privacy = {
.send_opcode = MGMT_OP_SET_EXP_FEATURE,
.send_param = set_exp_feat_param_ll_privacy,
@@ -9727,6 +9758,44 @@ static const struct generic_data set_exp_feat_enable_ll_privacy = {
.expect_status = MGMT_STATUS_SUCCESS,
.expect_param = set_exp_feat_rsp_param_ll_privacy,
.expect_len = sizeof(set_exp_feat_rsp_param_ll_privacy),
+ .expect_alt_ev = MGMT_EV_EXP_FEATURE_CHANGE,
+ .expect_alt_ev_len = sizeof(struct mgmt_ev_exp_feature_changed),
+};
+
+static void read_exp_feature_callback(uint8_t status, uint16_t length,
+ const void *param, void *user_data)
+{
+ if (status != MGMT_STATUS_SUCCESS) {
+ tester_setup_failed();
+ return;
+ }
+
+ tester_print("Received Read Experimental Features Info");
+
+ tester_setup_complete();
+}
+
+static void setup_set_exp_feature_alt(const void *test_data)
+{
+ struct test_data *data = tester_get_data();
+
+ /* Send the Read Experiemental Features Information command to receive
+ * the Experiemental Feature Changed event
+ */
+ mgmt_send(data->mgmt_alt, MGMT_OP_READ_EXP_FEATURES_INFO,
+ data->mgmt_index, 0, NULL,
+ read_exp_feature_callback, NULL, NULL);
+}
+
+static const struct generic_data set_exp_feat_offload_codec = {
+ .send_opcode = MGMT_OP_SET_EXP_FEATURE,
+ .send_param = set_exp_feat_param_offload_codec,
+ .send_len = sizeof(set_exp_feat_param_offload_codec),
+ .expect_status = MGMT_STATUS_SUCCESS,
+ .expect_param = set_exp_feat_rsp_param_offload_codec,
+ .expect_len = sizeof(set_exp_feat_rsp_param_offload_codec),
+ .expect_alt_ev = MGMT_EV_EXP_FEATURE_CHANGE,
+ .expect_alt_ev_len = sizeof(struct mgmt_ev_exp_feature_changed),
};

static const uint8_t set_exp_feat_param_disable[17] = { 0x00 };
@@ -12434,12 +12503,29 @@ int main(int argc, char *argv[])
test_bredrle50("Read Exp Feature - Success",
&read_exp_feat_success,
NULL, test_command_generic);
+
+ /* MGMT_OP_READ_EXP_FEATURE
+ * Read Experimental features - success (Index None)
+ */
+ test_bredrle50("Read Exp Feature - Success (Index None)",
+ &read_exp_feat_success_index_none,
+ NULL, test_command_generic);
+
/* MGMT_OP_SET_EXP_FEATURE
* Enable LL Privacy
*/
test_bredrle50("Set Exp Feature - Enable LL Privacy",
&set_exp_feat_enable_ll_privacy,
- NULL, test_command_generic);
+ setup_set_exp_feature_alt,
+ test_command_generic);
+
+ /* MGMT_OP_SET_EXP_FEATURE
+ * Offload Codec
+ */
+ test_bredrle50("Set Exp Feature - Offload Codec",
+ &set_exp_feat_offload_codec,
+ setup_set_exp_feature_alt,
+ test_command_generic);

/* MGMT_OP_SET_EXP_FEATURE
* Disable all features by sending zero UUID
--
2.25.1

2021-10-08 19:55:22

by bluez.test.bot

[permalink] [raw]
Subject: RE: [BlueZ,v3,1/3] doc/tester-config: Enable Runtime Debugging Feature

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=560147

---Test result---

Test Summary:
CheckPatch PASS 4.39 seconds
GitLint PASS 2.75 seconds
Prep - Setup ELL PASS 40.26 seconds
Build - Prep PASS 0.45 seconds
Build - Configure PASS 7.46 seconds
Build - Make PASS 174.06 seconds
Make Check PASS 9.00 seconds
Make Distcheck PASS 211.98 seconds
Build w/ext ELL - Configure PASS 7.81 seconds
Build w/ext ELL - Make PASS 162.27 seconds



---
Regards,
Linux Bluetooth

2021-10-08 21:42:39

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [BlueZ,v3,1/3] doc/tester-config: Enable Runtime Debugging Feature

Hi Tedd,

On Fri, Oct 8, 2021 at 12:55 PM <[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=560147
>
> ---Test result---
>
> Test Summary:
> CheckPatch PASS 4.39 seconds
> GitLint PASS 2.75 seconds
> Prep - Setup ELL PASS 40.26 seconds
> Build - Prep PASS 0.45 seconds
> Build - Configure PASS 7.46 seconds
> Build - Make PASS 174.06 seconds
> Make Check PASS 9.00 seconds
> Make Distcheck PASS 211.98 seconds
> Build w/ext ELL - Configure PASS 7.81 seconds
> Build w/ext ELL - Make PASS 162.27 seconds
>
>
>
> ---
> Regards,
> Linux Bluetooth

Applied, thanks.

--
Luiz Augusto von Dentz