Commit 214483e8 authored by Kozlowski Mateusz's avatar Kozlowski Mateusz Committed by Tomasz Zawadzki
Browse files

test/zone: Cleanup mocked rpc request handling



Unify function names and memory handling for create/delete rpc mock
functions in unit test for block zone bdev.

Signed-off-by: default avatarKozlowski Mateusz <mateusz.kozlowski@intel.com>
Change-Id: Ib8613a78623279447cd5a6b9cf0c686e15b69d32
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/479644


Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com>
Community-CI: SPDK CI Jenkins <sys_sgci@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
parent 351c38d5
Loading
Loading
Loading
Loading
+57 −48
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ uint8_t g_rpc_err;
uint8_t g_json_decode_obj_construct;
static TAILQ_HEAD(, spdk_bdev) g_bdev_list = TAILQ_HEAD_INITIALIZER(g_bdev_list);
void *g_rpc_req = NULL;
uint32_t g_rpc_req_size = 0;
static struct spdk_thread *g_thread;

DEFINE_STUB_V(spdk_bdev_module_list_add, (struct spdk_bdev_module *bdev_module));
@@ -169,20 +168,25 @@ spdk_json_decode_object(const struct spdk_json_val *values,
			const struct spdk_json_object_decoder *decoders, size_t num_decoders,
			void *out)
{
	struct rpc_construct_zone_block *req, *_out;
	struct rpc_construct_zone_block *construct, *_construct;
	struct rpc_delete_zone_block *delete, *_delete;

	if (g_json_decode_obj_construct) {
		req = g_rpc_req;
		_out = out;

		_out->name = strdup(req->name);
		SPDK_CU_ASSERT_FATAL(_out->name != NULL);
		_out->base_bdev = strdup(req->base_bdev);
		SPDK_CU_ASSERT_FATAL(_out->base_bdev != NULL);
		_out->zone_capacity = req->zone_capacity;
		_out->optimal_open_zones = req->optimal_open_zones;
		construct = g_rpc_req;
		_construct = out;

		_construct->name = strdup(construct->name);
		SPDK_CU_ASSERT_FATAL(_construct->name != NULL);
		_construct->base_bdev = strdup(construct->base_bdev);
		SPDK_CU_ASSERT_FATAL(_construct->base_bdev != NULL);
		_construct->zone_capacity = construct->zone_capacity;
		_construct->optimal_open_zones = construct->optimal_open_zones;
	} else {
		memcpy(out, g_rpc_req, g_rpc_req_size);
		delete = g_rpc_req;
		_delete = out;

		_delete->name = strdup(delete->name);
		SPDK_CU_ASSERT_FATAL(_delete->name != NULL);
	}

	return 0;
@@ -300,9 +304,14 @@ verify_bdev_present(const char *name, bool presence)
}

