LONGBOW_TEST_CASE(Object, parcRandomAccessFile_Write) { char *fname = "tmpfile"; PARCFile *file = parcFile_Create(fname); parcFile_CreateNewFile(file); uint8_t data[128]; for (int i = 0; i < 128; i++) { data[i] = i; } PARCRandomAccessFile *instance = parcRandomAccessFile_Open(file); PARCBuffer *buffer = parcBuffer_Allocate(128); parcBuffer_PutArray(buffer, 128, data); parcBuffer_Flip(buffer); size_t numBytes = parcRandomAccessFile_Write(instance, buffer); assertTrue(numBytes == 128, "Expected 128 bytes to be read, but got %zu", numBytes); parcBuffer_Release(&buffer); parcRandomAccessFile_Close(instance); parcRandomAccessFile_Release(&instance); uint8_t bytes[128]; FILE *fp = fopen(fname, "r"); numBytes = fread(bytes, 1, 128, fp); assertTrue(numBytes == 128, "Expected 128 bytes to be read, but got %zu", numBytes); fclose(fp); assertTrue(memcmp(data, bytes, 128) == 0, "Expected buffers to be equal"); parcFile_Release(&file); }
LONGBOW_TEST_CASE(Object, parcRandomAccessFile_Read) { char *fname = "tmpfile"; PARCFile *file = parcFile_Create(fname); parcFile_CreateNewFile(file); FILE *fp = fopen(fname, "w"); fseek(fp, 0, SEEK_SET); uint8_t data[128]; for (int i = 0; i < 128; i++) { data[i] = i; } fwrite(data, 1, 128, fp); fclose(fp); PARCRandomAccessFile *instance = parcRandomAccessFile_Open(file); parcFile_Release(&file); PARCBuffer *buffer = parcBuffer_Allocate(128); size_t numBytes = parcRandomAccessFile_Read(instance, buffer); assertTrue(numBytes == 128, "Expected 128 bytes to be read, but got %zu", numBytes); parcBuffer_Flip(buffer); uint8_t *bytes = parcBuffer_Overlay(buffer, parcBuffer_Remaining(buffer)); assertTrue(memcmp(data, bytes, 128) == 0, "Expected buffers to be equal"); parcBuffer_Release(&buffer); parcRandomAccessFile_Close(instance); parcRandomAccessFile_Release(&instance); }
LONGBOW_TEST_CASE(Object, parcRandomAccessFile_Equals) { PARCFile *fileX = parcFile_Create("/tmp/tmpfileX"); PARCFile *fileY = parcFile_Create("/tmp/tmpfileX"); PARCFile *fileZ = parcFile_Create("/tmp/tmpfileX"); PARCRandomAccessFile *x = parcRandomAccessFile_Open(fileX); PARCRandomAccessFile *y = parcRandomAccessFile_Open(fileY); PARCRandomAccessFile *z = parcRandomAccessFile_Open(fileZ); parcFile_Release(&fileX); parcFile_Release(&fileY); parcFile_Release(&fileZ); parcObjectTesting_AssertEquals(x, y, z, NULL); parcRandomAccessFile_Close(x); parcRandomAccessFile_Close(y); parcRandomAccessFile_Close(z); parcRandomAccessFile_Release(&x); parcRandomAccessFile_Release(&y); parcRandomAccessFile_Release(&z); }
/** * Write the input buffer to the specified file. * * @param [in] outFile Name of the file to which the buffer will be written. * @param [in] data A `PARCBuffer` instance which stores the data to be written. */ static void _ccnxFileRepoClient_AppendBufferToFile(char *outFile, PARCBuffer *data, size_t offset) { PARCFile *out = parcFile_Create(outFile); parcFile_CreateNewFile(out); PARCRandomAccessFile *fout = parcRandomAccessFile_Open(out); parcRandomAccessFile_Seek(fout, offset, PARCRandomAccessFilePosition_Start); parcRandomAccessFile_Write(fout, data); parcRandomAccessFile_Close(fout); parcRandomAccessFile_Release(&fout); parcFile_Release(&out); }
LONGBOW_TEST_CASE(Object, parcRandomAccessFile_Seek) { char *fname = "tmpfile"; PARCFile *file = parcFile_Create(fname); parcFile_CreateNewFile(file); FILE *fp = fopen(fname, "w"); fseek(fp, 0, SEEK_SET); uint8_t data[128]; for (int i = 0; i < 128; i++) { data[i] = i; } fwrite(data, 1, 128, fp); fclose(fp); PARCRandomAccessFile *instance = parcRandomAccessFile_Open(file); PARCBuffer *buffer = parcBuffer_Allocate(128); parcRandomAccessFile_Seek(instance, 64, PARCRandomAccessFilePosition_Start); size_t numBytes = parcRandomAccessFile_Read(instance, buffer); assertTrue(numBytes == 64, "Expected 64 bytes to be read, but got %zu", numBytes); parcRandomAccessFile_Seek(instance, 0, PARCRandomAccessFilePosition_End); parcBuffer_Flip(buffer); numBytes = parcRandomAccessFile_Read(instance, buffer); assertTrue(numBytes == 0, "Expected 0 bytes to be read, but got %zu", numBytes); parcRandomAccessFile_Seek(instance, 0, PARCRandomAccessFilePosition_Start); parcBuffer_Flip(buffer); numBytes = parcRandomAccessFile_Read(instance, buffer); assertTrue(numBytes == 128, "Expected 128 bytes to be read, but got %zu", numBytes); parcBuffer_Release(&buffer); parcRandomAccessFile_Close(instance); parcRandomAccessFile_Release(&instance); parcFile_Release(&file); }