#include #include #include #include #include "spdk_engine/io_engine.h" #include "test_common.h" int main(void) { int rc = 0; const char *bdev_name = getenv("SPDK_BDEV_NAME"); struct zvfs_blob_handle *h = NULL; struct zvfs_blob_handle *reopen = NULL; uint64_t blob_id = 0; uint64_t cluster = 0; void *wbuf = NULL; void *rbuf = NULL; if (!bdev_name) { bdev_name = "Malloc0"; } if (io_engine_init(bdev_name) != 0) { fprintf(stderr, "TEST1: io_engine_init failed (bdev=%s)\n", bdev_name); return 1; } printf("[TEST1] single thread / single blob\n"); h = blob_create(0); if (!h) { fprintf(stderr, "TEST1: blob_create failed\n"); return 1; } blob_id = h->id; cluster = h->size; if (cluster == 0) { fprintf(stderr, "TEST1: invalid cluster size\n"); rc = 1; goto out; } rc = blob_resize(h, cluster * 2); if (rc != 0) { fprintf(stderr, "TEST1: blob_resize failed: %d\n", rc); rc = 1; goto out; } rc = alloc_aligned_buf(&wbuf, cluster); if (rc != 0) { fprintf(stderr, "TEST1: alloc write buf failed: %d\n", rc); rc = 1; goto out; } rc = alloc_aligned_buf(&rbuf, cluster); if (rc != 0) { fprintf(stderr, "TEST1: alloc read buf failed: %d\n", rc); rc = 1; goto out; } fill_pattern((uint8_t *)wbuf, cluster, 0x11); rc = blob_write(h, 0, wbuf, cluster); if (rc != 0) { fprintf(stderr, "TEST1: blob_write failed: %d\n", rc); rc = 1; goto out; } rc = blob_read(h, 0, rbuf, cluster); if (rc != 0) { fprintf(stderr, "TEST1: blob_read failed: %d\n", rc); rc = 1; goto out; } if (memcmp(wbuf, rbuf, cluster) != 0) { fprintf(stderr, "TEST1: readback mismatch\n"); rc = 1; goto out; } rc = blob_sync_md(h); if (rc != 0) { fprintf(stderr, "TEST1: blob_sync_md failed: %d\n", rc); rc = 1; goto out; } rc = blob_close(h); if (rc != 0) { fprintf(stderr, "TEST1: blob_close failed: %d\n", rc); rc = 1; goto out; } h = NULL; reopen = blob_open(blob_id); if (!reopen) { fprintf(stderr, "TEST1: blob_open(reopen) failed\n"); rc = 1; goto out; } memset(rbuf, 0, cluster); rc = blob_read(reopen, 0, rbuf, cluster); if (rc != 0) { fprintf(stderr, "TEST1: reopen blob_read failed: %d\n", rc); rc = 1; goto out; } if (memcmp(wbuf, rbuf, cluster) != 0) { fprintf(stderr, "TEST1: reopen readback mismatch\n"); rc = 1; goto out; } out: if (reopen) { (void)blob_close(reopen); } if (h) { (void)blob_close(h); } if (blob_id != 0) { (void)blob_delete(blob_id); } free(wbuf); free(rbuf); if (rc == 0) { printf("[TEST1] PASS\n"); return 0; } printf("[TEST1] FAIL\n"); return 1; }