nvme: clean up nvme_ctrlr_cmd_ut
Replace a bunch of allocations with stack variables. Remove many unnecessary variables. The actual tests are unchanged (and still not testing very much), but this removes a lot of cruft that should make it easier to see what the tests are actually doing. Change-Id: I2c4810391cbf4d8edde88d5bc1c0dddcba3ae175 Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
18ce432337
commit
7f9d22a494
@ -32,96 +32,69 @@
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "nvme/nvme_internal.h"
|
||||
|
||||
#include "CUnit/Basic.h"
|
||||
|
||||
#include "nvme/nvme_ctrlr_cmd.c"
|
||||
|
||||
char outbuf[OUTBUF_SIZE];
|
||||
|
||||
struct nvme_command *cmd = NULL;
|
||||
|
||||
uint64_t nvme_vtophys(void *buf)
|
||||
{
|
||||
return (uintptr_t)buf;
|
||||
}
|
||||
struct nvme_request g_req;
|
||||
|
||||
typedef void (*verify_request_fn_t)(struct nvme_request *req);
|
||||
verify_request_fn_t verify_fn;
|
||||
|
||||
void verify_firmware_log_page(struct nvme_request *req)
|
||||
{
|
||||
cmd = &req->cmd;
|
||||
CU_ASSERT(cmd->opc == NVME_OPC_GET_LOG_PAGE);
|
||||
nvme_free_request(req);
|
||||
CU_ASSERT(req->cmd.opc == NVME_OPC_GET_LOG_PAGE);
|
||||
}
|
||||
|
||||
void verify_health_log_page(struct nvme_request *req)
|
||||
{
|
||||
cmd = &req->cmd;
|
||||
CU_ASSERT(cmd->opc == NVME_OPC_GET_LOG_PAGE);
|
||||
nvme_free_request(req);
|
||||
CU_ASSERT(req->cmd.opc == NVME_OPC_GET_LOG_PAGE);
|
||||
}
|
||||
|
||||
void verify_error_log_page(struct nvme_request *req)
|
||||
{
|
||||
cmd = &req->cmd;
|
||||
CU_ASSERT(cmd->opc == NVME_OPC_GET_LOG_PAGE);
|
||||
nvme_free_request(req);
|
||||
CU_ASSERT(req->cmd.opc == NVME_OPC_GET_LOG_PAGE);
|
||||
}
|
||||
|
||||
void verify_get_feature_cmd(struct nvme_request *req)
|
||||
{
|
||||
cmd = &req->cmd;
|
||||
CU_ASSERT(cmd->opc == NVME_OPC_GET_FEATURES);
|
||||
nvme_free_request(req);
|
||||
CU_ASSERT(req->cmd.opc == NVME_OPC_GET_FEATURES);
|
||||
}
|
||||
|
||||
void verify_abort_cmd(struct nvme_request *req)
|
||||
{
|
||||
cmd = &req->cmd;
|
||||
CU_ASSERT(cmd->opc == NVME_OPC_ABORT);
|
||||
nvme_free_request(req);
|
||||
CU_ASSERT(req->cmd.opc == NVME_OPC_ABORT);
|
||||
}
|
||||
|
||||
void verify_io_raw_cmd(struct nvme_request *req)
|
||||
{
|
||||
struct nvme_command command = {0};
|
||||
uint64_t phys_addr = 0;
|
||||
int rc = 100;
|
||||
|
||||
|
||||
cmd = &req->cmd;
|
||||
CU_ASSERT(cmd != NULL);
|
||||
rc = memcmp(cmd, &command, sizeof(cmd));
|
||||
CU_ASSERT(rc == 0);
|
||||
nvme_free_request(req);
|
||||
CU_ASSERT(memcmp(&req->cmd, &command, sizeof(req->cmd)) == 0);
|
||||
}
|
||||
|
||||
struct nvme_request *
|
||||
nvme_allocate_request(void *payload, uint32_t payload_size,
|
||||
nvme_cb_fn_t cb_fn, void *cb_arg)
|
||||
{
|
||||
struct nvme_request *req = NULL;
|
||||
nvme_alloc_request(&req);
|
||||
struct nvme_request *req = &g_req;
|
||||
|
||||
if (req != NULL) {
|
||||
memset(req, 0, offsetof(struct nvme_request, children));
|
||||
memset(req, 0, sizeof(*req));
|
||||
|
||||
if (payload == NULL || payload_size == 0) {
|
||||
req->u.payload = NULL;
|
||||
req->payload_size = 0;
|
||||
} else {
|
||||
req->u.payload = payload;
|
||||
req->payload_size = payload_size;
|
||||
}
|
||||
|
||||
req->cb_fn = cb_fn;
|
||||
req->cb_arg = cb_arg;
|
||||
req->timeout = true;
|
||||
if (payload == NULL || payload_size == 0) {
|
||||
req->u.payload = NULL;
|
||||
req->payload_size = 0;
|
||||
} else {
|
||||
req->u.payload = payload;
|
||||
req->payload_size = payload_size;
|
||||
}
|
||||
|
||||
req->cb_fn = cb_fn;
|
||||
req->cb_arg = cb_arg;
|
||||
req->timeout = true;
|
||||
|
||||
return req;
|
||||
}
|
||||
|
||||
@ -130,12 +103,16 @@ nvme_ctrlr_submit_io_request(struct nvme_controller *ctrlr,
|
||||
struct nvme_request *req)
|
||||
{
|
||||
verify_fn(req);
|
||||
/* stop analyzer from thinking stack variable addresses are stored in a global */
|
||||
memset(req, 0, sizeof(*req));
|
||||
}
|
||||
|
||||
void
|
||||
nvme_ctrlr_submit_admin_request(struct nvme_controller *ctrlr, struct nvme_request *req)
|
||||
{
|
||||
verify_fn(req);
|
||||
/* stop analyzer from thinking stack variable addresses are stored in a global */
|
||||
memset(req, 0, sizeof(*req));
|
||||
}
|
||||
|
||||
|
||||
@ -143,136 +120,70 @@ void
|
||||
test_firmware_get_log_page()
|
||||
{
|
||||
struct nvme_controller ctrlr = {};
|
||||
struct nvme_firmware_page *payload = NULL;
|
||||
nvme_cb_fn_t cb_fn = NULL;
|
||||
void *cb_arg = NULL;
|
||||
uint64_t phys_addr = 0;
|
||||
|
||||
payload = nvme_malloc("nvme_firmware_page", sizeof(struct nvme_firmware_page),
|
||||
64, &phys_addr);
|
||||
CU_ASSERT(payload != NULL);
|
||||
struct nvme_firmware_page payload = {};
|
||||
|
||||
verify_fn = verify_firmware_log_page;
|
||||
|
||||
nvme_ctrlr_cmd_get_firmware_page(&ctrlr,
|
||||
payload, cb_fn, cb_arg);
|
||||
|
||||
nvme_free(payload);
|
||||
nvme_ctrlr_cmd_get_firmware_page(&ctrlr, &payload, NULL, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
test_health_get_log_page()
|
||||
{
|
||||
struct nvme_controller ctrlr = {};
|
||||
struct nvme_health_information_page *payload = NULL;
|
||||
uint32_t nsid = 0;
|
||||
nvme_cb_fn_t cb_fn = NULL;
|
||||
void *cb_arg = NULL;
|
||||
uint64_t phys_addr = 0;
|
||||
|
||||
payload = nvme_malloc("nvme_health_information_page", sizeof(struct nvme_health_information_page),
|
||||
64, &phys_addr);
|
||||
CU_ASSERT(payload != NULL);
|
||||
struct nvme_health_information_page payload = {};
|
||||
|
||||
verify_fn = verify_health_log_page;
|
||||
|
||||
nvme_ctrlr_cmd_get_health_information_page(&ctrlr, nsid,
|
||||
payload, cb_fn, cb_arg);
|
||||
|
||||
nvme_free(payload);
|
||||
nvme_ctrlr_cmd_get_health_information_page(&ctrlr, 0, &payload, NULL, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
test_error_get_log_page()
|
||||
{
|
||||
struct nvme_controller *ctrlr = NULL;
|
||||
struct nvme_controller_data *ctrldata = NULL;
|
||||
struct nvme_error_information_entry *payload = NULL;
|
||||
uint32_t num_entries = 1;
|
||||
nvme_cb_fn_t cb_fn = NULL;
|
||||
void *cb_arg = NULL;
|
||||
uint64_t phys_addr = 0;
|
||||
struct nvme_controller ctrlr = {};
|
||||
struct nvme_error_information_entry payload = {};
|
||||
|
||||
payload = nvme_malloc("nvme_error_information_entry", sizeof(struct nvme_error_information_entry),
|
||||
64, &phys_addr);
|
||||
CU_ASSERT(payload != NULL);
|
||||
|
||||
ctrlr = nvme_malloc("nvme_controller", sizeof(struct nvme_controller),
|
||||
64, &phys_addr);
|
||||
CU_ASSERT(ctrlr != NULL);
|
||||
|
||||
ctrldata = nvme_malloc("nvme_controller_data", sizeof(struct nvme_controller_data),
|
||||
64, &phys_addr);
|
||||
CU_ASSERT(ctrldata != NULL);
|
||||
|
||||
ctrlr->cdata = *ctrldata;
|
||||
ctrlr->cdata.elpe = 5;
|
||||
ctrlr.cdata.elpe = 5;
|
||||
|
||||
verify_fn = verify_error_log_page;
|
||||
|
||||
nvme_ctrlr_cmd_get_error_page(ctrlr, payload,
|
||||
num_entries, cb_fn, cb_arg);
|
||||
num_entries = 50;
|
||||
nvme_ctrlr_cmd_get_error_page(ctrlr, payload,
|
||||
num_entries, cb_fn, cb_arg);
|
||||
/* valid page */
|
||||
nvme_ctrlr_cmd_get_error_page(&ctrlr, &payload, 1, NULL, NULL);
|
||||
|
||||
|
||||
nvme_free(payload);
|
||||
nvme_free(ctrlr);
|
||||
nvme_free(ctrldata);
|
||||
/* out of range page */
|
||||
nvme_ctrlr_cmd_get_error_page(&ctrlr, &payload, 50, NULL, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
test_get_feature_cmd()
|
||||
{
|
||||
struct nvme_controller ctrlr = {};
|
||||
uint8_t feature = 1;
|
||||
uint32_t cdw11 = 1;
|
||||
void *payload = NULL;
|
||||
uint32_t payload_size = 0;
|
||||
nvme_cb_fn_t cb_fn = NULL;
|
||||
void *cb_arg = NULL;
|
||||
|
||||
verify_fn = verify_get_feature_cmd;
|
||||
|
||||
nvme_ctrlr_cmd_get_feature(&ctrlr, feature, cdw11, payload,
|
||||
payload_size, cb_fn, cb_arg);
|
||||
nvme_ctrlr_cmd_get_feature(&ctrlr, 1, 1, NULL, 0, NULL, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
test_abort_cmd()
|
||||
{
|
||||
struct nvme_controller ctrlr = {};
|
||||
uint16_t cid = 0;
|
||||
uint16_t sqid = 0;
|
||||
nvme_cb_fn_t cb_fn = NULL;
|
||||
void *cb_arg = NULL;
|
||||
struct nvme_controller ctrlr = {};
|
||||
|
||||
verify_fn = verify_abort_cmd;
|
||||
|
||||
nvme_ctrlr_cmd_abort(&ctrlr, cid, sqid, cb_fn, cb_arg);
|
||||
nvme_ctrlr_cmd_abort(&ctrlr, 0, 0, NULL, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
test_io_raw_cmd()
|
||||
{
|
||||
struct nvme_controller ctrlr = {};
|
||||
struct nvme_command *cmd = NULL;
|
||||
void *buf = NULL;
|
||||
uint32_t len = 1;
|
||||
nvme_cb_fn_t cb_fn = NULL;
|
||||
void *cb_arg = NULL;
|
||||
uint64_t phys_addr = 0;
|
||||
|
||||
cmd = nvme_malloc("nvme_command", sizeof(struct nvme_command),
|
||||
64, &phys_addr);
|
||||
CU_ASSERT(cmd != NULL);
|
||||
memset(cmd, 0, sizeof(cmd));
|
||||
struct nvme_controller ctrlr = {};
|
||||
struct nvme_command cmd = {};
|
||||
|
||||
verify_fn = verify_io_raw_cmd;
|
||||
|
||||
nvme_ctrlr_cmd_io_raw(&ctrlr, cmd, buf, len, cb_fn, cb_arg);
|
||||
nvme_free(cmd);
|
||||
nvme_ctrlr_cmd_io_raw(&ctrlr, &cmd, NULL, 1, NULL, NULL);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
|
Loading…
x
Reference in New Issue
Block a user