aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_core_stanza_router.lua
blob: 01e33d4e9a8d0e4a3fefa5f528c7a40f01bf1b64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
-- Prosody IM v0.2
-- Copyright (C) 2008 Matthew Wild
-- Copyright (C) 2008 Waqas Hussain
-- 
-- This program is free software; you can redistribute it and/or
-- modify it under the terms of the GNU General Public License
-- as published by the Free Software Foundation; either version 2
-- of the License, or (at your option) any later version.
-- 
-- This program 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 General Public License for more details.
-- 
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
--



function core_process_stanza(core_process_stanza)
	local s2sout_session = { to_host = "remotehost", from_host = "localhost", type = "s2sout" }
	local s2sin_session = { from_host = "remotehost", to_host = "localhost", type = "s2sin" }
	local local_host_session = { host = "localhost", type = "local" }
	local local_user_session = { username = "user", host = "localhost", resource = "resource", full_jid = "user@localhost/resource", type = "c2s" }
	local hosts = {
			["localhost"] = local_host_session;
			}
				
	-- Test message routing
	local function test_message_full_jid()
		local env = testlib_new_env();
		local msg = stanza.stanza("message", { to = "user@localhost/resource", type = "chat" }):tag("body"):text("Hello world");
		
		local target_routed;
		
		function env.core_route_stanza(p_origin, p_stanza)
			assert_equal(p_origin, local_user_session, "origin of routed stanza is not correct");
			assert_equal(p_stanza, msg, "routed stanza is not correct one: "..p_stanza:pretty_print());
			target_routed = true;
		end
		env.hosts = hosts;
		setfenv(core_process_stanza, env);
		assert_equal(core_process_stanza(local_user_session, msg), nil, "core_process_stanza returned incorrect value");
		assert_equal(target_routed, true, "stanza was not routed successfully");
	end

	local function test_message_bare_jid()
		local env = testlib_new_env();
		local msg = stanza.stanza("message", { to = "user@localhost", type = "chat" }):tag("body"):text("Hello world");
		
		local target_routed;
		
		function env.core_route_stanza(p_origin, p_stanza)
			assert_equal(p_origin, local_user_session, "origin of routed stanza is not correct");
			assert_equal(p_stanza, msg, "routed stanza is not correct one: "..p_stanza:pretty_print());
			target_routed = true;
		end
		env.hosts = hosts;
		setfenv(core_process_stanza, env);
		assert_equal(core_process_stanza(local_user_session, msg), nil, "core_process_stanza returned incorrect value");
		assert_equal(target_routed, true, "stanza was not routed successfully");
	end

	local function test_message_no_to()
		local env = testlib_new_env();
		local msg = stanza.stanza("message", { type = "chat" }):tag("body"):text("Hello world");
		
		local target_handled;
		
		function env.core_route_stanza(p_origin, p_stanza)
		end

		function env.core_handle_stanza(p_origin, p_stanza)
			assert_equal(p_origin, local_user_session, "origin of handled stanza is not correct");
			assert_equal(p_stanza, msg, "handled stanza is not correct one: "..p_stanza:pretty_print());
			target_handled = true;		
		end
		env.hosts = hosts;
		setfenv(core_process_stanza, env);
		assert_equal(core_process_stanza(local_user_session, msg), nil, "core_process_stanza returned incorrect value");
		assert_equal(target_handled, true, "stanza was not handled successfully");
	end

	local function test_message_to_remote_bare()
		local env = testlib_new_env();
		local msg = stanza.stanza("message", { to = "user@remotehost", type = "chat" }):tag("body"):text("Hello world");
		
		local target_routed;
		
		function env.core_route_stanza(p_origin, p_stanza)
			assert_equal(p_origin, local_user_session, "origin of handled stanza is not correct");
			assert_equal(p_stanza, msg, "handled stanza is not correct one: "..p_stanza:pretty_print());
			target_routed = true;		
		end

		env.hosts = hosts;
		setfenv(core_process_stanza, env);
		assert_equal(core_process_stanza(local_user_session, msg), nil, "core_process_stanza returned incorrect value");
		assert_equal(target_routed, true, "stanza was not routed successfully");
	end

	local function test_message_to_remote_server()
		local env = testlib_new_env();
		local msg = stanza.stanza("message", { to = "remotehost", type = "chat" }):tag("body"):text("Hello world");
		
		local target_routed;
		
		function env.core_route_stanza(p_origin, p_stanza)
			assert_equal(p_origin, local_user_session, "origin of handled stanza is not correct");
			assert_equal(p_stanza, msg, "handled stanza is not correct one: "..p_stanza:pretty_print());
			target_routed = true;		
		end

		env.hosts = hosts;
		setfenv(core_process_stanza, env);
		assert_equal(core_process_stanza(local_user_session, msg), nil, "core_process_stanza returned incorrect value");
		assert_equal(target_routed, true, "stanza was not routed successfully");
	end

	--IQ tests


	local function test_iq_to_remote_server()
		local env = testlib_new_env();
		local msg = stanza.stanza("iq", { to = "remotehost", type = "chat" }):tag("body"):text("Hello world");
		
		local target_routed;
		
		function env.core_route_stanza(p_origin, p_stanza)
			assert_equal(p_origin, local_user_session, "origin of handled stanza is not correct");
			assert_equal(p_stanza, msg, "handled stanza is not correct one: "..p_stanza:pretty_print());
			target_routed = true;		
		end

		function env.core_handle_stanza(p_origin, p_stanza)
			
		end

		env.hosts = hosts;
		setfenv(core_process_stanza, env);
		assert_equal(core_process_stanza(local_user_session, msg), nil, "core_process_stanza returned incorrect value");
		assert_equal(target_routed, true, "stanza was not routed successfully");
	end

	local function test_iq_error_to_local_user()
		local env = testlib_new_env();
		local msg = stanza.stanza("iq", { to = "user@localhost/resource", from = "user@remotehost", type = "error" }):tag("error", { type = 'cancel' }):tag("item-not-found", { xmlns='urn:ietf:params:xml:ns:xmpp-stanzas' });
		
		local target_routed;
		
		function env.core_route_stanza(p_origin, p_stanza)
			assert_equal(p_origin, s2sin_session, "origin of handled stanza is not correct");
			assert_equal(p_stanza, msg, "handled stanza is not correct one: "..p_stanza:pretty_print());
			target_routed = true;		
		end

		function env.core_handle_stanza(p_origin, p_stanza)
			
		end

		env.hosts = hosts;
		setfenv(core_process_stanza, env);
		assert_equal(core_process_stanza(s2sin_session, msg), nil, "core_process_stanza returned incorrect value");
		assert_equal(target_routed, true, "stanza was not routed successfully");
	end

	runtest(test_message_full_jid, "Messages with full JID destinations get routed");
	runtest(test_message_bare_jid, "Messages with bare JID destinations get routed");
	runtest(test_message_no_to, "Messages with no destination are handled by the server");
	runtest(test_message_to_remote_bare, "Messages to a remote user are routed by the server");
	runtest(test_message_to_remote_server, "Messages to a remote server's JID are routed");

	runtest(test_iq_to_remote_server, "iq to a remote server's JID are routed");
	runtest(test_iq_error_to_local_user, "iq type=error to a local user's JID are routed");

end