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 __FBSDID("$FreeBSD$"); 27 28 static int 29 open_cb(struct archive *a, void *client) 30 { 31 (void)a; /* UNUSED */ 32 (void)client; /* UNUSED */ 33 return 0; 34 } 35 static ssize_t 36 read_cb(struct archive *a, void *client, const void **buff) 37 { 38 (void)a; /* UNUSED */ 39 (void)client; /* UNUSED */ 40 (void)buff; /* UNUSED */ 41 return (ssize_t)0; 42 } 43 static int64_t 44 skip_cb(struct archive *a, void *client, int64_t request) 45 { 46 (void)a; /* UNUSED */ 47 (void)client; /* UNUSED */ 48 (void)request; /* UNUSED */ 49 return (int64_t)0; 50 } 51 static int 52 close_cb(struct archive *a, void *client) 53 { 54 (void)a; /* UNUSED */ 55 (void)client; /* UNUSED */ 56 return 0; 57 } 58 59 static void 60 test(int formatted, archive_open_callback *o, archive_read_callback *r, 61 archive_skip_callback *s, archive_close_callback *c, 62 int rv, const char *msg) 63 { 64 struct archive* a = archive_read_new(); 65 if (formatted) 66 assertEqualInt(ARCHIVE_OK, 67 archive_read_support_format_empty(a)); 68 assertEqualInt(rv, 69 archive_read_open2(a, NULL, o, r, s, c)); 70 assertEqualString(msg, archive_error_string(a)); 71 archive_read_free(a); 72 } 73 74 DEFINE_TEST(test_archive_read_open2) 75 { 76 const char *no_reader = 77 "No reader function provided to archive_read_open"; 78 const char *no_formats = "No formats registered"; 79 80 test(1, NULL, NULL, NULL, NULL, 81 ARCHIVE_FATAL, no_reader); 82 test(1, open_cb, NULL, NULL, NULL, 83 ARCHIVE_FATAL, no_reader); 84 test(1, open_cb, read_cb, NULL, NULL, 85 ARCHIVE_OK, NULL); 86 test(1, open_cb, read_cb, skip_cb, NULL, 87 ARCHIVE_OK, NULL); 88 test(1, open_cb, read_cb, skip_cb, close_cb, 89 ARCHIVE_OK, NULL); 90 test(1, NULL, read_cb, skip_cb, close_cb, 91 ARCHIVE_OK, NULL); 92 test(1, open_cb, read_cb, skip_cb, NULL, 93 ARCHIVE_OK, NULL); 94 test(1, NULL, read_cb, skip_cb, NULL, 95 ARCHIVE_OK, NULL); 96 test(1, NULL, read_cb, NULL, NULL, 97 ARCHIVE_OK, NULL); 98 99 test(0, NULL, NULL, NULL, NULL, 100 ARCHIVE_FATAL, no_reader); 101 test(0, open_cb, NULL, NULL, NULL, 102 ARCHIVE_FATAL, no_reader); 103 test(0, open_cb, read_cb, NULL, NULL, 104 ARCHIVE_FATAL, no_formats); 105 test(0, open_cb, read_cb, skip_cb, NULL, 106 ARCHIVE_FATAL, no_formats); 107 test(0, open_cb, read_cb, skip_cb, close_cb, 108 ARCHIVE_FATAL, no_formats); 109 } 110