diff options
| -rw-r--r-- | tests/resources/big.index | bin | 0 -> 335272 bytes | |||
| -rw-r--r-- | tests/t06-index.c | 64 | ||||
| -rw-r--r-- | tests/test_helpers.c | 44 | ||||
| -rw-r--r-- | tests/test_helpers.h | 4 | 
4 files changed, 57 insertions, 55 deletions
diff --git a/tests/resources/big.index b/tests/resources/big.index Binary files differnew file mode 100644 index 000000000..66932f14b --- /dev/null +++ b/tests/resources/big.index diff --git a/tests/t06-index.c b/tests/t06-index.c index 2d5de7457..ded237076 100644 --- a/tests/t06-index.c +++ b/tests/t06-index.c @@ -134,77 +134,31 @@ END_TEST  BEGIN_TEST("write", index_write_test)  	git_index *index; -	git_filelock out_file; -	must_pass(git_index_open_bare(&index, TEST_INDEX_PATH)); +	must_pass(copy_file(TEST_INDEXBIG_PATH, "index_rewrite")); + +	must_pass(git_index_open_bare(&index, "index_rewrite"));  	must_pass(git_index_read(index));  	must_be_true(index->on_disk); -	/* -	 * TODO: -	 * Don't write the index like this; make sure the filelocks -	 * are manually set -	 */ -/* -	must_pass(git_filelock_init(&out_file, "index_rewrite")); -	must_pass(git_filelock_lock(&out_file, 0)); -	must_pass(git_index__write(index, &out_file)); -	must_pass(git_filelock_commit(&out_file)); -*/ +	must_pass(git_index_write(index)); +	must_pass(cmp_files(TEST_INDEXBIG_PATH, "index_rewrite"));  	git_index_free(index);  	gitfo_unlink("index_rewrite");  END_TEST - -static void randomize_entries(git_index *index) -{ -	unsigned int i, j; -	git_index_entry *tmp; -	git_index_entry **entries; - -	entries = (git_index_entry **)index->entries.contents; - -	srand((unsigned int)time(NULL)); - -	for (i = 0; i < index->entries.length; ++i) { -		j = rand() % index->entries.length; - -		tmp = entries[j]; -		entries[j] = entries[i]; -		entries[i] = tmp; -	} - -	index->sorted = 0; -} -  BEGIN_TEST("sort", index_sort_test) -	git_index *index; -	unsigned int i; -	git_index_entry **entries; - -	must_pass(git_index_open_bare(&index, TEST_INDEX_PATH)); -	must_pass(git_index_read(index)); - -	randomize_entries(index); -  	/*  	 * TODO: This no longer applies:  	 * index sorting in Git uses some specific changes to the way  	 * directories are sorted. +	 * +	 * We need to specificially check for this by creating a new +	 * index, adding entries in random order and then +	 * checking for consistency  	 */ -/* -	git_index__sort(index); -	must_be_true(index->sorted); - -	entries = (git_index_entry **)index->entries.contents; - -	for (i = 1; i < index->entries.length; ++i) -		must_be_true(strcmp(entries[i - 1]->path, entries[i]->path) < 0); -*/ - -	git_index_free(index);  END_TEST diff --git a/tests/test_helpers.c b/tests/test_helpers.c index 5fd9a565a..c93d31b57 100644 --- a/tests/test_helpers.c +++ b/tests/test_helpers.c @@ -131,3 +131,47 @@ int cmp_objects(git_rawobj *o, object_data *d)  		return -1;  	return 0;  } + +int copy_file(const char *src, const char *dst) +{ +	gitfo_buf source_buf; +	git_file dst_fd; +	int error = GIT_ERROR; + +	if (gitfo_read_file(&source_buf, src) < GIT_SUCCESS) +		return GIT_ENOTFOUND; + +	dst_fd = gitfo_creat(dst, 0644); +	if (dst_fd < 0) +		goto cleanup; + +	error = gitfo_write(dst_fd, source_buf.data, source_buf.len); + +cleanup: +	gitfo_free_buf(&source_buf); +	gitfo_close(dst_fd); + +	return error; +} + +int cmp_files(const char *a, const char *b) +{ +	gitfo_buf buf_a, buf_b; +	int error = GIT_ERROR; + +	if (gitfo_read_file(&buf_a, a) < GIT_SUCCESS) +		return GIT_ERROR; + +	if (gitfo_read_file(&buf_b, b) < GIT_SUCCESS) { +		gitfo_free_buf(&buf_a); +		return GIT_ERROR; +	} + +	if (buf_a.len == buf_b.len && !memcmp(buf_a.data, buf_b.data, buf_a.len)) +		error = GIT_SUCCESS; + +	gitfo_free_buf(&buf_a); +	gitfo_free_buf(&buf_b); + +	return error; +} diff --git a/tests/test_helpers.h b/tests/test_helpers.h index 7551fffee..0a9a9e161 100644 --- a/tests/test_helpers.h +++ b/tests/test_helpers.h @@ -33,6 +33,7 @@  #define REPOSITORY_FOLDER	(TEST_RESOURCES "/testrepo.git/")  #define TEST_INDEX_PATH		(TEST_RESOURCES "/testrepo.git/index")  #define TEST_INDEX2_PATH	(TEST_RESOURCES "/gitgit.index") +#define TEST_INDEXBIG_PATH	(TEST_RESOURCES "/big.index")  typedef struct object_data {      unsigned char *bytes;  /* (compressed) bytes stored in object store */ @@ -55,5 +56,8 @@ extern int cmp_objects(git_rawobj *o, object_data *d);  extern int remove_loose_object(const char *odb_dir, git_object *object); +extern int cmp_files(const char *a, const char *b); +extern int copy_file(const char *source, const char *dest); +  #endif  /* INCLUDE_test_helpers_h__ */  | 
