File

tests/test_util_jid.lua @ 8269:25237002aba4

mod_limits: Handle fractional outstanding balance values (caused by e3f7b6fa46ba) Fractional values were passed to string.sub() when doing buffer manipulations, and caused random bytes to be skipped in the stream.
author Matthew Wild <mwild1@gmail.com>
date Tue, 26 Sep 2017 17:48:33 +0100
parent 7473:a558fef9d018
line wrap: on
line source

-- Prosody IM
-- Copyright (C) 2008-2010 Matthew Wild
-- Copyright (C) 2008-2010 Waqas Hussain
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--

function join(join)
	assert_equal(join("a", "b", "c"), "a@b/c", "builds full JID");
	assert_equal(join("a", "b", nil), "a@b", "builds bare JID");
	assert_equal(join(nil, "b", "c"), "b/c", "builds full host JID");
	assert_equal(join(nil, "b", nil), "b", "builds bare host JID");
	assert_equal(join(nil, nil, nil), nil, "invalid JID is nil");
	assert_equal(join("a", nil, nil), nil, "invalid JID is nil");
	assert_equal(join(nil, nil, "c"), nil, "invalid JID is nil");
	assert_equal(join("a", nil, "c"), nil, "invalid JID is nil");
end


function split(split)
	local function test(input_jid, expected_node, expected_server, expected_resource)
		local rnode, rserver, rresource = split(input_jid);
		assert_equal(expected_node, rnode, "split("..tostring(input_jid)..") failed");
		assert_equal(expected_server, rserver, "split("..tostring(input_jid)..") failed");
		assert_equal(expected_resource, rresource, "split("..tostring(input_jid)..") failed");
	end

	-- Valid JIDs
	test("node@server", 		"node", "server", nil		);
	test("node@server/resource", 	"node", "server", "resource"        );
	test("server", 			nil, 	"server", nil               );
	test("server/resource", 	nil, 	"server", "resource"        );
	test("server/resource@foo", 	nil, 	"server", "resource@foo"    );
	test("server/resource@foo/bar",	nil, 	"server", "resource@foo/bar");

	-- Always invalid JIDs
	test(nil,                nil, nil, nil);
	test("node@/server",     nil, nil, nil);
	test("@server",          nil, nil, nil);
	test("@server/resource", nil, nil, nil);
	test("@/resource", nil, nil, nil);
end

function bare(bare)
	assert_equal(bare("user@host"), "user@host", "bare JID remains bare");
	assert_equal(bare("host"), "host", "Host JID remains host");
	assert_equal(bare("host/resource"), "host", "Host JID with resource becomes host");
	assert_equal(bare("user@host/resource"), "user@host", "user@host JID with resource becomes user@host");
	assert_equal(bare("user@/resource"), nil, "invalid JID is nil");
	assert_equal(bare("@/resource"), nil, "invalid JID is nil");
	assert_equal(bare("@/"), nil, "invalid JID is nil");
	assert_equal(bare("/"), nil, "invalid JID is nil");
	assert_equal(bare(""), nil, "invalid JID is nil");
	assert_equal(bare("@"), nil, "invalid JID is nil");
	assert_equal(bare("user@"), nil, "invalid JID is nil");
	assert_equal(bare("user@@"), nil, "invalid JID is nil");
	assert_equal(bare("user@@host"), nil, "invalid JID is nil");
	assert_equal(bare("user@@host/resource"), nil, "invalid JID is nil");
	assert_equal(bare("user@host/"), nil, "invalid JID is nil");
end

function compare(compare)
	assert_equal(compare("host", "host"), true, "host should match");
	assert_equal(compare("host", "other-host"), false, "host should not match");
	assert_equal(compare("other-user@host/resource", "host"), true, "host should match");
	assert_equal(compare("other-user@host", "user@host"), false, "user should not match");
	assert_equal(compare("user@host", "host"), true, "host should match");
	assert_equal(compare("user@host/resource", "host"), true, "host should match");
	assert_equal(compare("user@host/resource", "user@host"), true, "user and host should match");
	assert_equal(compare("user@other-host", "host"), false, "host should not match");
	assert_equal(compare("user@other-host", "user@host"), false, "host should not match");
end

function node(node)
	local function test(jid, expected_node)
		assert_equal(node(jid), expected_node, "Unexpected node for "..tostring(jid));
	end

	test("example.com", nil);
	test("foo.example.com", nil);
	test("foo.example.com/resource", nil);
	test("foo.example.com/some resource", nil);
	test("foo.example.com/some@resource", nil);

	test("foo@foo.example.com/some@resource", "foo");
	test("foo@example/some@resource", "foo");

	test("foo@example/@resource", "foo");
	test("foo@example@resource", nil);
	test("foo@example", "foo");
	test("foo", nil);

	test(nil, nil);
end

function host(host)
	local function test(jid, expected_host)
		assert_equal(host(jid), expected_host, "Unexpected host for "..tostring(jid));
	end

	test("example.com", "example.com");
	test("foo.example.com", "foo.example.com");
	test("foo.example.com/resource", "foo.example.com");
	test("foo.example.com/some resource", "foo.example.com");
	test("foo.example.com/some@resource", "foo.example.com");

	test("foo@foo.example.com/some@resource", "foo.example.com");
	test("foo@example/some@resource", "example");

	test("foo@example/@resource", "example");
	test("foo@example@resource", nil);
	test("foo@example", "example");
	test("foo", "foo");

	test(nil, nil);
end

function resource(resource)
	local function test(jid, expected_resource)
		assert_equal(resource(jid), expected_resource, "Unexpected resource for "..tostring(jid));
	end

	test("example.com", nil);
	test("foo.example.com", nil);
	test("foo.example.com/resource", "resource");
	test("foo.example.com/some resource", "some resource");
	test("foo.example.com/some@resource", "some@resource");

	test("foo@foo.example.com/some@resource", "some@resource");
	test("foo@example/some@resource", "some@resource");

	test("foo@example/@resource", "@resource");
	test("foo@example@resource", nil);
	test("foo@example", nil);
	test("foo", nil);
	test("/foo", nil);
	test("@x/foo", nil);
	test("@/foo", nil);

	test(nil, nil);
end