test_append.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <zip.h>
  4. #include "minunit.h"
  5. #if defined(_WIN32) || defined(_WIN64)
  6. #define MKTEMP _mktemp
  7. #define UNLINK _unlink
  8. #else
  9. #define MKTEMP mkstemp
  10. #define UNLINK unlink
  11. #endif
  12. static char ZIPNAME[L_tmpnam + 1] = {0};
  13. static int total_entries = 0;
  14. #define TESTDATA1 "Some test data 1...\0"
  15. void test_setup(void) {
  16. strncpy(ZIPNAME, "z-XXXXXX\0", L_tmpnam);
  17. MKTEMP(ZIPNAME);
  18. struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w');
  19. zip_entry_open(zip, "test/test-1.txt");
  20. zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1));
  21. zip_entry_close(zip);
  22. ++total_entries;
  23. zip_close(zip);
  24. }
  25. void test_teardown(void) { UNLINK(ZIPNAME); }
  26. #define TESTDATA2 "Some test data 2...\0"
  27. #define CRC32DATA2 2532008468
  28. MU_TEST(test_append) {
  29. struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'a');
  30. mu_check(zip != NULL);
  31. mu_assert_int_eq(0, zip_entry_open(zip, "test\\test-2.txt"));
  32. mu_assert_int_eq(0, strcmp(zip_entry_name(zip), "test/test-2.txt"));
  33. mu_assert_int_eq(total_entries, zip_entry_index(zip));
  34. mu_assert_int_eq(0, zip_entry_write(zip, TESTDATA2, strlen(TESTDATA2)));
  35. mu_assert_int_eq(strlen(TESTDATA2), zip_entry_size(zip));
  36. mu_check(CRC32DATA2 == zip_entry_crc32(zip));
  37. mu_assert_int_eq(0, zip_entry_close(zip));
  38. ++total_entries;
  39. zip_close(zip);
  40. zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'a');
  41. mu_assert_int_eq(0, zip_entry_open(zip, "test\\empty/"));
  42. mu_assert_int_eq(0, strcmp(zip_entry_name(zip), "test/empty/"));
  43. mu_assert_int_eq(0, zip_entry_size(zip));
  44. mu_assert_int_eq(0, zip_entry_crc32(zip));
  45. mu_assert_int_eq(total_entries, zip_entry_index(zip));
  46. mu_assert_int_eq(0, zip_entry_close(zip));
  47. ++total_entries;
  48. zip_close(zip);
  49. zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'a');
  50. mu_assert_int_eq(0, zip_entry_open(zip, "empty/"));
  51. mu_assert_int_eq(0, strcmp(zip_entry_name(zip), "empty/"));
  52. mu_assert_int_eq(0, zip_entry_size(zip));
  53. mu_assert_int_eq(0, zip_entry_crc32(zip));
  54. mu_assert_int_eq(total_entries, zip_entry_index(zip));
  55. mu_assert_int_eq(0, zip_entry_close(zip));
  56. ++total_entries;
  57. mu_assert_int_eq(0, zip_entry_open(zip, "dotfiles/.test"));
  58. mu_assert_int_eq(0, strcmp(zip_entry_name(zip), "dotfiles/.test"));
  59. mu_assert_int_eq(0, zip_entry_size(zip));
  60. mu_assert_int_eq(0, zip_entry_crc32(zip));
  61. mu_assert_int_eq(0, zip_entry_write(zip, TESTDATA2, strlen(TESTDATA2)));
  62. mu_assert_int_eq(strlen(TESTDATA2), zip_entry_size(zip));
  63. mu_check(CRC32DATA2 == zip_entry_crc32(zip));
  64. mu_assert_int_eq(total_entries, zip_entry_index(zip));
  65. mu_assert_int_eq(0, zip_entry_close(zip));
  66. ++total_entries;
  67. mu_assert_int_eq(total_entries, zip_entries_total(zip));
  68. zip_close(zip);
  69. }
  70. MU_TEST_SUITE(test_append_suite) {
  71. MU_SUITE_CONFIGURE(&test_setup, &test_teardown);
  72. MU_RUN_TEST(test_append);
  73. }
  74. #define UNUSED(x) (void)x
  75. int main(int argc, char *argv[]) {
  76. UNUSED(argc);
  77. UNUSED(argv);
  78. MU_RUN_SUITE(test_append_suite);
  79. MU_REPORT();
  80. return MU_EXIT_CODE;
  81. }