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)
|
verify_bdev_present(const char *name, bool presence)
|
||||||
{
|
{
|
||||||
struct bdev_zone_block *bdev;
|
struct bdev_zone_block *bdev;
|
||||||
bool bdev_found;
|
bool bdev_found = false;
|
||||||
|
|
||||||
bdev_found = false;
|
|
||||||
TAILQ_FOREACH(bdev, &g_bdev_nodes, link) {
|
TAILQ_FOREACH(bdev, &g_bdev_nodes, link) {
|
||||||
if (strcmp(bdev->bdev.name, name) == 0) {
|
if (strcmp(bdev->bdev.name, name) == 0) {
|
||||||
bdev_found = true;
|
bdev_found = true;
|
||||||
@ -323,6 +322,8 @@ free_test_req(struct rpc_construct_zone_block *r)
|
|||||||
{
|
{
|
||||||
free(r->name);
|
free(r->name);
|
||||||
free(r->base_bdev);
|
free(r->base_bdev);
|
||||||
|
|
||||||
|
g_rpc_req = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -376,9 +377,8 @@ static void
|
|||||||
verify_zone_bdev(struct rpc_construct_zone_block *r, bool presence)
|
verify_zone_bdev(struct rpc_construct_zone_block *r, bool presence)
|
||||||
{
|
{
|
||||||
struct bdev_zone_block *bdev;
|
struct bdev_zone_block *bdev;
|
||||||
bool bdev_found;
|
bool bdev_found = false;
|
||||||
|
|
||||||
bdev_found = false;
|
|
||||||
TAILQ_FOREACH(bdev, &g_bdev_nodes, link) {
|
TAILQ_FOREACH(bdev, &g_bdev_nodes, link) {
|
||||||
if (strcmp(bdev->bdev.name, r->name) == 0) {
|
if (strcmp(bdev->bdev.name, r->name) == 0) {
|
||||||
bdev_found = true;
|
bdev_found = true;
|
||||||
@ -409,11 +409,45 @@ verify_zone_bdev(struct rpc_construct_zone_block *r, bool presence)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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;
|
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;
|
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 spdk_bdev *bdev;
|
||||||
|
struct rpc_construct_zone_block req;
|
||||||
char *name = "Nvme0n1";
|
char *name = "Nvme0n1";
|
||||||
size_t num_zones = 20;
|
size_t num_zones = 20;
|
||||||
size_t zone_capacity = BLOCK_CNT / num_zones;
|
size_t zone_capacity = BLOCK_CNT / num_zones;
|
||||||
@ -434,40 +468,20 @@ test_zone_block_create(void)
|
|||||||
free_test_req(&req);
|
free_test_req(&req);
|
||||||
|
|
||||||
/* Delete bdev */
|
/* Delete bdev */
|
||||||
create_delete_req(&delete_req, "zone_dev1");
|
send_delete_vbdev("zone_dev1", true);
|
||||||
rpc_zone_block_delete(NULL, NULL);
|
|
||||||
verify_config_present("zone_dev1", false);
|
|
||||||
verify_bdev_present("zone_dev1", false);
|
|
||||||
CU_ASSERT(g_rpc_err == 0);
|
|
||||||
|
|
||||||
/* Create zoned virtual device and verify its correctness */
|
/* Create zoned virtual device and verify its correctness */
|
||||||
verify_config_present("zone_dev1", false);
|
verify_config_present("zone_dev1", false);
|
||||||
verify_bdev_present("zone_dev1", false);
|
send_create_vbdev("zone_dev1", name, zone_capacity, 1, false, true);
|
||||||
initialize_create_req(&req, "zone_dev1", name, zone_capacity, 1, false);
|
send_delete_vbdev("zone_dev1", 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);
|
|
||||||
|
|
||||||
/* 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);
|
|
||||||
|
|
||||||
while (spdk_thread_poll(g_thread, 0, 0) > 0) {}
|
while (spdk_thread_poll(g_thread, 0, 0) > 0) {}
|
||||||
zone_block_finish();
|
test_cleanup();
|
||||||
base_bdevs_cleanup();
|
|
||||||
SPDK_CU_ASSERT_FATAL(TAILQ_EMPTY(&g_bdev_list));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_zone_block_create_invalid(void)
|
test_zone_block_create_invalid(void)
|
||||||
{
|
{
|
||||||
struct rpc_construct_zone_block req;
|
|
||||||
struct rpc_delete_zone_block delete_req;
|
|
||||||
char *name = "Nvme0n1";
|
char *name = "Nvme0n1";
|
||||||
size_t num_zones = 10;
|
size_t num_zones = 10;
|
||||||
size_t zone_capacity = BLOCK_CNT / num_zones;
|
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 */
|
/* Create zoned virtual device and verify its correctness */
|
||||||
verify_config_present("zone_dev1", false);
|
verify_config_present("zone_dev1", false);
|
||||||
verify_bdev_present("zone_dev1", false);
|
verify_bdev_present("zone_dev1", false);
|
||||||
initialize_create_req(&req, "zone_dev1", name, zone_capacity, 1, true);
|
send_create_vbdev("zone_dev1", name, zone_capacity, 1, true, 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);
|
|
||||||
|
|
||||||
/* Try to create another zoned virtual device on the same bdev */
|
/* Try to create another zoned virtual device on the same bdev */
|
||||||
initialize_create_req(&req, "zone_dev2", name, zone_capacity, 1, false);
|
send_create_vbdev("zone_dev2", name, zone_capacity, 1, false, 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);
|
|
||||||
|
|
||||||
/* Try to create zoned virtual device on the zoned bdev */
|
/* Try to create zoned virtual device on the zoned bdev */
|
||||||
initialize_create_req(&req, "zone_dev2", "zone_dev1", zone_capacity, 1, false);
|
send_create_vbdev("zone_dev2", "zone_dev1", zone_capacity, 1, false, 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);
|
|
||||||
|
|
||||||
/* Unclaim the base bdev */
|
/* Unclaim the base bdev */
|
||||||
create_delete_req(&delete_req, "zone_dev1");
|
send_delete_vbdev("zone_dev1", true);
|
||||||
rpc_zone_block_delete(NULL, NULL);
|
|
||||||
verify_config_present("zone_dev1", false);
|
|
||||||
verify_bdev_present("zone_dev1", false);
|
|
||||||
CU_ASSERT(g_rpc_err == 0);
|
|
||||||
|
|
||||||
/* Try to create zoned virtual device with 0 zone size */
|
/* Try to create zoned virtual device with 0 zone size */
|
||||||
initialize_create_req(&req, "zone_dev2", name, 0, 1, false);
|
send_create_vbdev("zone_dev2", name, 0, 1, false, 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);
|
|
||||||
|
|
||||||
/* Try to create zoned virtual device with 0 optimal number of zones */
|
/* Try to create zoned virtual device with 0 optimal number of zones */
|
||||||
initialize_create_req(&req, "zone_dev2", name, zone_capacity, 0, false);
|
send_create_vbdev("zone_dev2", name, zone_capacity, 0, false, 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);
|
|
||||||
|
|
||||||
while (spdk_thread_poll(g_thread, 0, 0) > 0) {}
|
while (spdk_thread_poll(g_thread, 0, 0) > 0) {}
|
||||||
|
test_cleanup();
|
||||||
zone_block_finish();
|
|
||||||
base_bdevs_cleanup();
|
|
||||||
SPDK_CU_ASSERT_FATAL(TAILQ_EMPTY(&g_bdev_list));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
|
Loading…
Reference in New Issue
Block a user