DECLARE_TEST(foundation, environment) { lua_t* env = lua_allocate(); log_set_suppress(HASH_LUA, ERRORLEVEL_NONE); log_info(HASH_LUA, STRING_CONST("Running environment lua tests")); EXPECT_NE(env, 0); string_const_t testcode = string_const(STRING_CONST( "local ffi = require(\"ffi\")\n" "local foundation = require(\"foundation\")\n" "local C = ffi.C\n" "C.log_set_suppress(foundation.HASH_LUA, foundation.ERRORLEVEL_DEBUG)\n" "C.log_enable_prefix(false)\n" "foundation.log.info(\"Executable name: \" .. tostring(C.environment_executable_name()))\n" "local cmdline = \"\"\n" "local cmdline_tab = C.environment_command_line()\n" "local num = C.array_size(cmdline_tab)" "for i = 0, num-1 do\n" " cmdline = cmdline .. \" \" .. tostring(cmdline_tab[i])\n" "end\n" "foundation.log.info(\"Command line:\" .. cmdline)\n" "C.log_enable_prefix(true)\n" "C.log_set_suppress(foundation.HASH_LUA, foundation.ERRORLEVEL_INFO)\n" )); EXPECT_EQ(lua_eval_string(env, STRING_ARGS(testcode)), LUA_OK); log_info(HASH_LUA, STRING_CONST("Done running environment lua tests")); log_set_suppress(HASH_LUA, ERRORLEVEL_INFO); lua_deallocate(env); return 0; }
DECLARE_TEST(foundation, log) { lua_t* env = lua_allocate(); log_set_suppress(HASH_LUA, ERRORLEVEL_NONE); EXPECT_NE(env, 0); string_const_t testcode = string_const(STRING_CONST( "local ffi = require(\"ffi\")\n" "local foundation = require(\"foundation\")\n" "local C = ffi.C\n" "C.log_set_suppress(foundation.HASH_LUA, foundation.ERRORLEVEL_NONE)\n" "foundation.log.debug(\"Testing log debug output\")\n" "foundation.log.info(\"Testing log info output\")\n" "foundation.log.warn(\"Testing log warning output\")\n" "C.log_enable_prefix(false)\n" "foundation.log.error(\"Testing log error output without prefix\")\n" "C.log_enable_stdout(false)\n" "foundation.log.debug(\"Invisible on stdout\")\n" "C.log_enable_stdout(true)\n" "C.log_enable_prefix(true)\n" "C.log_set_suppress(foundation.HASH_LUA, foundation.ERRORLEVEL_INFO)\n" )); EXPECT_EQ(lua_eval_string(env, STRING_ARGS(testcode)), LUA_OK); EXPECT_EQ(error(), ERROR_SCRIPT); lua_deallocate(env); return 0; }
static int lua_import_stream(stream_t* stream, const uuid_t uuid, luaimport_dump_t* dump) { lua_t* env; lua_State* state; int result = 0; lua_readstream_t read_stream = { .stream = stream, }; env = lua_allocate(); state = lua_state(env); if (lua_load(state, lua_read_stream, &read_stream, "import") != 0) { log_errorf(HASH_LUA, ERROR_INTERNAL_FAILURE, STRING_CONST("Lua load failed: %s"), lua_tostring(state, -1)); lua_pop(state, 1); result = -1; goto exit; } lua_dump(state, lua_import_dump_writer, dump); if (lua_pcall(state, 0, 0, 0) != 0) { log_errorf(HASH_LUA, ERROR_INTERNAL_FAILURE, STRING_CONST("Lua pcall failed: %s"), lua_tostring(state, -1)); lua_pop(state, 1); result = -1; goto exit; } log_debug(HASH_LUA, STRING_CONST("Lua bytecode dump successful")); exit: lua_deallocate(env); return result; }