|
@@ -214,3 +214,315 @@ int testc_faux_buf_boundaries(void)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+int testc_faux_buf_direct(void)
|
|
|
+{
|
|
|
+// char *src_fn = NULL;
|
|
|
+// char *dst_fn = NULL;
|
|
|
+ ssize_t len = 0;
|
|
|
+ char *rnd = NULL;
|
|
|
+ char *dst = NULL;
|
|
|
+ faux_buf_t *buf = NULL;
|
|
|
+ ssize_t chunk_num = 0;
|
|
|
+ ssize_t e_chunk_num = 0;
|
|
|
+ ssize_t res = 0;
|
|
|
+ ssize_t wlocked = 0;
|
|
|
+ struct iovec *iov = NULL;
|
|
|
+ size_t iov_num = 0;
|
|
|
+ struct iovec *riov = NULL;
|
|
|
+ size_t riov_num = 0;
|
|
|
+ ssize_t bytes_readed = 0;
|
|
|
+
|
|
|
+ // Prepare files
|
|
|
+ len = CHUNK * 3;
|
|
|
+ e_chunk_num = 3;
|
|
|
+ rnd = faux_testc_rnd_buf(len);
|
|
|
+// src_fn = faux_testc_tmpfile_deploy(rnd, len);
|
|
|
+
|
|
|
+ // Create buf
|
|
|
+ printf("faux_buf_new()\n");
|
|
|
+ buf = faux_buf_new(CHUNK);
|
|
|
+ if (!buf) {
|
|
|
+ fprintf(stderr, "faux_buf_new() error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Write to buffer
|
|
|
+ printf("faux_buf_write() len - CHUNK\n");
|
|
|
+ if ((res = faux_buf_write(buf, rnd, len - CHUNK)) != (len - CHUNK)) {
|
|
|
+ fprintf(stderr, "faux_buf_write() error %ld\n", res);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 2) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 2);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Lock buffer for writing
|
|
|
+ printf("faux_buf_dwrite_lock()\n");
|
|
|
+ if ((wlocked = faux_buf_dwrite_lock(buf, len + 15, &iov, &iov_num)) != (len + 15)) {
|
|
|
+ fprintf(stderr, "faux_buf_dwrite_lock() error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 6) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 6);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf read
|
|
|
+ dst = faux_malloc(len);
|
|
|
+ if (!dst) {
|
|
|
+ fprintf(stderr, "faux_malloc() error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("faux_buf_dread_lock()\n");
|
|
|
+ if ((bytes_readed = faux_buf_dread_lock(buf, len, &riov, &riov_num)) != (len - CHUNK)) {
|
|
|
+ fprintf(stderr, "faux_buf_dread_lock() error. need %ld, readed %ld\n",
|
|
|
+ len, bytes_readed);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 6) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 6);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("faux_buf_dread_ulock() must be -1\n");
|
|
|
+ if ((bytes_readed = faux_buf_dread_unlock(buf, len, riov)) >= 0) {
|
|
|
+ fprintf(stderr, "faux_buf_dread_lock() error. need -1, readed %ld\n",
|
|
|
+ bytes_readed);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("faux_buf_dread_ulock()\n");
|
|
|
+ if ((bytes_readed = faux_buf_dread_unlock(buf, len - CHUNK, riov)) != (len - CHUNK)) {
|
|
|
+ fprintf(stderr, "faux_buf_dread_lock() error. need %ld, readed %ld\n",
|
|
|
+ len, bytes_readed);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != (e_chunk_num + 1)) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%ld\n",
|
|
|
+ chunk_num, e_chunk_num + 1);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Unlock buffer for writing
|
|
|
+ printf("faux_buf_dwrite_unlock()\n");
|
|
|
+ if ((wlocked = faux_buf_dwrite_unlock(buf, len, iov)) != (len)) {
|
|
|
+ fprintf(stderr, "faux_buf_dwrite_unlock() error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 3) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 3);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("faux_buf_read()\n");
|
|
|
+ if ((bytes_readed = faux_buf_read(buf, dst, len)) != len) {
|
|
|
+ fprintf(stderr, "faux_buf_read() error. need %ld, readed %ld\n",
|
|
|
+ len, bytes_readed);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 0) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 0);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("faux_buf_write() CHUNK\n");
|
|
|
+ if (faux_buf_write(buf, rnd, CHUNK + 15) != (CHUNK + 15)) {
|
|
|
+ fprintf(stderr, "faux_buf_write() the rest error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf length
|
|
|
+ printf("faux_buf_len()\n");
|
|
|
+ if (faux_buf_len(buf) != (CHUNK + 15)) {
|
|
|
+ fprintf(stderr, "faux_buf_len() error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 2) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 2);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf read
|
|
|
+ printf("faux_buf_read()\n");
|
|
|
+ if (faux_buf_read(buf, dst, len) != (CHUNK + 15)) {
|
|
|
+ fprintf(stderr, "faux_buf_read() error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf length == 0
|
|
|
+ printf("faux_buf_len() 2\n");
|
|
|
+ if (faux_buf_len(buf) != 0) {
|
|
|
+ fprintf(stderr, "faux_buf_len() is not 0: error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 0) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 0);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ faux_free(dst);
|
|
|
+ faux_buf_free(buf);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+int testc_faux_buf_dwrite_unlock0(void)
|
|
|
+{
|
|
|
+// char *src_fn = NULL;
|
|
|
+// char *dst_fn = NULL;
|
|
|
+ ssize_t len = 0;
|
|
|
+ char *rnd = NULL;
|
|
|
+ char *dst = NULL;
|
|
|
+ faux_buf_t *buf = NULL;
|
|
|
+ ssize_t chunk_num = 0;
|
|
|
+ ssize_t res = 0;
|
|
|
+ ssize_t wlocked = 0;
|
|
|
+ struct iovec *iov = NULL;
|
|
|
+ size_t iov_num = 0;
|
|
|
+ struct iovec *riov = NULL;
|
|
|
+ size_t riov_num = 0;
|
|
|
+ ssize_t bytes_readed = 0;
|
|
|
+
|
|
|
+ // Prepare files
|
|
|
+ len = CHUNK * 3;
|
|
|
+ rnd = faux_testc_rnd_buf(len);
|
|
|
+// src_fn = faux_testc_tmpfile_deploy(rnd, len);
|
|
|
+
|
|
|
+ // Create buf
|
|
|
+ printf("faux_buf_new()\n");
|
|
|
+ buf = faux_buf_new(CHUNK);
|
|
|
+ if (!buf) {
|
|
|
+ fprintf(stderr, "faux_buf_new() error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Write to buffer
|
|
|
+ printf("faux_buf_write() len - CHUNK\n");
|
|
|
+ if ((res = faux_buf_write(buf, rnd, CHUNK + 15)) != (CHUNK + 15)) {
|
|
|
+ fprintf(stderr, "faux_buf_write() error %ld\n", res);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 2) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 2);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Lock buffer for writing
|
|
|
+ printf("faux_buf_dwrite_lock()\n");
|
|
|
+ if ((wlocked = faux_buf_dwrite_lock(buf, len, &iov, &iov_num)) != len) {
|
|
|
+ fprintf(stderr, "faux_buf_dwrite_lock() error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 5) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 5);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf read
|
|
|
+ dst = faux_malloc(len);
|
|
|
+ if (!dst) {
|
|
|
+ fprintf(stderr, "faux_malloc() error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("faux_buf_dread_lock()\n");
|
|
|
+ if ((bytes_readed = faux_buf_dread_lock(buf, len, &riov, &riov_num)) != (CHUNK + 15)) {
|
|
|
+ fprintf(stderr, "faux_buf_dread_lock() error. need %d, readed %ld\n",
|
|
|
+ CHUNK + 15, bytes_readed);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 5) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 5);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("faux_buf_dread_ulock() must be -1\n");
|
|
|
+ if ((bytes_readed = faux_buf_dread_unlock(buf, len, riov)) >= 0) {
|
|
|
+ fprintf(stderr, "faux_buf_dread_lock() error. need -1, readed %ld\n",
|
|
|
+ bytes_readed);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("faux_buf_dread_ulock()\n");
|
|
|
+ if ((bytes_readed = faux_buf_dread_unlock(buf, CHUNK + 15, riov)) != (CHUNK + 15)) {
|
|
|
+ fprintf(stderr, "faux_buf_dread_lock() error. need %ld, readed %ld\n",
|
|
|
+ len, bytes_readed);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 4) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 4);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Unlock buffer for writing
|
|
|
+ printf("faux_buf_dwrite_unlock() with 0 len\n");
|
|
|
+ if ((wlocked = faux_buf_dwrite_unlock(buf, 0, iov)) != (len)) {
|
|
|
+ fprintf(stderr, "faux_buf_dwrite_unlock() error\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Buf chunk num
|
|
|
+ printf("faux_buf_chunk_num()\n");
|
|
|
+ if ((chunk_num = faux_buf_chunk_num(buf)) != 0) {
|
|
|
+ fprintf(stderr, "faux_buf_chunk_num() error. num=%ld e=%d\n",
|
|
|
+ chunk_num, 0);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ faux_free(dst);
|
|
|
+ faux_buf_free(buf);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|