aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libserver/cfg_rcl.c13
-rw-r--r--test/CMakeLists.txt19
-rw-r--r--test/lua/rsa.lua45
-rw-r--r--test/lua/test_rsa.lua39
-rw-r--r--test/rspamd_lua_test.c81
-rw-r--r--test/rspamd_test_suite.c5
-rw-r--r--test/tests.h2
7 files changed, 159 insertions, 45 deletions
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c
index 5ffd07ced..21dff7dd1 100644
--- a/src/libserver/cfg_rcl.c
+++ b/src/libserver/cfg_rcl.c
@@ -681,6 +681,7 @@ rspamd_rcl_lua_handler (struct rspamd_config *cfg, const ucl_object_t *obj,
tmp2 = g_strdup (lua_src);
lua_dir = dirname (tmp1);
lua_file = basename (tmp2);
+
if (lua_dir && lua_file) {
cur_dir = g_malloc (PATH_MAX);
if (getcwd (cur_dir, PATH_MAX) != NULL && chdir (lua_dir) != -1) {
@@ -694,7 +695,7 @@ rspamd_rcl_lua_handler (struct rspamd_config *cfg, const ucl_object_t *obj,
lua_tostring (L, -1));
if (chdir (cur_dir) == -1) {
msg_err ("cannot chdir to %s: %s", cur_dir,
- strerror (errno));;
+ strerror (errno));
}
g_free (cur_dir);
g_free (tmp1);
@@ -712,7 +713,7 @@ rspamd_rcl_lua_handler (struct rspamd_config *cfg, const ucl_object_t *obj,
lua_tostring (L, -1));
if (chdir (cur_dir) == -1) {
msg_err ("cannot chdir to %s: %s", cur_dir,
- strerror (errno));;
+ strerror (errno));
}
g_free (cur_dir);
g_free (tmp1);
@@ -724,7 +725,7 @@ rspamd_rcl_lua_handler (struct rspamd_config *cfg, const ucl_object_t *obj,
g_set_error (err, CFG_RCL_ERROR, ENOENT, "cannot chdir to %s: %s",
lua_src, strerror (errno));
if (chdir (cur_dir) == -1) {
- msg_err ("cannot chdir to %s: %s", cur_dir, strerror (errno));;
+ msg_err ("cannot chdir to %s: %s", cur_dir, strerror (errno));
}
g_free (cur_dir);
g_free (tmp1);
@@ -733,13 +734,15 @@ rspamd_rcl_lua_handler (struct rspamd_config *cfg, const ucl_object_t *obj,
}
if (chdir (cur_dir) == -1) {
- msg_err ("cannot chdir to %s: %s", cur_dir, strerror (errno));;
+ msg_err ("cannot chdir to %s: %s", cur_dir, strerror (errno));
}
g_free (cur_dir);
g_free (tmp1);
g_free (tmp2);
}
else {
+ g_free (tmp1);
+ g_free (tmp2);
g_set_error (err, CFG_RCL_ERROR, ENOENT, "cannot find to %s: %s",
lua_src, strerror (errno));
return FALSE;
@@ -775,7 +778,7 @@ rspamd_rcl_add_module_path (struct rspamd_config *cfg,
globbuf.gl_offs = 0;
len = strlen (path) + sizeof ("*.lua");
pattern = g_malloc (len);
- snprintf (pattern, len, "%s%s", path, "*.lua");
+ rspamd_snprintf (pattern, len, "%s%s", path, "*.lua");
if (glob (pattern, GLOB_DOOFFS, NULL, &globbuf) == 0) {
for (i = 0; i < globbuf.gl_pathc; i++) {
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index f5743bd2f..b4fa018d2 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -11,6 +11,7 @@ SET(TESTSRC rspamd_expression_test.c
rspamd_shingles_test.c
rspamd_upstream_test.c
rspamd_http_test.c
+ rspamd_lua_test.c
rspamd_test_suite.c)
ADD_EXECUTABLE(rspamd-test EXCLUDE_FROM_ALL ${TESTSRC})
@@ -18,4 +19,20 @@ SET_TARGET_PROPERTIES(rspamd-test PROPERTIES LINKER_LANGUAGE C)
SET_TARGET_PROPERTIES(rspamd-test PROPERTIES COMPILE_FLAGS "-DRSPAMD_TEST")
TARGET_LINK_LIBRARIES(rspamd-test rspamd-server)
-TARGET_LINK_LIBRARIES(rspamd-test ${RSPAMD_REQUIRED_LIBRARIES}) \ No newline at end of file
+TARGET_LINK_LIBRARIES(rspamd-test ${RSPAMD_REQUIRED_LIBRARIES})
+TARGET_LINK_LIBRARIES(rspamd-test stemmer)
+
+IF(NOT "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
+ # Also add dependencies for convenience
+ FILE(GLOB LUA_TESTS "${CMAKE_CURRENT_SOURCE_DIR}/lua/*")
+ FOREACH(_LF IN LISTS LUA_TESTS)
+ GET_FILENAME_COMPONENT(_NM "${_LF}" NAME)
+ SET(_DS "${CMAKE_CURRENT_BINARY_DIR}/lua/${_NM}")
+ ADD_CUSTOM_TARGET("${_NM}" COMMAND
+ ${CMAKE_COMMAND} -E copy_if_different ${_LF} ${_DS}
+ SOURCES "${_LF}"
+ )
+ ADD_DEPENDENCIES(rspamd-test "${_NM}")
+ ENDFOREACH()
+
+ENDIF() \ No newline at end of file
diff --git a/test/lua/rsa.lua b/test/lua/rsa.lua
new file mode 100644
index 000000000..75d07fd30
--- /dev/null
+++ b/test/lua/rsa.lua
@@ -0,0 +1,45 @@
+-- Test rsa signing
+
+describe("rsa signarture test", function()
+ local rsa_privkey = require "rspamd_rsa_privkey"
+ local rsa_pubkey = require "rspamd_rsa_pubkey"
+ local rsa_signature = require "rspamd_rsa_signature"
+ local rsa = require "rspamd_rsa"
+ local pubkey = 'testkey.pub'
+ local privkey = 'testkey'
+ local data = 'test.data'
+ local signature = 'test.sig'
+
+ -- Signing test
+ local rsa_key = rsa_privkey.load(string.format('%s/%s', test_dir, privkey))
+
+ if not rsa_key then
+ return -1
+ end
+
+ local rsa_sig = rsa.sign_file(rsa_key, string.format('%s/%s', test_dir, data))
+
+ if not rsa_sig then
+ return -1
+ end
+
+ rsa_sig:save(string.format('%s/%s', test_dir, signature), true)
+
+ -- Verifying test
+ rsa_key = rsa_pubkey.load(string.format('%s/%s', test_dir, pubkey))
+
+ if not rsa_key then
+ return -1
+ end
+
+ rsa_sig = rsa_signature.load(string.format('%s/%s', test_dir, signature))
+
+ if not rsa_sig then
+ return -1
+ end
+
+ if not rsa.verify_file(rsa_key, rsa_sig, string.format('%s/%s', test_dir, data)) then
+ return -1
+ end
+
+end)
diff --git a/test/lua/test_rsa.lua b/test/lua/test_rsa.lua
deleted file mode 100644
index 83a6a9e45..000000000
--- a/test/lua/test_rsa.lua
+++ /dev/null
@@ -1,39 +0,0 @@
--- Test rsa signing
-
-local pubkey = 'testkey.pub'
-local privkey = 'testkey'
-local data = 'test.data'
-local signature = 'test.sig'
-
--- Signing test
-local rsa_key = rsa_privkey.load(string.format('%s/%s', test_dir, privkey))
-
-if not rsa_key then
- return -1
-end
-
-local rsa_sig = rsa.sign_file(rsa_key, string.format('%s/%s', test_dir, data))
-
-if not rsa_sig then
- return -1
-end
-
-rsa_sig:save(string.format('%s/%s', test_dir, signature), true)
-
--- Verifying test
-rsa_key = rsa_pubkey.load(string.format('%s/%s', test_dir, pubkey))
-
-if not rsa_key then
- return -1
-end
-
-rsa_sig = rsa_signature.load(string.format('%s/%s', test_dir, signature))
-
-if not rsa_sig then
- return -1
-end
-
-if not rsa.verify_file(rsa_key, rsa_sig, string.format('%s/%s', test_dir, data)) then
- return -1
-end
-
diff --git a/test/rspamd_lua_test.c b/test/rspamd_lua_test.c
new file mode 100644
index 000000000..cd3b152cd
--- /dev/null
+++ b/test/rspamd_lua_test.c
@@ -0,0 +1,81 @@
+/* Copyright (c) 2015, Vsevolod Stakhov
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "main.h"
+#include "util.h"
+#include "lua/lua_common.h"
+
+static const char *lua_src = "./lua";
+
+void
+rspamd_lua_test_func (int argc, char **argv)
+{
+ lua_State *L = rspamd_lua_init (NULL);
+ gchar rp[PATH_MAX], path_buf[PATH_MAX];
+ const gchar *old_path;
+ guint i;
+
+ msg_info ("Starting lua tests");
+
+ if (realpath (lua_src, rp) == NULL) {
+ msg_err ("cannod find path %s: %s", lua_src, strerror (errno));
+ g_assert (0);
+ }
+
+ /* Set lua path */
+ lua_getglobal (L, "package");
+ lua_getfield (L, -1, "path");
+ old_path = luaL_checkstring (L, -1);
+
+ rspamd_snprintf (path_buf, sizeof (path_buf), "%s;%s/?.lua;%s/busted/?.lua",
+ old_path, rp, rp);
+ lua_pop (L, 1);
+ lua_pushstring (L, path_buf);
+ lua_setfield (L, -2, "path");
+ lua_pop (L, 1);
+
+ lua_getglobal (L, "arg");
+
+ if (lua_type (L, -1) != LUA_TTABLE) {
+ lua_newtable (L);
+ }
+
+ for (i = 0; i < argc - 1; i ++) {
+ lua_pushinteger (L, i + 1);
+ lua_pushstring (L, argv[i]);
+ lua_settable (L, -3);
+ }
+
+ lua_setglobal (L, "arg");
+ lua_pop (L, 1);
+
+ rspamd_snprintf (path_buf, sizeof (path_buf),
+ "require 'busted.runner'({ batch = true })");
+ if (luaL_dostring (L, path_buf) != 0) {
+ rspamd_fprintf (stderr, "run test failed: %s", lua_tostring (L, -1));
+ g_assert (0);
+ }
+
+ exit (EXIT_SUCCESS);
+}
diff --git a/test/rspamd_test_suite.c b/test/rspamd_test_suite.c
index 1be17611b..a70a0102f 100644
--- a/test/rspamd_test_suite.c
+++ b/test/rspamd_test_suite.c
@@ -13,6 +13,11 @@ main (int argc, char **argv)
{
struct rspamd_config *cfg;
+ if (argc > 0 && strcmp (argv[1], "lua") == 0) {
+ /* Special lua testing mode */
+ rspamd_lua_test_func (argc - 1, &argv[2]);
+ }
+
g_test_init (&argc, &argv, NULL);
rspamd_main = (struct rspamd_main *)g_malloc (sizeof (struct rspamd_main));
diff --git a/test/tests.h b/test/tests.h
index 8f4d8b80f..ae69d9d96 100644
--- a/test/tests.h
+++ b/test/tests.h
@@ -41,4 +41,6 @@ void rspamd_shingles_test_func (void);
void rspamd_http_test_func (void);
+void rspamd_lua_test_func (int argc, char **argv);
+
#endif