From: Vsevolod Stakhov Date: Fri, 27 Feb 2015 15:33:58 +0000 (+0000) Subject: Add lua test framework. X-Git-Tag: 0.9.0~596 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=2f20e4f7fe5cf9b40dc8781675672e69437166e3;p=rspamd.git Add lua test framework. --- diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f5743bd2f..9932fb87d 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,13 @@ 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}) + FILE(COPY "${CMAKE_CURRENT_SOURCE_DIR}/busted.lua" + "${CMAKE_CURRENT_SOURCE_DIR}/busted" + "${CMAKE_CURRENT_SOURCE_DIR}/lua" + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + +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..83a6a9e45 --- /dev/null +++ b/test/lua/rsa.lua @@ -0,0 +1,39 @@ +-- 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/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..46303b356 --- /dev/null +++ b/test/rspamd_lua_test.c @@ -0,0 +1,75 @@ +/* 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 (void) +{ + lua_State *L = rspamd_lua_init (NULL); + gchar *lua_file; + gchar rp[PATH_MAX]; + glob_t globbuf; + gchar *pattern; + guint i, len; + + 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); + } + + globbuf.gl_offs = 0; + len = strlen (rp) + sizeof ("*.lua") + 1; + pattern = g_malloc (len); + rspamd_snprintf (pattern, len, "%s/%s", rp, "*.lua"); + + if (glob (pattern, GLOB_DOOFFS, NULL, &globbuf) == 0) { + for (i = 0; i < globbuf.gl_pathc; i++) { + lua_file = globbuf.gl_pathv[i]; + + if (luaL_loadfile (L, lua_file) != 0) { + msg_err ("load test from %s failed", lua_file); + g_assert (0); + } + /* Now do it */ + if (lua_pcall (L, 0, LUA_MULTRET, 0) != 0) { + msg_err ("run test from %s failed: %s", lua_file, + lua_tostring (L, -1)); + g_assert (0); + } + } + globfree (&globbuf); + g_free (pattern); + } + else { + msg_err ("glob for %s failed: %s", pattern, strerror (errno)); + g_assert (0); + } +} diff --git a/test/rspamd_test_suite.c b/test/rspamd_test_suite.c index 1be17611b..9aece9b89 100644 --- a/test/rspamd_test_suite.c +++ b/test/rspamd_test_suite.c @@ -56,6 +56,7 @@ main (int argc, char **argv) g_test_add_func ("/rspamd/upstream", rspamd_upstream_test_func); g_test_add_func ("/rspamd/shingles", rspamd_shingles_test_func); g_test_add_func ("/rspamd/http", rspamd_http_test_func); + g_test_add_func ("/rspamd/lua", rspamd_lua_test_func); g_test_run (); diff --git a/test/tests.h b/test/tests.h index 8f4d8b80f..1d14bde4b 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 (void); + #endif