static void
create_test_req(struct rpc_construct_zone_block *r, const char *vbdev_name, const char *base_name,
initialize_create_req(const char *vbdev_name, const char *base_name,
		      uint64_t zone_capacity, uint64_t optimal_open_zones, bool create_base_bdev)
{
	struct rpc_construct_zone_block *r;

	r = g_rpc_req = calloc(1, sizeof(struct rpc_construct_zone_block));
	SPDK_CU_ASSERT_FATAL(r != NULL);

	r->name = strdup(vbdev_name);
	SPDK_CU_ASSERT_FATAL(r->name != NULL);
	r->base_bdev = strdup(base_name);
@@ -313,45 +322,49 @@ create_test_req(struct rpc_construct_zone_block *r, const char *vbdev_name, cons
	if (create_base_bdev == true) {
		create_nvme_bdev();
	}
	g_rpc_req = r;
	g_rpc_req_size = sizeof(*r);
	g_rpc_err = 0;
	g_json_decode_obj_construct = 1;
}

static void
free_test_req(struct rpc_construct_zone_block *r)
free_create_req(void)
{
	struct rpc_construct_zone_block *r = g_rpc_req;

	free(r->name);
	free(r->base_bdev);

	free(r);
	g_rpc_req = NULL;
}

static void
initialize_create_req(struct rpc_construct_zone_block *r, const char *vbdev_name,
		      const char *base_name,
		      uint64_t zone_capacity, uint64_t optimal_open_zones, bool create_base_bdev)
initialize_delete_req(const char *vbdev_name)
{
	create_test_req(r, vbdev_name, base_name, zone_capacity, optimal_open_zones, create_base_bdev);
	struct rpc_delete_zone_block *r;

	r = g_rpc_req = calloc(1, sizeof(struct rpc_delete_zone_block));
	SPDK_CU_ASSERT_FATAL(r != NULL);
	r->name = strdup(vbdev_name);
	SPDK_CU_ASSERT_FATAL(r->name != NULL);

	g_rpc_err = 0;
	g_json_decode_obj_construct = 1;
	g_json_decode_obj_construct = 0;
}

static void
create_delete_req(struct rpc_delete_zone_block *r, const char *vbdev_name)
free_delete_req(void)
{
	r->name = strdup(vbdev_name);
	SPDK_CU_ASSERT_FATAL(r->name != NULL);
	struct rpc_delete_zone_block *r = g_rpc_req;

	g_rpc_req = r;
	g_rpc_req_size = sizeof(*r);
	g_rpc_err = 0;
	g_json_decode_obj_construct = 0;
	free(r->name);
	free(r);
	g_rpc_req = NULL;
}

static void
verify_zone_config(struct rpc_construct_zone_block *r, bool presence)
verify_zone_config(bool presence)
{
	struct rpc_construct_zone_block *r = g_rpc_req;
	struct bdev_zone_block_config *cfg = NULL;

	TAILQ_FOREACH(cfg, &g_bdev_configs, link) {
@@ -374,8 +387,9 @@ verify_zone_config(struct rpc_construct_zone_block *r, bool presence)
}

static void
verify_zone_bdev(struct rpc_construct_zone_block *r, bool presence)
verify_zone_bdev(bool presence)
{
	struct rpc_construct_zone_block *r = g_rpc_req;
	struct bdev_zone_block *bdev;
	bool bdev_found = false;

@@ -412,27 +426,23 @@ static void
send_create_vbdev(char *vdev_name, char *name, uint64_t zone_capacity, uint64_t optimal_open_zones,
		  bool create_bdev, bool success)
{
	struct rpc_construct_zone_block req;

	initialize_create_req(&req, vdev_name, name, zone_capacity, optimal_open_zones, create_bdev);
	initialize_create_req(vdev_name, name, zone_capacity, optimal_open_zones, create_bdev);
	rpc_zone_block_create(NULL, NULL);
	CU_ASSERT(g_rpc_err != success);
	verify_zone_config(&req, success);
	verify_zone_bdev(&req, success);
	free_test_req(&req);
	verify_zone_config(success);
	verify_zone_bdev(success);
	free_create_req();
}

static void
send_delete_vbdev(char *name, bool success)
{
	struct rpc_delete_zone_block delete_req;

	create_delete_req(&delete_req, name);
	initialize_delete_req(name);
	rpc_zone_block_delete(NULL, NULL);
	verify_config_present(name, false);
	verify_bdev_present(name, false);
	CU_ASSERT(g_rpc_err != success);
	g_rpc_req = NULL;
	free_delete_req();
}

static void
@@ -447,7 +457,6 @@ static void
test_zone_block_create(void)
{
	struct spdk_bdev *bdev;
	struct rpc_construct_zone_block req;
	char *name = "Nvme0n1";
	size_t num_zones = 20;
	size_t zone_capacity = BLOCK_CNT / num_zones;
@@ -457,15 +466,15 @@ test_zone_block_create(void)
	/* Create zoned virtual device before nvme device */
	verify_config_present("zone_dev1", false);
	verify_bdev_present("zone_dev1", false);
	initialize_create_req(&req, "zone_dev1", name, zone_capacity, 1, false);
	initialize_create_req("zone_dev1", name, zone_capacity, 1, false);
	rpc_zone_block_create(NULL, NULL);
	CU_ASSERT(g_rpc_err == 0);
	verify_zone_config(&req, true);
	verify_zone_bdev(&req, false);
	verify_zone_config(true);
	verify_zone_bdev(false);
	bdev = create_nvme_bdev();
	zone_block_examine(bdev);
	verify_zone_bdev(&req, true);
	free_test_req(&req);
	verify_zone_bdev(true);
	free_create_req();

	/* Delete bdev */
	send_delete_vbdev("zone_dev1", true);