1 /*- 2 * Copyright (c) 2011 Tim Kientzle 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 #include "test.h" 26 27 static int 28 open_cb(struct archive *a, void *client) 29 { 30 (void)a; /* UNUSED */ 31 (void)client; /* UNUSED */ 32 return 0; 33 } 34 static ssize_t 35 read_cb(struct archive *a, void *client, const void **buff) 36 { 37 (void)a; /* UNUSED */ 38 (void)client; /* UNUSED */ 39 (void)buff; /* UNUSED */ 40 return (ssize_t)0; 41 } 42 static int64_t 43 skip_cb(struct archive *a, void *client, int64_t request) 44 { 45 (void)a; /* UNUSED */ 46 (void)client; /* UNUSED */ 47 (void)request; /* UNUSED */ 48 return (int64_t)0; 49 } 50 static int 51 close_cb(struct archive *a, void *client) 52 { 53 (void)a; /* UNUSED */ 54 (void)client; /* UNUSED */ 55 return 0; 56 } 57 58 static void 59 test(int formatted, archive_open_callback *o, archive_read_callback *r, 60 archive_skip_callback *s, archive_close_callback *c, 61 int rv, const char *msg) 62 { 63 struct archive* a = archive_read_new(); 64 if (formatted) 65 assertEqualInt(ARCHIVE_OK, 66 archive_read_support_format_empty(a)); 67 assertEqualInt(rv, 68 archive_read_open2(a, NULL, o, r, s, c)); 69 assertEqualString(msg, archive_error_string(a)); 70 archive_read_free(a); 71 } 72 73 DEFINE_TEST(test_archive_read_open2) 74 { 75 const char *no_reader = 76 "No reader function provided to archive_read_open"; 77 const char *no_formats = "No formats registered"; 78 79 test(1, NULL, NULL, NULL, NULL, 80 ARCHIVE_FATAL, no_reader); 81 test(1, open_cb, NULL, NULL, NULL, 82 ARCHIVE_FATAL, no_reader); 83 test(1, open_cb, read_cb, NULL, NULL, 84 ARCHIVE_OK, NULL); 85 test(1, open_cb, read_cb, skip_cb, NULL, 86 ARCHIVE_OK, NULL); 87 test(1, open_cb, read_cb, skip_cb, close_cb, 88 ARCHIVE_OK, NULL); 89 test(1, NULL, read_cb, skip_cb, close_cb, 90 ARCHIVE_OK, NULL); 91 test(1, open_cb, read_cb, skip_cb, NULL, 92 ARCHIVE_OK, NULL); 93 test(1, NULL, read_cb, skip_cb, NULL, 94 ARCHIVE_OK, NULL); 95 test(1, NULL, read_cb, NULL, NULL, 96 ARCHIVE_OK, NULL); 97 98 test(0, NULL, NULL, NULL, NULL, 99 ARCHIVE_FATAL, no_reader); 100 test(0, open_cb, NULL, NULL, NULL, 101 ARCHIVE_FATAL, no_reader); 102 test(0, open_cb, read_cb, NULL, NULL, 103 ARCHIVE_FATAL, no_formats); 104 test(0, open_cb, read_cb, skip_cb, NULL, 105 ARCHIVE_FATAL, no_formats); 106 test(0, open_cb, read_cb, skip_cb, close_cb, 107 ARCHIVE_FATAL, no_formats); 108 } 109