137 lines
3.1 KiB
C
137 lines
3.1 KiB
C
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#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;
|
|
}
|