Re: [PATCH v4 08/11] unit/test-hfp: Add init test for HFP HF

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Szymon,

On 22 October 2014 13:00, Szymon Janc <szymon.janc@xxxxxxxxx> wrote:
> Hi Łukasz,
>
> On Friday 10 of October 2014 01:50:08 Lukasz Rymanowski wrote:
>> This patch adds basic infrastruction for HFP HF test plus
>> init test.
>>
>> It also moves send_pdu function in the file so it can be used by
>> test_hf_handler
>> ---
>>  unit/test-hfp.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++----------
>>  1 file changed, 84 insertions(+), 18 deletions(-)
>>
>> diff --git a/unit/test-hfp.c b/unit/test-hfp.c
>> index 4b3473b..274ee55 100644
>> --- a/unit/test-hfp.c
>> +++ b/unit/test-hfp.c
>> @@ -36,6 +36,7 @@ struct context {
>>       int fd_server;
>>       int fd_client;
>>       struct hfp_gw *hfp;
>> +     struct hfp_hf *hfp_hf;
>>       const struct test_data *data;
>>       unsigned int pdu_offset;
>>  };
>> @@ -52,6 +53,8 @@ struct test_data {
>>       char *test_name;
>>       struct test_pdu *pdu_list;
>>       hfp_result_func_t result_func;
>> +     hfp_response_func_t response_func;
>> +     hfp_hf_result_func_t hf_result_func;
>>       GIOFunc test_handler;
>>  };
>>
>> @@ -99,6 +102,22 @@ struct test_data {
>>               data.test_handler = test_handler;                       \
>>       } while (0)
>>
>> +#define define_hf_test(name, function, result_func, response_function,       \
>> +                                                             args...)\
>> +     do {                                                            \
>> +             const struct test_pdu pdus[] = {                        \
>> +                     args, { }                                       \
>> +             };                                                      \
>> +             static struct test_data data;                           \
>> +             data.test_name = g_strdup(name);                        \
>> +             data.pdu_list = g_malloc(sizeof(pdus));                 \
>> +             data.hf_result_func = result_func;                      \
>> +             data.response_func = response_function;                 \
>> +             memcpy(data.pdu_list, pdus, sizeof(pdus));              \
>> +             g_test_add_data_func(name, &data, function);            \
>> +             data.test_handler = test_hf_handler;                    \
>> +     } while (0)
>> +
>>  static void context_quit(struct context *context)
>>  {
>>       g_main_loop_quit(context->main_loop);
>> @@ -128,6 +147,52 @@ static gboolean test_handler(GIOChannel *channel, GIOCondition cond,
>>       return FALSE;
>>  }
>>
>> +static gboolean send_pdu(gpointer user_data)
>> +{
>> +     struct context *context = user_data;
>> +     const struct test_pdu *pdu;
>> +     ssize_t len;
>> +
>> +     pdu = &context->data->pdu_list[context->pdu_offset++];
>> +
>> +     if (pdu && !pdu->valid)
>> +             return FALSE;
>> +
>> +     len = write(context->fd_server, pdu->data, pdu->size);
>> +     g_assert_cmpint(len, ==, pdu->size);
>> +
>> +     pdu = &context->data->pdu_list[context->pdu_offset];
>> +     if (pdu->fragmented)
>> +             g_idle_add(send_pdu, context);
>> +
>> +     return FALSE;
>> +}
>> +
>> +static gboolean test_hf_handler(GIOChannel *channel, GIOCondition cond,
>> +                                                     gpointer user_data)
>> +{
>> +     struct context *context = user_data;
>> +     gchar buf[60];
>> +     gsize bytes_read;
>> +     GError *error = NULL;
>> +
>> +     if (cond & (G_IO_HUP | G_IO_ERR | G_IO_NVAL))
>> +             goto done;
>> +
>> +     /* dummy read */
>> +     g_io_channel_read_chars(channel, buf, 60, &bytes_read, &error);
>> +
>> +     send_pdu(context);
>> +
>> +     return TRUE;
>> +
>> +done:
>> +     context_quit(context);
>> +     context->watch_id = 0;
>> +
>> +     return FALSE;
>> +}
>> +
>>  static void cmd_handler(const char *command, void *user_data)
>>  {
>>       struct context *context = user_data;
>> @@ -203,6 +268,9 @@ static void execute_context(struct context *context)
>>       if (context->hfp)
>>               hfp_gw_unref(context->hfp);
>>
>> +     if (context->hfp_hf)
>> +             hfp_hf_unref(context->hfp_hf);
>> +
>>       g_free(context);
>>  }
>>
>> @@ -275,24 +343,6 @@ static void test_register(gconstpointer data)
>>       execute_context(context);
>>  }
>>
>> -static gboolean send_pdu(gpointer user_data)
>> -{
>> -     struct context *context = user_data;
>> -     const struct test_pdu *pdu;
>> -     ssize_t len;
>> -
>> -     pdu = &context->data->pdu_list[context->pdu_offset++];
>> -
>> -     len = write(context->fd_server, pdu->data, pdu->size);
>> -     g_assert_cmpint(len, ==, pdu->size);
>> -
>> -     pdu = &context->data->pdu_list[context->pdu_offset];
>> -     if (pdu->fragmented)
>> -             g_idle_add(send_pdu, context);
>> -
>> -     return FALSE;
>> -}
>> -
>>  static void test_fragmented(gconstpointer data)
>>  {
>>       struct context *context = create_context(data);
>> @@ -404,6 +454,20 @@ static void check_string_2(struct hfp_gw_result *result,
>>       hfp_gw_send_result(context->hfp, HFP_RESULT_ERROR);
>>  }
>>
>> +static void test_hf_init(gconstpointer data)
>> +{
>> +     struct context *context = create_context(data);
>> +
>> +     context->hfp_hf = hfp_hf_new(context->fd_client);
>> +     g_assert(context->hfp_hf);
>> +     g_assert(hfp_hf_set_close_on_unref(context->hfp_hf, true));
>> +
>> +     hfp_hf_unref(context->hfp_hf);
>> +     context->hfp_hf = NULL;
>> +
>> +     execute_context(context);
>> +}
>> +
>>  int main(int argc, char *argv[])
>>  {
>>       g_test_init(&argc, &argv, NULL);
>> @@ -473,5 +537,7 @@ int main(int argc, char *argv[])
>>                       raw_pdu('\r'),
>>                       data_end());
>>
>> +     define_hf_test("/hfp/test_init", test_hf_init, NULL, NULL, data_end());
>
> I'd prefer if all hfp_hf tests were prefixed like this:
> "/hfp_hf/test_foo"
>
> This will allow to avoid doubling tests name like this one (there is already
> /hfp/test_init test).
>
OK

>> +
>>       return g_test_run();
>>  }
>>
>
> --
> Best regards,
> Szymon Janc

\Łukasz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux