Add parsertest for Linux
authorAndre Heinecke <aheinecke@intevation.de>
Thu, 15 Sep 2016 09:34:58 +0000 (11:34 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Thu, 15 Sep 2016 09:34:58 +0000 (11:34 +0200)
* Makefile.am (SUBDIRS): Only include tests for linux.
* configure.ac: Enable linux build. Check for stpcpy.
* tests/Makefile.am: New.
* tests/run-parser.cpp: New.
* tests/t-parser.cpp: New.

--
t-parser is currently just a dummy but run-parser can be used
to run the parser on a mail file.

Makefile.am
configure.ac
tests/Makefile.am [new file with mode: 0644]
tests/run-parser.cpp [new file with mode: 0644]
tests/t-parser.cpp [new file with mode: 0644]

index e5074fe..1c99b44 100644 (file)
@@ -24,8 +24,11 @@ DISTCHECK_CONFIGURE_FLAGS = --host=@host@  --build=@build@ \
 # Note: Do not put ChangeLog-2011 here - it exists only in the repo.
 EXTRA_DIST = autogen.sh autogen.rc
 
-
+if HAVE_W32_SYSTEM
 SUBDIRS = src forms po m4 doc
+else
+SUBDIRS = tests
+endif
 
 dist-hook: gen-ChangeLog
        echo "$(VERSION)" > $(distdir)/VERSION
index 340df73..e7e8f57 100644 (file)
@@ -135,11 +135,13 @@ case "${host}" in
         have_w32_system=yes
         ;;
     *)
-    AC_MSG_ERROR([[
+    AC_MSG_NOTICE([[
 ***
-*** This software my only be build for W32 systems.  Use
+*** This software is only useful for W32 systems.  Use
 ***     ./autogen.sh --build-w32
 *** to prepare it for such a build.
+***
+*** For your current host only tests will be built!
 ***]])
        ;;
 esac
@@ -185,6 +187,9 @@ USE_NLS=yes
 AC_HEADER_STDC
 AC_CHECK_HEADERS(string.h unistd.h langinfo.h termio.h locale.h)
 
+# Check for functions
+AC_REPLACE_FUNCS(stpcpy)
+
 # Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
 AC_C_INLINE
@@ -208,7 +213,11 @@ if test "$GCC" = yes; then
     # causes gpgol not to be loaded by Outlook due to a runtime error.
     # This needs to be analysed but could be an incompatibility between
     # gcc's stack protection and COM / Outlook system calls.
-    HARDENING="-Wl,--dynamicbase -Wl,--nxcompat -fno-exceptions -D_FORTIFY_SOURCE=2 -O0"
+    if test "$have_w32_system" = yes; then
+        HARDENING="-Wl,--dynamicbase -Wl,--nxcompat -fno-exceptions -D_FORTIFY_SOURCE=2 -O0"
+    else
+        HARDENING="-fPIC"
+    fi
     CFLAGS="$CFLAGS $HARDENING"
     CXXFLAGS="$CXXFLAGS $HARDENING"
 
@@ -307,5 +316,7 @@ forms/Makefile
 doc/Makefile
 po/Makefile.in
 m4/Makefile
+tests/Makefile
 ])
+
 AC_OUTPUT
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644 (file)
index 0000000..dfb5222
--- /dev/null
@@ -0,0 +1,47 @@
+# Makefile.am - Makefile for GpgOL tests.
+# Copyright (C) 2016 Intevation GmbH
+#
+# This file is part of GPGOL.
+#
+# GpgOL is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# GpgOL is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+## Process this file with automake to produce Makefile.in
+
+GPG = gpg
+
+TESTS_ENVIRONMENT = GNUPGHOME=$(abs_srcdir)/tests/gnupg_home
+
+TESTS = initial.test t-parser
+
+AM_LDFLAGS = @GPGME_LIBS@ -lgpgmepp
+
+AM_CFLAGS = -I$(top_srcdir)/src $(GPGME_CFLAGS) $(LIBASSUAN_CFLAGS)
+AM_CXXFLAGS = -I$(top_srcdir)/src $(GPGME_CFLAGS) $(GPGME_CFLAGS)/gpgme++ \
+                         $(LIBASSUAN_CFLAGS) -std=c++11
+
+parser_SRC= ../src/parsecontroller.cpp \
+                       ../src/parsecontroller.h \
+                       ../src/attachment.cpp ../src/attachment.h \
+                       ../src/mimedataprovider.h ../src/mimedataprovider.cpp \
+                       ../src/rfc822parse.c ../src/rfc822parse.h \
+                       ../src/rfc2047parse.c ../src/rfc2047parse.h \
+                       ../src/common_indep.c ../src/common_indep.h \
+                       ../src/xmalloc.h
+
+t_parser_SOURCES = t-parser.cpp $(parser_SRC)
+run_parser_SOURCES = run-parser.cpp $(parser_SRC)
+
+noinst_PROGRAMS = t-parser run-parser
+
+export GNUPGHOME := $(abs_srcdir)/tests/gnupg_home
diff --git a/tests/run-parser.cpp b/tests/run-parser.cpp
new file mode 100644 (file)
index 0000000..c7a5b3a
--- /dev/null
@@ -0,0 +1,86 @@
+/* run-parser.cpp - Test for gpgOL's parser.
+ *    Copyright (C) 2016 Intevation GmbH
+ *
+ * This file is part of GpgOL.
+ *
+ * GpgOL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * GpgOL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdio.h>
+#include "parsecontroller.h"
+#include <iostream>
+#include "attachment.h"
+#include <gpgme.h>
+
+static int
+show_usage (int ex)
+{
+  fputs ("usage: run-parser [options] FILE\n\n"
+         "Options:\n"
+         "  --verbose        run in verbose mode\n"
+         "  --type           GPGOL_MESSAGETYPE\n"
+         , stderr);
+  exit (ex);
+}
+
+int main(int argc, char **argv)
+{
+  int last_argc = -1;
+  int msgtype = 0;
+  FILE *fp_in = NULL;
+
+  gpgme_check_version (NULL);
+
+  if (argc)
+    { argc--; argv++; }
+
+  while (argc && last_argc != argc )
+    {
+      last_argc = argc;
+      if (!strcmp (*argv, "--"))
+        {
+          argc--; argv++;
+          break;
+        }
+      else if (!strcmp (*argv, "--help"))
+        show_usage (0);
+      else if (!strcmp (*argv, "--verbose"))
+        {
+          opt.enable_debug |= DBG_MIME_PARSER;
+          set_log_file ("stderr");
+          argc--; argv++;
+        }
+      else if (!strcmp (*argv, "--type"))
+        {
+          msgtype = atoi (*(argv + 1));
+          argc--; argv++;
+          argc--; argv++;
+        }
+    }
+  if (argc < 1 || argc > 2)
+    show_usage (1);
+
+  fp_in = fopen (argv[0], "rb");
+
+  ParseController parser(fp_in, (msgtype_t)msgtype);
+  parser.parse();
+  std::cout << "Decrypt result:\n" << parser.decrypt_result();
+  std::cout << "Verify result:\n" << parser.verify_result();
+  std::cout << "BEGIN BODY\n" << parser.get_body() << "\nEND BODY";
+  std::cout << "BEGIN HTML\n" << parser.get_html_body() << "\nEND HTML";
+  for (auto attach: parser.get_attachments())
+    {
+      std::cout << "Attachment: " << attach->get_display_name();
+    }
+}
diff --git a/tests/t-parser.cpp b/tests/t-parser.cpp
new file mode 100644 (file)
index 0000000..6c1d99a
--- /dev/null
@@ -0,0 +1,23 @@
+/* t-parser.cpp - Test for gpgOL's parser.
+ *    Copyright (C) 2016 Intevation GmbH
+ *
+ * This file is part of GpgOL.
+ *
+ * GpgOL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * GpgOL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+int main()
+{
+  return 0;
+}