summaryrefslogtreecommitdiff
path: root/test/host_command.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/host_command.c')
-rw-r--r--test/host_command.c320
1 files changed, 0 insertions, 320 deletions
diff --git a/test/host_command.c b/test/host_command.c
deleted file mode 100644
index ba1d4dcd96..0000000000
--- a/test/host_command.c
+++ /dev/null
@@ -1,320 +0,0 @@
-/* Copyright 2013 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- * Test host command.
- */
-
-#include "common.h"
-#include "console.h"
-#include "host_command.h"
-#include "task.h"
-#include "test_util.h"
-#include "timer.h"
-#include "util.h"
-
-/* Request/response buffer size (and maximum command length) */
-#define BUFFER_SIZE 128
-
-struct host_packet pkt;
-static char resp_buf[BUFFER_SIZE];
-static char req_buf[BUFFER_SIZE + 4];
-struct ec_host_request *req = (struct ec_host_request *)req_buf;
-struct ec_params_hello *p = (struct ec_params_hello *)(req_buf + sizeof(*req));
-struct ec_host_response *resp = (struct ec_host_response *)resp_buf;
-struct ec_response_hello *r =
- (struct ec_response_hello *)(resp_buf + sizeof(*resp));
-struct ec_response_get_chip_info *chip_info_r =
- (struct ec_response_get_chip_info *)(resp_buf + sizeof(*resp));
-
-static void hostcmd_respond(struct host_packet *pkt)
-{
- task_wake(TASK_ID_TEST_RUNNER);
-}
-
-static char calculate_checksum(const char *buf, int size)
-{
- int c = 0;
- int i;
-
- for (i = 0; i < size; ++i)
- c += buf[i];
-
- return -c;
-}
-
-static void hostcmd_send(void)
-{
- req->checksum = calculate_checksum(req_buf, pkt.request_size);
- host_packet_receive(&pkt);
- task_wait_event(-1);
-}
-
-static void hostcmd_fill_in_default(void)
-{
- req->struct_version = 3;
- req->checksum = 0;
- req->command = EC_CMD_HELLO;
- req->command_version = 0;
- req->reserved = 0;
- req->data_len = 4;
- p->in_data = 0x11223344;
-
- pkt.send_response = hostcmd_respond;
- pkt.request = (const void *)req_buf;
- pkt.request_temp = NULL;
- pkt.request_max = BUFFER_SIZE;
- pkt.request_size = sizeof(*req) + sizeof(*p);
- pkt.response = (void *)resp_buf;
- pkt.response_max = BUFFER_SIZE;
- pkt.driver_result = 0;
-}
-
-static int test_hostcmd_ok(void)
-{
- hostcmd_fill_in_default();
-
- hostcmd_send();
-
- TEST_ASSERT(calculate_checksum(resp_buf,
- sizeof(*resp) + resp->data_len) == 0);
- TEST_ASSERT(resp->result == EC_RES_SUCCESS);
- TEST_ASSERT(r->out_data == 0x12243648);
-
- return EC_SUCCESS;
-}
-
-static int test_hostcmd_too_short(void)
-{
- hostcmd_fill_in_default();
-
- /* Smaller than header */
- pkt.request_size = sizeof(*req) - 4;
- hostcmd_send();
- TEST_ASSERT(resp->result == EC_RES_REQUEST_TRUNCATED);
-
- /* Smaller than expected data size */
- pkt.request_size = sizeof(*req);
- hostcmd_send();
- TEST_ASSERT(resp->result == EC_RES_REQUEST_TRUNCATED);
-
- return EC_SUCCESS;
-}
-
-static int test_hostcmd_too_long(void)
-{
- hostcmd_fill_in_default();
-
- /* Larger than request buffer */
- pkt.request_size = BUFFER_SIZE + 4;
- hostcmd_send();
- TEST_ASSERT(resp->result == EC_RES_REQUEST_TRUNCATED);
-
- return EC_SUCCESS;
-}
-
-static int test_hostcmd_driver_error(void)
-{
- hostcmd_fill_in_default();
-
- pkt.driver_result = EC_RES_ERROR;
- hostcmd_send();
- TEST_ASSERT(resp->result == EC_RES_ERROR);
-
- return EC_SUCCESS;
-}
-
-static int test_hostcmd_invalid_command(void)
-{
- hostcmd_fill_in_default();
-
- req->command = 0xff;
- hostcmd_send();
- TEST_ASSERT(resp->result == EC_RES_INVALID_COMMAND);
-
- return EC_SUCCESS;
-}
-
-static int test_hostcmd_wrong_command_version(void)
-{
- hostcmd_fill_in_default();
-
- req->command_version = 1;
- hostcmd_send();
- TEST_ASSERT(resp->result == EC_RES_INVALID_VERSION);
-
- return EC_SUCCESS;
-}
-
-static int test_hostcmd_wrong_struct_version(void)
-{
- hostcmd_fill_in_default();
-
- req->struct_version = 4;
- hostcmd_send();
- TEST_ASSERT(resp->result == EC_RES_INVALID_HEADER);
-
- req->struct_version = 2;
- hostcmd_send();
- TEST_ASSERT(resp->result == EC_RES_INVALID_HEADER);
-
- return EC_SUCCESS;
-}
-
-static int test_hostcmd_invalid_checksum(void)
-{
- hostcmd_fill_in_default();
-
- req->checksum++;
- hostcmd_send();
- TEST_ASSERT(resp->result == EC_RES_INVALID_CHECKSUM);
-
- return EC_SUCCESS;
-}
-
-static int test_hostcmd_reuse_response_buffer(void)
-{
- struct ec_host_request *h = (struct ec_host_request *)resp_buf;
- struct ec_params_hello *d =
- (struct ec_params_hello *)(resp_buf + sizeof(*h));
-
- h->struct_version = 3;
- h->checksum = 0;
- h->command = EC_CMD_HELLO;
- h->command_version = 0;
- h->reserved = 0;
- h->data_len = 4;
- d->in_data = 0x11223344;
-
- pkt.send_response = hostcmd_respond;
- /*
- * The original request buffer is shared with the response and the
- * request buffer is used as the temporary buffer
- */
- pkt.request = (const void *)resp_buf;
- pkt.request_temp = req_buf;
- pkt.request_max = BUFFER_SIZE;
- pkt.request_size = sizeof(*h) + sizeof(*d);
- pkt.response = (void *)resp_buf;
- pkt.response_max = BUFFER_SIZE;
- pkt.driver_result = 0;
-
- h->checksum = calculate_checksum(resp_buf, pkt.request_size);
-
- ccprintf("\nBuffer contents before process 0x%ph\n",
- HEX_BUF(resp_buf, BUFFER_SIZE));
- host_packet_receive(&pkt);
- task_wait_event(-1);
-
- ccprintf("\nBuffer contents after process 0x%ph\n",
- HEX_BUF(resp_buf, BUFFER_SIZE));
-
- TEST_EQ(calculate_checksum(resp_buf,
- sizeof(*resp) + resp->data_len), 0, "%d");
- TEST_EQ(resp->result, EC_RES_SUCCESS, "%d");
- TEST_EQ(r->out_data, 0x12243648, "0x%x");
-
- return EC_SUCCESS;
-}
-
-static void hostcmd_fill_chip_info(void)
-{
- req->struct_version = 3;
- req->checksum = 0;
- req->command = EC_CMD_GET_CHIP_INFO;
- req->command_version = 0;
- req->reserved = 0;
- req->data_len = 0;
-
- pkt.send_response = hostcmd_respond;
- pkt.request = (const void *)req_buf;
- pkt.request_temp = NULL;
- pkt.request_max = BUFFER_SIZE;
- pkt.request_size = sizeof(*req);
- pkt.response = (void *)resp_buf;
- pkt.response_max = BUFFER_SIZE;
- pkt.driver_result = 0;
-}
-
-static int test_hostcmd_clears_unused_data(void)
-{
- int i, found_null;
-
- /* Set the buffer to junk and ensure that is gets cleared */
- memset(resp_buf, 0xAA, BUFFER_SIZE);
- hostcmd_fill_chip_info();
-
- hostcmd_send();
-
- ccprintf("\nBuffer contents 0x%ph\n",
- HEX_BUF(resp_buf, BUFFER_SIZE));
-
- TEST_EQ(calculate_checksum(resp_buf,
- sizeof(*resp) + resp->data_len), 0, "%d");
- TEST_EQ(resp->result, EC_RES_SUCCESS, "%d");
-
- /* Ensure partial strings have 0s after the NULL byte */
- found_null = 0;
- for (i = 0; i < sizeof(chip_info_r->name); ++i) {
- if (!chip_info_r->name[i])
- found_null = 1;
-
- if (found_null) {
- if (chip_info_r->name[i])
- ccprintf("\nByte %d is not zero!\n", i);
- TEST_EQ(chip_info_r->name[i], 0, "0x%x");
- }
- }
-
- found_null = 0;
- for (i = 0; i < sizeof(chip_info_r->revision); ++i) {
- if (!chip_info_r->revision[i])
- found_null = 1;
-
- if (found_null) {
- if (chip_info_r->revision[i])
- ccprintf("\nByte %d is not zero!\n", i);
- TEST_EQ(chip_info_r->revision[i], 0, "0x%x");
- }
- }
-
- found_null = 0;
- for (i = 0; i < sizeof(chip_info_r->vendor); ++i) {
- if (!chip_info_r->vendor[i])
- found_null = 1;
-
- if (found_null) {
- if (chip_info_r->vendor[i])
- ccprintf("\nByte %d is not zero!\n", i);
- TEST_EQ(chip_info_r->vendor[i], 0, "0x%x");
- }
- }
-
- /* Ensure rest of buffer after valid response is also 0 */
- for (i = resp->data_len + sizeof(*resp) + 1; i < BUFFER_SIZE; ++i) {
- if (resp_buf[i])
- ccprintf("\nByte %d is not zero!\n", i);
- TEST_EQ(resp_buf[i], 0, "0x%x");
- }
-
- return EC_SUCCESS;
-}
-
-void run_test(int argc, char **argv)
-{
- wait_for_task_started();
- test_reset();
-
- RUN_TEST(test_hostcmd_ok);
- RUN_TEST(test_hostcmd_too_short);
- RUN_TEST(test_hostcmd_too_long);
- RUN_TEST(test_hostcmd_driver_error);
- RUN_TEST(test_hostcmd_invalid_command);
- RUN_TEST(test_hostcmd_wrong_command_version);
- RUN_TEST(test_hostcmd_wrong_struct_version);
- RUN_TEST(test_hostcmd_invalid_checksum);
- RUN_TEST(test_hostcmd_reuse_response_buffer);
- RUN_TEST(test_hostcmd_clears_unused_data);
-
- test_print_result();
-}