bdev/zone: Add helper function for unit test
Signed-off-by: Kozlowski Mateusz <mateusz.kozlowski@intel.com> Change-Id: I9853d49299ca4e566dc60da321919493e0e7c32f Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/479541 Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com> Community-CI: SPDK CI Jenkins <sys_sgci@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
This commit is contained in:
parent
d1a8a7bee1
commit
351c38d570
@ -284,9 +284,8 @@ static void
|
||||
verify_bdev_present(const char *name, bool presence)
|
||||
{
|
||||
struct bdev_zone_block *bdev;
|
||||
bool bdev_found;
|
||||
bool bdev_found = false;
|
||||
|
||||
bdev_found = false;
|
||||
TAILQ_FOREACH(bdev, &g_bdev_nodes, link) {
|
||||
if (strcmp(bdev->bdev.name, name) == 0) {
|
||||
bdev_found = true;
|
||||
@ -323,6 +322,8 @@ free_test_req(struct rpc_construct_zone_block *r)
|
||||
{
|
||||
free(r->name);
|
||||
free(r->base_bdev);
|
||||
|
||||
g_rpc_req = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -376,9 +377,8 @@ static void
|
||||
verify_zone_bdev(struct rpc_construct_zone_block *r, bool presence)
|
||||
{
|
||||
struct bdev_zone_block *bdev;
|
||||
bool bdev_found;
|
||||
bool bdev_found = false;
|
||||
|
||||
bdev_found = false;
|
||||
TAILQ_FOREACH(bdev, &g_bdev_nodes, link) {
|
||||
if (strcmp(bdev->bdev.name, r->name) == 0) {
|
||||
bdev_found = true;
|
||||
@ -409,11 +409,45 @@ verify_zone_bdev(struct rpc_construct_zone_block *r, bool presence)
|
||||
}
|
||||
|
||||
static void
|
||||
test_zone_block_create(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);
|
||||
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);
|
||||
}
|
||||
|
||||
static void
|
||||
send_delete_vbdev(char *name, bool success)
|
||||
{
|
||||
struct rpc_delete_zone_block delete_req;
|
||||
|
||||
create_delete_req(&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;
|
||||
}
|
||||
|
||||
static void
|
||||
test_cleanup(void)
|
||||
{
|
||||
CU_ASSERT(spdk_thread_is_idle(g_thread));
|
||||
zone_block_finish();
|
||||
base_bdevs_cleanup();
|
||||
}
|
||||
|
||||
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;
|
||||
@ -434,40 +468,20 @@ test_zone_block_create(void)
|
||||
free_test_req(&req);
|
||||
|
||||
/* Delete bdev */
|
||||
create_delete_req(&delete_req, "zone_dev1");
|
||||
rpc_zone_block_delete(NULL, NULL);
|
||||
verify_config_present("zone_dev1", false);
|
||||
verify_bdev_present("zone_dev1", false);
|
||||
CU_ASSERT(g_rpc_err == 0);
|
||||
send_delete_vbdev("zone_dev1", true);
|
||||
|
||||
/* Create zoned virtual device and verify its correctness */
|
||||
verify_config_present("zone_dev1", false);
|
||||
verify_bdev_present("zone_dev1", false);
|
||||
initialize_create_req(&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, true);
|
||||
free_test_req(&req);
|
||||
|
||||
/* Delete bdev */
|
||||
create_delete_req(&delete_req, "zone_dev1");
|
||||
rpc_zone_block_delete(NULL, NULL);
|
||||
verify_config_present("zone_dev1", false);
|
||||
verify_bdev_present("zone_dev1", false);
|
||||
CU_ASSERT(g_rpc_err == 0);
|
||||
send_create_vbdev("zone_dev1", name, zone_capacity, 1, false, true);
|
||||
send_delete_vbdev("zone_dev1", true);
|
||||
|
||||
while (spdk_thread_poll(g_thread, 0, 0) > 0) {}
|
||||
zone_block_finish();
|
||||
base_bdevs_cleanup();
|
||||
SPDK_CU_ASSERT_FATAL(TAILQ_EMPTY(&g_bdev_list));
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
static void
|
||||
test_zone_block_create_invalid(void)
|
||||
{
|
||||
struct rpc_construct_zone_block req;
|
||||
struct rpc_delete_zone_block delete_req;
|
||||
char *name = "Nvme0n1";
|
||||
size_t num_zones = 10;
|
||||
size_t zone_capacity = BLOCK_CNT / num_zones;
|
||||
@ -477,57 +491,25 @@ test_zone_block_create_invalid(void)
|
||||
/* Create zoned virtual device and verify its correctness */
|
||||
verify_config_present("zone_dev1", false);
|
||||
verify_bdev_present("zone_dev1", false);
|
||||
initialize_create_req(&req, "zone_dev1", name, zone_capacity, 1, true);
|
||||
rpc_zone_block_create(NULL, NULL);
|
||||
CU_ASSERT(g_rpc_err == 0);
|
||||
verify_zone_config(&req, true);
|
||||
verify_zone_bdev(&req, true);
|
||||
free_test_req(&req);
|
||||
send_create_vbdev("zone_dev1", name, zone_capacity, 1, true, true);
|
||||
|
||||
/* Try to create another zoned virtual device on the same bdev */
|
||||
initialize_create_req(&req, "zone_dev2", name, zone_capacity, 1, false);
|
||||
rpc_zone_block_create(NULL, NULL);
|
||||
CU_ASSERT(g_rpc_err == 1);
|
||||
verify_config_present("zone_dev2", false);
|
||||
verify_bdev_present("zone_dev2", false);
|
||||
free_test_req(&req);
|
||||
send_create_vbdev("zone_dev2", name, zone_capacity, 1, false, false);
|
||||
|
||||
/* Try to create zoned virtual device on the zoned bdev */
|
||||
initialize_create_req(&req, "zone_dev2", "zone_dev1", zone_capacity, 1, false);
|
||||
rpc_zone_block_create(NULL, NULL);
|
||||
CU_ASSERT(g_rpc_err == 1);
|
||||
verify_config_present("zone_dev2", false);
|
||||
verify_bdev_present("zone_dev2", false);
|
||||
free_test_req(&req);
|
||||
send_create_vbdev("zone_dev2", "zone_dev1", zone_capacity, 1, false, false);
|
||||
|
||||
/* Unclaim the base bdev */
|
||||
create_delete_req(&delete_req, "zone_dev1");
|
||||
rpc_zone_block_delete(NULL, NULL);
|
||||
verify_config_present("zone_dev1", false);
|
||||
verify_bdev_present("zone_dev1", false);
|
||||
CU_ASSERT(g_rpc_err == 0);
|
||||
send_delete_vbdev("zone_dev1", true);
|
||||
|
||||
/* Try to create zoned virtual device with 0 zone size */
|
||||
initialize_create_req(&req, "zone_dev2", name, 0, 1, false);
|
||||
rpc_zone_block_create(NULL, NULL);
|
||||
CU_ASSERT(g_rpc_err == 1);
|
||||
verify_config_present("zone_dev2", false);
|
||||
verify_bdev_present("zone_dev2", false);
|
||||
free_test_req(&req);
|
||||
send_create_vbdev("zone_dev2", name, 0, 1, false, false);
|
||||
|
||||
/* Try to create zoned virtual device with 0 optimal number of zones */
|
||||
initialize_create_req(&req, "zone_dev2", name, zone_capacity, 0, false);
|
||||
rpc_zone_block_create(NULL, NULL);
|
||||
verify_config_present("zone_dev2", false);
|
||||
verify_bdev_present("zone_dev2", false);
|
||||
CU_ASSERT(g_rpc_err == 1);
|
||||
free_test_req(&req);
|
||||
send_create_vbdev("zone_dev2", name, zone_capacity, 0, false, false);
|
||||
|
||||
while (spdk_thread_poll(g_thread, 0, 0) > 0) {}
|
||||
|
||||
zone_block_finish();
|
||||
base_bdevs_cleanup();
|
||||
SPDK_CU_ASSERT_FATAL(TAILQ_EMPTY(&g_bdev_list));
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
|
Loading…
Reference in New Issue
Block a user