test_gzip.c (4469B)
1 /* 2 This file is part of libextractor. 3 Copyright (C) 2012 Vidyut Samanta and Christian Grothoff 4 5 libextractor is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published 7 by the Free Software Foundation; either version 3, or (at your 8 option) any later version. 9 10 libextractor is distributed in the hope that it will be useful, but 11 WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with libextractor; see the file COPYING. If not, write to the 17 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 Boston, MA 02110-1301, USA. 19 */ 20 /** 21 * @file main/test_gzip.c 22 * @brief testcase for gzip decompression in the extractor 23 * @author Christian Grothoff 24 */ 25 #include "platform.h" 26 #include "extractor.h" 27 28 /** 29 * Return value from main, set to 0 for test to succeed. 30 */ 31 static int ret = 2; 32 33 #define HLO "Hello world!" 34 #define GOB "Goodbye!" 35 36 /** 37 * Function that libextractor calls for each 38 * meta data item found. Should be called once 39 * with 'Hello World!" and once with "Goodbye!". 40 * 41 * @param cls closure should be "main-cls" 42 * @param plugin_name should be "test" 43 * @param type should be "COMMENT" 44 * @param format should be "UTF8" 45 * @param data_mime_type should be "<no mime>" 46 * @param data hello world or good bye 47 * @param data_len number of bytes in data 48 * @return 0 on hello world, 1 on goodbye 49 */ 50 static int 51 process_replies (void *cls, 52 const char *plugin_name, 53 enum EXTRACTOR_MetaType type, 54 enum EXTRACTOR_MetaFormat format, 55 const char *data_mime_type, 56 const char *data, 57 size_t data_len) 58 { 59 if (0 != strcmp (cls, 60 "main-cls")) 61 { 62 fprintf (stderr, "closure invalid\n"); 63 ret = 3; 64 return 1; 65 } 66 if (0 == strcmp (plugin_name, 67 "<zlib>")) 68 return 0; /* skip this one */ 69 if (0 != strcmp (plugin_name, 70 "test")) 71 { 72 fprintf (stderr, "plugin name invalid: `%s'\n", 73 plugin_name); 74 ret = 4; 75 return 1; 76 } 77 if (EXTRACTOR_METATYPE_COMMENT != type) 78 { 79 fprintf (stderr, "type invalid\n"); 80 ret = 5; 81 return 1; 82 } 83 if (EXTRACTOR_METAFORMAT_UTF8 != format) 84 { 85 fprintf (stderr, "format invalid\n"); 86 ret = 6; 87 return 1; 88 } 89 if ( (NULL == data_mime_type) || 90 (0 != strcmp ("<no mime>", 91 data_mime_type) ) ) 92 { 93 fprintf (stderr, "bad mime type\n"); 94 ret = 7; 95 return 1; 96 } 97 if ( (2 == ret) && 98 (data_len == strlen (HLO) + 1) && 99 (0 == strncmp (data, 100 HLO, 101 strlen (HLO))) ) 102 { 103 #if 0 104 fprintf (stderr, "Received '%s'\n", HLO); 105 #endif 106 ret = 1; 107 return 0; 108 } 109 if ( (1 == ret) && 110 (data_len == strlen (GOB) + 1) && 111 (0 == strncmp (data, 112 GOB, 113 strlen (GOB))) ) 114 { 115 #if 0 116 fprintf (stderr, "Received '%s'\n", GOB); 117 #endif 118 ret = 0; 119 return 1; 120 } 121 fprintf (stderr, "Invalid meta data\n"); 122 ret = 8; 123 return 1; 124 } 125 126 127 /** 128 * Main function for the gzip testcase. 129 * 130 * @param argc number of arguments (ignored) 131 * @param argv arguments (ignored) 132 * @return 0 on success 133 */ 134 int 135 main (int argc, char *argv[]) 136 { 137 struct EXTRACTOR_PluginList *pl; 138 139 /* change environment to find 'extractor_test' plugin which is 140 not installed but should be in the current directory (or .libs) 141 on 'make check' */ 142 if (0 != putenv ("LIBEXTRACTOR_PREFIX=.:.libs/")) 143 fprintf (stderr, 144 "Failed to update my environment, plugin loading may fail: %s\n", 145 strerror (errno)); 146 pl = EXTRACTOR_plugin_add_config (NULL, "test(test)", 147 EXTRACTOR_OPTION_DEFAULT_POLICY); 148 if (NULL == pl) 149 { 150 fprintf (stderr, "failed to load test plugin\n"); 151 return 1; 152 } 153 if (0 != access ("test_file.dat.gz", 154 R_OK)) 155 return 77; 156 EXTRACTOR_extract (pl, 157 "test_file.dat.gz", 158 NULL, 159 0, 160 &process_replies, 161 "main-cls"); 162 EXTRACTOR_plugin_remove_all (pl); 163 return ret; 164 } 165 166 167 /* end of test_gzip.c */