File

tests/test_util_rfc6724.lua @ 8706:e2919978673e

net.http: Fix parameter order to http request callbacks Commit e3b9dc9dd940 changed the parameter order in 2013, but did not update the names of the parameters in the callback function. Due to this inconsistency, 12df41a5a4b1 accidentally reversed the order when fixing the variable names without fixing where they are used. Additionally the documentation was incorrect (since 2013), and this has also now been fixed.
author Matthew Wild <mwild1@gmail.com>
date Wed, 04 Apr 2018 18:27:44 +0100
parent 5609:f12d1c03dd94
line wrap: on
line source

-- Prosody IM
-- Copyright (C) 2011-2013 Florian Zeitz
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--

function source(source)
	local new_ip = require"util.ip".new_ip;
	assert_equal(source(new_ip("2001:db8:1::1", "IPv6"),
			{new_ip("2001:db8:3::1", "IPv6"), new_ip("fe80::1", "IPv6")}).addr,
		"2001:db8:3::1",
		"prefer appropriate scope");
	assert_equal(source(new_ip("ff05::1", "IPv6"),
			{new_ip("2001:db8:3::1", "IPv6"), new_ip("fe80::1", "IPv6")}).addr,
		"2001:db8:3::1",
		"prefer appropriate scope");
	assert_equal(source(new_ip("2001:db8:1::1", "IPv6"),
			{new_ip("2001:db8:1::1", "IPv6"), new_ip("2001:db8:2::1", "IPv6")}).addr,
		"2001:db8:1::1",
		"prefer same address"); -- "2001:db8:1::1" should be marked "deprecated" here, we don't handle that right now
	assert_equal(source(new_ip("fe80::1", "IPv6"),
			{new_ip("fe80::2", "IPv6"), new_ip("2001:db8:1::1", "IPv6")}).addr,
		"fe80::2",
		"prefer appropriate scope"); -- "fe80::2" should be marked "deprecated" here, we don't handle that right now
	assert_equal(source(new_ip("2001:db8:1::1", "IPv6"),
			{new_ip("2001:db8:1::2", "IPv6"), new_ip("2001:db8:3::2", "IPv6")}).addr,
		"2001:db8:1::2",
		"longest matching prefix");
--[[ "2001:db8:1::2" should be a care-of address and "2001:db8:3::2" a home address, we can't handle this and would fail
	assert_equal(source(new_ip("2001:db8:1::1", "IPv6"),
			{new_ip("2001:db8:1::2", "IPv6"), new_ip("2001:db8:3::2", "IPv6")}).addr,
		"2001:db8:3::2",
		"prefer home address");
]]
	assert_equal(source(new_ip("2002:c633:6401::1", "IPv6"),
			{new_ip("2002:c633:6401::d5e3:7953:13eb:22e8", "IPv6"), new_ip("2001:db8:1::2", "IPv6")}).addr,
		"2002:c633:6401::d5e3:7953:13eb:22e8",
		"prefer matching label"); -- "2002:c633:6401::d5e3:7953:13eb:22e8" should be marked "temporary" here, we don't handle that right now
	assert_equal(source(new_ip("2001:db8:1::d5e3:0:0:1", "IPv6"),
			{new_ip("2001:db8:1::2", "IPv6"), new_ip("2001:db8:1::d5e3:7953:13eb:22e8", "IPv6")}).addr,
		"2001:db8:1::d5e3:7953:13eb:22e8",
		"prefer temporary address") -- "2001:db8:1::2" should be marked "public" and "2001:db8:1::d5e3:7953:13eb:22e8" should be marked "temporary" here, we don't handle that right now
end

