END_TEST START_TEST(test_checksum_write_read) { char *new_file = solv_dupjoin(test_globals.tmpdir, "/test_checksum_write_read", NULL); build_test_file(new_file); unsigned char cs_computed[CHKSUM_BYTES]; unsigned char cs_read[CHKSUM_BYTES]; FILE *fp = fopen(new_file, "r"); checksum_fp(cs_computed, fp); // fails, file opened read-only: fail_unless(checksum_write(cs_computed, fp) == 1); fclose(fp); fp = fopen(new_file, "r+"); fail_if(checksum_write(cs_computed, fp)); fclose(fp); fp = fopen(new_file, "r"); fail_if(checksum_read(cs_read, fp)); fail_if(checksum_cmp(cs_computed, cs_read)); fclose(fp); g_free(new_file); }
END_TEST START_TEST(test_checksum) { /* create a new file, edit it a bit */ char *new_file = solv_dupjoin(test_globals.tmpdir, "/test_checksum", NULL); build_test_file(new_file); unsigned char cs1[CHKSUM_BYTES]; unsigned char cs2[CHKSUM_BYTES]; unsigned char cs1_sum[CHKSUM_BYTES]; unsigned char cs2_sum[CHKSUM_BYTES]; bzero(cs1, CHKSUM_BYTES); bzero(cs2, CHKSUM_BYTES); bzero(cs1_sum, CHKSUM_BYTES); bzero(cs2_sum, CHKSUM_BYTES); fail_if(checksum_cmp(cs1, cs2)); // tests checksum_cmp /* take the first checksums */ FILE *fp; fail_if((fp = fopen(new_file, "r")) == NULL); fail_if(checksum_fp(cs1, fp)); fail_if(checksum_stat(cs1_sum, fp)); fclose(fp); /* the taken checksum are not zeros anymore */ fail_if(checksum_cmp(cs1, cs2) == 0); fail_if(checksum_cmp(cs1_sum, cs2_sum) == 0); /* append something */ fail_if((fp = fopen(new_file, "a")) == NULL); fail_unless(fwrite("X", 1, 1, fp) == 1); fclose(fp); /* take the second checksums */ fail_if((fp = fopen(new_file, "r")) == NULL); fail_if(checksum_stat(cs2, fp)); fail_if(checksum_stat(cs2_sum, fp)); fclose(fp); fail_unless(checksum_cmp(cs1, cs2)); fail_unless(checksum_cmp(cs1_sum, cs2_sum)); g_free(new_file); }
static int can_use_repomd_cache(FILE *fp_solv, unsigned char cs_repomd[CHKSUM_BYTES]) { unsigned char cs_cache[CHKSUM_BYTES]; if (fp_solv && !checksum_read(cs_cache, fp_solv) && !checksum_cmp(cs_cache, cs_repomd)) return 1; return 0; }