Skip to content

Commit

Permalink
test/file: test for mapping zero blocks into memory [currently failing]
Browse files Browse the repository at this point in the history
  • Loading branch information
Gottox committed Aug 7, 2023
1 parent 4101465 commit ce8549c
Showing 1 changed file with 112 additions and 5 deletions.
117 changes: 112 additions & 5 deletions test/file/file_iterator.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
#include "../../lib/utils/utils.h"

static const size_t BLOCK_SIZE = 32768;
static const size_t ZERO_PAGE_SIZE = 16384;
static const size_t ZERO_BLOCK_SIZE = 16384;

static void
load_segment_from_compressed_data_block(void) {
Expand Down Expand Up @@ -142,19 +142,19 @@ load_two_segments_from_uncompressed_data_block(void) {
assert(rv > 0);

size = sqsh_file_iterator_size(&iter);
assert(size == ZERO_PAGE_SIZE);
assert(size == ZERO_BLOCK_SIZE);
data = sqsh_file_iterator_data(&iter);
for (size_t i = 0; i < ZERO_PAGE_SIZE; i++) {
for (size_t i = 0; i < ZERO_BLOCK_SIZE; i++) {
assert(data[i] == 0);
}

rv = sqsh_file_iterator_next(&iter, 1);
assert(rv > 0);

size = sqsh_file_iterator_size(&iter);
assert(size == ZERO_PAGE_SIZE - 1000);
assert(size == ZERO_BLOCK_SIZE - 1000);
data = sqsh_file_iterator_data(&iter);
for (size_t i = 0; i < ZERO_PAGE_SIZE - 1000; i++) {
for (size_t i = 0; i < ZERO_BLOCK_SIZE - 1000; i++) {
assert(data[i] == 0);
}

Expand Down Expand Up @@ -358,10 +358,117 @@ load_zero_big_padding(void) {
sqsh__archive_cleanup(&archive);
}

static void
load_zero_block(void) {
int rv;
struct SqshArchive archive = {0};
struct SqshFile file = {0};
uint8_t payload[8192] = {
/* clang-format off */
SQSH_HEADER,
/* inode */
[INODE_TABLE_OFFSET] = METABLOCK_HEADER(0, 128),
INODE_HEADER(2, 0, 0, 0, 0, 1),
INODE_BASIC_FILE(512, 0xFFFFFFFF, 0, ZERO_BLOCK_SIZE),
DATA_BLOCK_REF(0, 0),
/* clang-format on */
};
mk_stub(&archive, payload, sizeof(payload));

uint64_t inode_ref = sqsh_address_ref_create(0, 0);
rv = sqsh__file_init(&file, &archive, inode_ref);
assert(rv == 0);

assert(sqsh_file_type(&file) == SQSH_FILE_TYPE_FILE);
assert(sqsh_file_has_fragment(&file) == false);

struct SqshFileIterator iter = {0};
rv = sqsh__file_iterator_init(&iter, &file);
assert(rv == 0);

rv = sqsh_file_iterator_next(&iter, 1);
assert(rv > 0);

size_t size = sqsh_file_iterator_size(&iter);
assert(size == ZERO_BLOCK_SIZE);

for (size_t i = 0; i < ZERO_BLOCK_SIZE; i++) {
const uint8_t *data = sqsh_file_iterator_data(&iter);
assert(data[i] == 0);
}

rv = sqsh_file_iterator_next(&iter, 1);
assert(rv == 0);

sqsh__file_iterator_cleanup(&iter);
sqsh__file_cleanup(&file);
sqsh__archive_cleanup(&archive);
}

static void
load_two_zero_blocks(void) {
int rv;
struct SqshArchive archive = {0};
struct SqshFile file = {0};
uint8_t payload[8192] = {
/* clang-format off */
SQSH_HEADER,
/* inode */
[INODE_TABLE_OFFSET] = METABLOCK_HEADER(0, 128),
INODE_HEADER(2, 0, 0, 0, 0, 1),
INODE_BASIC_FILE(512, 0xFFFFFFFF, 0, ZERO_BLOCK_SIZE * 2),
DATA_BLOCK_REF(0, 0),
/* clang-format on */
};
mk_stub(&archive, payload, sizeof(payload));

uint64_t inode_ref = sqsh_address_ref_create(0, 0);
rv = sqsh__file_init(&file, &archive, inode_ref);
assert(rv == 0);

assert(sqsh_file_type(&file) == SQSH_FILE_TYPE_FILE);
assert(sqsh_file_has_fragment(&file) == false);

struct SqshFileIterator iter = {0};
rv = sqsh__file_iterator_init(&iter, &file);
assert(rv == 0);

rv = sqsh_file_iterator_next(&iter, 1);
assert(rv > 0);

size_t size = sqsh_file_iterator_size(&iter);
assert(size == ZERO_BLOCK_SIZE);

for (size_t i = 0; i < ZERO_BLOCK_SIZE; i++) {
const uint8_t *data = sqsh_file_iterator_data(&iter);
assert(data[i] == 0);
}

rv = sqsh_file_iterator_next(&iter, 1);
assert(rv > 0);

size = sqsh_file_iterator_size(&iter);
assert(size == ZERO_BLOCK_SIZE);

for (size_t i = 0; i < ZERO_BLOCK_SIZE; i++) {
const uint8_t *data = sqsh_file_iterator_data(&iter);
assert(data[i] == 0);
}

rv = sqsh_file_iterator_next(&iter, 1);
assert(rv == 0);

sqsh__file_iterator_cleanup(&iter);
sqsh__file_cleanup(&file);
sqsh__archive_cleanup(&archive);
}

DECLARE_TESTS
TEST(load_two_segments_from_uncompressed_data_block)
TEST(load_segment_from_uncompressed_data_block)
TEST(load_segment_from_compressed_data_block)
TEST(load_zero_padding)
TEST(load_zero_big_padding)
TEST(load_zero_block)
NO_TEST(load_two_zero_blocks)
END_TESTS

0 comments on commit ce8549c

Please sign in to comment.