spec/util_http_spec.lua
author Kim Alvefur <zash@zash.se>
Wed, 27 Mar 2024 19:33:11 +0100
changeset 13471 c2a476f4712a
parent 13405 626ab0af83af
permissions -rw-r--r--
util.startup: Fix exiting on pidfile trouble prosody.shutdown() relies on prosody.main_thread, which has not been set yet at this point. Doing a clean shutdown might actually be harmful in case it tears down things set up by the conflicting Prosody, such as the very pidfile we were looking at. Thanks again SigmaTel71 for noticing
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8239
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     1
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     2
local http = require "util.http";
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     3
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     4
describe("util.http", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     5
	describe("#urlencode()", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     6
		it("should not change normal characters", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     7
			assert.are.equal(http.urlencode("helloworld123"), "helloworld123");
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     8
		end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
     9
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    10
		it("should escape spaces", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    11
			assert.are.equal(http.urlencode("hello world"), "hello%20world");
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    12
		end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    13
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    14
		it("should escape important URL characters", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    15
			assert.are.equal(http.urlencode("This & that = something"), "This%20%26%20that%20%3d%20something");
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    16
		end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    17
	end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    18
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    19
	describe("#urldecode()", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    20
		it("should not change normal characters", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    21
			assert.are.equal("helloworld123", http.urldecode("helloworld123"), "Normal characters not escaped");
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    22
		end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    23
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    24
		it("should decode spaces", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    25
			assert.are.equal("hello world", http.urldecode("hello%20world"), "Spaces escaped");
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    26
		end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    27
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    28
		it("should decode important URL characters", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    29
			assert.are.equal("This & that = something", http.urldecode("This%20%26%20that%20%3d%20something"), "Important URL chars escaped");
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    30
		end);
9789
ff88b03c343f util.http: Fix decoding of uppercase URL encoded chars
Kim Alvefur <zash@zash.se>
parents: 9508
diff changeset
    31
ff88b03c343f util.http: Fix decoding of uppercase URL encoded chars
Kim Alvefur <zash@zash.se>
parents: 9508
diff changeset
    32
		it("should decode both lower and uppercase", function ()
ff88b03c343f util.http: Fix decoding of uppercase URL encoded chars
Kim Alvefur <zash@zash.se>
parents: 9508
diff changeset
    33
			assert.are.equal("This & that = {something}.", http.urldecode("This%20%26%20that%20%3D%20%7Bsomething%7D%2E"), "Important URL chars escaped");
ff88b03c343f util.http: Fix decoding of uppercase URL encoded chars
Kim Alvefur <zash@zash.se>
parents: 9508
diff changeset
    34
		end);
ff88b03c343f util.http: Fix decoding of uppercase URL encoded chars
Kim Alvefur <zash@zash.se>
parents: 9508
diff changeset
    35
8239
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    36
	end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    37
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    38
	describe("#formencode()", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    39
		it("should encode basic data", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    40
			assert.are.equal(http.formencode({ { name = "one", value = "1"}, { name = "two", value = "2" } }), "one=1&two=2", "Form encoded");
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    41
		end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    42
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    43
		it("should encode special characters with escaping", function()
13405
626ab0af83af util.http: Silence strict luacheck warning in tests
Kim Alvefur <zash@zash.se>
parents: 13128
diff changeset
    44
			-- luacheck: ignore 631
8239
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    45
			assert.are.equal(http.formencode({ { name = "one two", value = "1"}, { name = "two one&", value = "2" } }), "one+two=1&two+one%26=2", "Form encoded");
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    46
		end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    47
	end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    48
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    49
	describe("#formdecode()", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    50
		it("should decode basic data", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    51
			local t = http.formdecode("one=1&two=2");
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    52
			assert.are.same(t, {
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    53
				{ name = "one", value = "1" };
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    54
				{ name = "two", value = "2" };
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    55
				one = "1";
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    56
				two = "2";
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    57
			});
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    58
		end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    59
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    60
		it("should decode special characters", function()
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    61
			local t = http.formdecode("one+two=1&two+one%26=2");
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    62
			assert.are.same(t, {
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    63
				{ name = "one two", value = "1" };
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    64
				{ name = "two one&", value = "2" };
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    65
				["one two"] = "1";
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    66
				["two one&"] = "2";
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    67
			});
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    68
		end);
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    69
	end);
9508
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    70
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    71
	describe("normalize_path", function ()
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    72
		it("root path is always '/'", function ()
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    73
			assert.equal("/", http.normalize_path("/"));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    74
			assert.equal("/", http.normalize_path(""));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    75
			assert.equal("/", http.normalize_path("/", true));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    76
			assert.equal("/", http.normalize_path("", true));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    77
		end);
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    78
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    79
		it("works", function ()
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    80
			assert.equal("/foo", http.normalize_path("foo"));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    81
			assert.equal("/foo", http.normalize_path("/foo"));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    82
			assert.equal("/foo", http.normalize_path("foo/"));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    83
			assert.equal("/foo", http.normalize_path("/foo/"));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    84
		end);
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    85
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    86
		it("is_dir works", function ()
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    87
			assert.equal("/foo/", http.normalize_path("foo", true));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    88
			assert.equal("/foo/", http.normalize_path("/foo", true));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    89
			assert.equal("/foo/", http.normalize_path("foo/", true));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    90
			assert.equal("/foo/", http.normalize_path("/foo/", true));
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    91
		end);
5203b6fd34d4 util.http: Add tests for normalize_path
Kim Alvefur <zash@zash.se>
parents: 8239
diff changeset
    92
	end);
10715
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
    93
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
    94
	describe("contains_token", function ()
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
    95
		it("is present in field", function ()
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
    96
			assert.is_true(http.contains_token("foo", "foo"));
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
    97
			assert.is_true(http.contains_token("foo, bar", "foo"));
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
    98
			assert.is_true(http.contains_token("foo,bar", "foo"));
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
    99
			assert.is_true(http.contains_token("bar,  foo,baz", "foo"));
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   100
		end);
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   101
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   102
		it("is absent from field", function ()
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   103
			assert.is_false(http.contains_token("bar", "foo"));
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   104
			assert.is_false(http.contains_token("fooo", "foo"));
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   105
			assert.is_false(http.contains_token("foo o,bar", "foo"));
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   106
		end);
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   107
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   108
		it("is weird", function ()
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   109
			assert.is_(http.contains_token("fo o", "foo"));
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   110
		end);
d2e4584ba7b3 spec: Add test cases for util.http.contains_token
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9789
diff changeset
   111
	end);
13128
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   112
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   113
do
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   114
	describe("parse_forwarded", function()
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   115
		it("works", function()
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   116
			assert.same({ { ["for"] = "[2001:db8:cafe::17]:4711" } }, http.parse_forwarded('For="[2001:db8:cafe::17]:4711"'), "case insensitive");
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   117
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   118
			assert.same({ { ["for"] = "192.0.2.60"; proto = "http"; by = "203.0.113.43" } }, http.parse_forwarded('for=192.0.2.60;proto=http;by=203.0.113.43'),
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   119
				"separated by semicolon");
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   120
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   121
			assert.same({ { ["for"] = "192.0.2.43" }; { ["for"] = "198.51.100.17" } }, http.parse_forwarded('for=192.0.2.43, for=198.51.100.17'),
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   122
				"Values from multiple proxy servers can be appended using a comma");
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   123
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   124
		end)
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   125
		it("rejects quoted quotes", function ()
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   126
			assert.falsy(http.parse_forwarded('foo="bar\"bar'), "quoted quotes");
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   127
		end)
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   128
		pending("deals with quoted quotes", function ()
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   129
			assert.same({ { foo = 'bar"baz' } }, http.parse_forwarded('foo="bar\"bar'), "quoted quotes");
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   130
		end)
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   131
	end)
f15e23840780 util.http: Implement parser for RFC 7239 Forwarded header
Kim Alvefur <zash@zash.se>
parents: 10715
diff changeset
   132
end
8239
4878e4159e12 Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   133
end);