libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

test_bzip2.c (4350B)


      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_bzip2.c
     22  * @brief testcase for the bzip2 decompression (using IPC logic)
     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                    "test"))
     68   {
     69     fprintf (stderr, "plugin name invalid\n");
     70     ret = 4;
     71     return 1;
     72   }
     73   if (EXTRACTOR_METATYPE_COMMENT != type)
     74   {
     75     fprintf (stderr, "type invalid\n");
     76     ret = 5;
     77     return 1;
     78   }
     79   if (EXTRACTOR_METAFORMAT_UTF8 != format)
     80   {
     81     fprintf (stderr, "format invalid\n");
     82     ret = 6;
     83     return 1;
     84   }
     85   if ( (NULL == data_mime_type) ||
     86        (0 != strcmp ("<no mime>",
     87                      data_mime_type) ) )
     88   {
     89     fprintf (stderr, "bad mime type\n");
     90     ret = 7;
     91     return 1;
     92   }
     93   if ( (2 == ret) &&
     94        (data_len == strlen (HLO) + 1) &&
     95        (0 == strncmp (data,
     96                       HLO,
     97                       strlen (HLO))) )
     98   {
     99 #if 0
    100     fprintf (stderr, "Received '%s'\n", HLO);
    101 #endif
    102     ret = 1;
    103     return 0;
    104   }
    105   if ( (1 == ret) &&
    106        (data_len == strlen (GOB) + 1) &&
    107        (0 == strncmp (data,
    108                       GOB,
    109                       strlen (GOB))) )
    110   {
    111 #if 0
    112     fprintf (stderr, "Received '%s'\n", GOB);
    113 #endif
    114     ret = 0;
    115     return 1;
    116   }
    117   fprintf (stderr, "Invalid meta data\n");
    118   ret = 8;
    119   return 1;
    120 }
    121 
    122 
    123 /**
    124  * Main function for the bz2 testcase.
    125  *
    126  * @param argc number of arguments (ignored)
    127  * @param argv arguments (ignored)
    128  * @return 0 on success
    129  */
    130 int
    131 main (int argc, char *argv[])
    132 {
    133   struct EXTRACTOR_PluginList *pl;
    134 
    135   /* change environment to find 'extractor_test' plugin which is
    136      not installed but should be in the current directory (or .libs)
    137      on 'make check' */
    138   if (0 != putenv ("LIBEXTRACTOR_PREFIX=.:.libs/"))
    139     fprintf (stderr,
    140              "Failed to update my environment, plugin loading may fail: %s\n",
    141              strerror (errno));
    142   pl = EXTRACTOR_plugin_add_config (NULL, "test(test)",
    143                                     EXTRACTOR_OPTION_DEFAULT_POLICY);
    144   if (NULL == pl)
    145   {
    146     fprintf (stderr, "failed to load test plugin\n");
    147     return 1;
    148   }
    149   if (0 != access ("test_file.dat.bz2",
    150                    R_OK))
    151     return 77;
    152   EXTRACTOR_extract (pl,
    153                      "test_file.dat.bz2",
    154                      NULL,
    155                      0,
    156                      &process_replies,
    157                      "main-cls");
    158   EXTRACTOR_plugin_remove_all (pl);
    159   return ret;
    160 }
    161 
    162 
    163 /* end of test_bzip2.c */