function destination(dest)
	local order;
	local new_ip = require"util.ip".new_ip;
	order = dest({new_ip("2001:db8:1::1", "IPv6"), new_ip("198.51.100.121", "IPv4")},
		{new_ip("2001:db8:1::2", "IPv6"), new_ip("fe80::1", "IPv6"), new_ip("169.254.13.78", "IPv4")})
	assert_equal(order[1].addr, "2001:db8:1::1", "prefer matching scope");
	assert_equal(order[2].addr, "198.51.100.121", "prefer matching scope");

	order = dest({new_ip("2001:db8:1::1", "IPv6"), new_ip("198.51.100.121", "IPv4")},
		{new_ip("fe80::1", "IPv6"), new_ip("198.51.100.117", "IPv4")})
	assert_equal(order[1].addr, "198.51.100.121", "prefer matching scope");
	assert_equal(order[2].addr, "2001:db8:1::1", "prefer matching scope");

	order = dest({new_ip("2001:db8:1::1", "IPv6"), new_ip("10.1.2.3", "IPv4")},
		{new_ip("2001:db8:1::2", "IPv6"), new_ip("fe80::1", "IPv6"), new_ip("10.1.2.4", "IPv4")})
	assert_equal(order[1].addr, "2001:db8:1::1", "prefer higher precedence");
	assert_equal(order[2].addr, "10.1.2.3", "prefer higher precedence");

	order = dest({new_ip("2001:db8:1::1", "IPv6"), new_ip("fe80::1", "IPv6")},
		{new_ip("2001:db8:1::2", "IPv6"), new_ip("fe80::2", "IPv6")})
	assert_equal(order[1].addr, "fe80::1", "prefer smaller scope");
	assert_equal(order[2].addr, "2001:db8:1::1", "prefer smaller scope");

--[[ "2001:db8:1::2" and "fe80::2" should be marked "care-of address", while "2001:db8:3::1" should be marked "home address", we can't currently handle this and would fail the test
	order = dest({new_ip("2001:db8:1::1", "IPv6"), new_ip("fe80::1", "IPv6")},
		{new_ip("2001:db8:1::2", "IPv6"), new_ip("2001:db8:3::1", "IPv6"), new_ip("fe80::2", "IPv6")})
	assert_equal(order[1].addr, "2001:db8:1::1", "prefer home address");
	assert_equal(order[2].addr, "fe80::1", "prefer home address");
]]

--[[ "fe80::2" should be marked "deprecated", we can't currently handle this and would fail the test
	order = dest({new_ip("2001:db8:1::1", "IPv6"), new_ip("fe80::1", "IPv6")},
		{new_ip("2001:db8:1::2", "IPv6"), new_ip("fe80::2", "IPv6")})
	assert_equal(order[1].addr, "2001:db8:1::1", "avoid deprecated addresses");
	assert_equal(order[2].addr, "fe80::1", "avoid deprecated addresses");
]]

	order = dest({new_ip("2001:db8:1::1", "IPv6"), new_ip("2001:db8:3ffe::1", "IPv6")},
		{new_ip("2001:db8:1::2", "IPv6"), new_ip("2001:db8:3f44::2", "IPv6"), new_ip("fe80::2", "IPv6")})
	assert_equal(order[1].addr, "2001:db8:1::1", "longest matching prefix");
	assert_equal(order[2].addr, "2001:db8:3ffe::1", "longest matching prefix");

	order = dest({new_ip("2002:c633:6401::1", "IPv6"), new_ip("2001:db8:1::1", "IPv6")},
		{new_ip("2002:c633:6401::2", "IPv6"), new_ip("fe80::2", "IPv6")})
	assert_equal(order[1].addr, "2002:c633:6401::1", "prefer matching label");
	assert_equal(order[2].addr, "2001:db8:1::1", "prefer matching label");

	order = dest({new_ip("2002:c633:6401::1", "IPv6"), new_ip("2001:db8:1::1", "IPv6")},
		{new_ip("2002:c633:6401::2", "IPv6"), new_ip("2001:db8:1::2", "IPv6"), new_ip("fe80::2", "IPv6")})
	assert_equal(order[1].addr, "2001:db8:1::1", "prefer higher precedence");
	assert_equal(order[2].addr, "2002:c633:6401::1", "prefer higher precedence");
end