76 lines
1.7 KiB
C
76 lines
1.7 KiB
C
/*
|
|
* Unit test for data_source implementation
|
|
*/
|
|
|
|
#include "test.h"
|
|
#include "libisofs.h"
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
void test_data_source_from_file()
|
|
{
|
|
int res;
|
|
struct data_source *ds;
|
|
unsigned char buffer[2048];
|
|
unsigned char rbuff[2048];
|
|
char filename[] = "/tmp/temp.iso.XXXXXX";
|
|
int fd = mkstemp(filename);
|
|
|
|
/* actually a failure here means that we couldn't test */
|
|
CU_ASSERT_NOT_EQUAL(fd, -1);
|
|
|
|
memset(buffer, 0x35, 2048);
|
|
write(fd, buffer, 2048);
|
|
memset(buffer, 0x20, 2048);
|
|
write(fd, buffer, 2048);
|
|
memset(buffer, 0xF2, 2048);
|
|
write(fd, buffer, 2048);
|
|
memset(buffer, 0x11, 2048);
|
|
write(fd, buffer, 2048);
|
|
memset(buffer, 0xAB, 2048);
|
|
write(fd, buffer, 2048);
|
|
close(fd);
|
|
|
|
ds = data_source_from_file(filename);
|
|
CU_ASSERT_PTR_NOT_NULL(ds);
|
|
|
|
/* check correct size reported */
|
|
CU_ASSERT_EQUAL(ds->get_size(ds), 5);
|
|
|
|
/* check reading */
|
|
res = ds->read_block(ds, 4, rbuff);
|
|
CU_ASSERT_EQUAL(res, 0);
|
|
CU_ASSERT_NSTRING_EQUAL(rbuff, buffer, 2048);
|
|
|
|
res = ds->read_block(ds, 1, rbuff);
|
|
CU_ASSERT_EQUAL(res, 0);
|
|
memset(buffer, 0x20, 2048);
|
|
CU_ASSERT_NSTRING_EQUAL(rbuff, buffer, 2048);
|
|
|
|
res = ds->read_block(ds, 0, rbuff);
|
|
CU_ASSERT_EQUAL(res, 0);
|
|
memset(buffer, 0x35, 2048);
|
|
CU_ASSERT_NSTRING_EQUAL(rbuff, buffer, 2048);
|
|
|
|
res = ds->read_block(ds, 3, rbuff);
|
|
CU_ASSERT_EQUAL(res, 0);
|
|
memset(buffer, 0x11, 2048);
|
|
CU_ASSERT_NSTRING_EQUAL(rbuff, buffer, 2048);
|
|
|
|
/* and a block outside file */
|
|
res = ds->read_block(ds, 5, rbuff);
|
|
CU_ASSERT_TRUE(res < 0);
|
|
|
|
data_source_free(ds);
|
|
unlink(filename);
|
|
}
|
|
|
|
void add_data_source_suite()
|
|
{
|
|
CU_pSuite pSuite = CU_add_suite("DataSourceSuite", NULL, NULL);
|
|
|
|
CU_add_test(pSuite, "test of data_source_from_file()", test_data_source_from_file);
|
|
}
|