Linux Audio

Check our new training course

Embedded Linux Audio

Check our new training course
with Creative Commons CC-BY-SA
lecture materials

Bootlin logo

Elixir Cross Referencer

Loading...
/*
 * Copyright (c) 2017 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/types.h>
#include <stddef.h>
#include <string.h>

#include <net/buf.h>

#include "subsys/bluetooth/host/at.h"

#include <ztest.h>

static struct at_client at;
static char buffer[140];

NET_BUF_POOL_DEFINE(at_pool, 1, 140, 0, NULL);

static const char example_data[] = "\r\n+ABCD:999\r\n";

int at_handle(struct at_client *hf_at)
{
	u32_t val;

	zassert_equal(at_get_number(hf_at, &val), 0, "Error getting value");

	zassert_equal(val, 999, "Invalid value parsed");

	return 0;
}

int at_resp(struct at_client *hf_at, struct net_buf *buf)
{
	int err;

	err = at_parse_cmd_input(hf_at, buf, "ABCD", at_handle,
				 AT_CMD_TYPE_NORMAL);
	zassert_equal(err, 0, "Error parsing CMD input");

	return 0;
}


static void at_test1(void)
{
	struct net_buf *buf;
	int len;

	at.buf_max_len = 140;
	at.buf = buffer;

	buf = net_buf_alloc(&at_pool, K_FOREVER);
	zassert_not_null(buf, "Failed to get buffer");

	at_register(&at, at_resp, NULL);
	len = strlen(example_data);

	zassert_true(net_buf_tailroom(buf) >= len,
		    "Allocated buffer is too small");
	strncpy((char *)buf->data, example_data, len);
	net_buf_add(buf, len);

	zassert_equal(at_parse_input(&at, buf), 0, "Parsing failed");
}

void test_main(void)
{
	ztest_test_suite(at_tests,
		ztest_unit_test(at_test1)
	);

	ztest_run_test_suite(at_tests);
}