Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
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;
}