spec/net_websocket_frames_spec.lua
author Kim Alvefur <zash@zash.se>
Sat, 23 Mar 2024 20:48:19 +0100
changeset 13465 c673ff1075bd
parent 11170 51e5149ed0ad
permissions -rw-r--r--
mod_posix: Move everything to util.startup This allows greater control over the order of events. Notably, the internal ordering between daemonization, initialization of libunbound and setup of signal handling is sensitive. libunbound starts a separate thread for processing DNS requests. If this thread is started before signal handling has been set up, it will not inherit the signal handlers and instead behave as it would have before signal handlers were set up, i.e. cause the whole process to immediately exit. libunbound is usually initialized on the first DNS request, usually triggered by an outgoing s2s connection attempt. If daemonization happens before signals have been set up, signals may not be processed at all.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9664
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
describe("net.websocket.frames", function ()
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
	local nwf = require "net.websocket.frames";
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
	local test_frames = {
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
		simple_empty = {
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
			["opcode"] = 0;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
			["length"] = 0;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
			["data"] = "";
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
			["FIN"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
			["MASK"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
			["RSV1"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
			["RSV2"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
			["RSV3"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
		};
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
		simple_data = {
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
			["opcode"] = 0;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
			["length"] = 5;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
			["data"] = "hello";
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
			["FIN"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
			["MASK"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
			["RSV1"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
			["RSV2"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
			["RSV3"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
		};
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
		simple_fin = {
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
			["opcode"] = 0;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
			["length"] = 0;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
			["data"] = "";
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
			["FIN"] = true;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
			["MASK"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
			["RSV1"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
			["RSV2"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
			["RSV3"] = false;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
		};
11166
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    35
		with_mask = {
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    36
			["opcode"] = 0;
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    37
			["length"] = 5;
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    38
			["data"] = "hello";
11168
4e5a2af9dd19 net.websocket.frames: Use C string XOR implementation
Kim Alvefur <zash@zash.se>
parents: 11166
diff changeset
    39
			["key"] = " \0 \0";
11166
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    40
			["FIN"] = true;
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    41
			["MASK"] = true;
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    42
			["RSV1"] = false;
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    43
			["RSV2"] = false;
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    44
			["RSV3"] = false;
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    45
		};
11169
eae8046d51fc net.websocket.frames: Add test for empty frame with MASK and key set
Matthew Wild <mwild1@gmail.com>
parents: 11168
diff changeset
    46
		empty_with_mask = {
eae8046d51fc net.websocket.frames: Add test for empty frame with MASK and key set
Matthew Wild <mwild1@gmail.com>
parents: 11168
diff changeset
    47
			["opcode"] = 0;
eae8046d51fc net.websocket.frames: Add test for empty frame with MASK and key set
Matthew Wild <mwild1@gmail.com>
parents: 11168
diff changeset
    48
			["key"] = " \0 \0";
eae8046d51fc net.websocket.frames: Add test for empty frame with MASK and key set
Matthew Wild <mwild1@gmail.com>
parents: 11168
diff changeset
    49
			["FIN"] = true;
eae8046d51fc net.websocket.frames: Add test for empty frame with MASK and key set
Matthew Wild <mwild1@gmail.com>
parents: 11168
diff changeset
    50
			["MASK"] = true;
eae8046d51fc net.websocket.frames: Add test for empty frame with MASK and key set
Matthew Wild <mwild1@gmail.com>
parents: 11168
diff changeset
    51
			["RSV1"] = false;
eae8046d51fc net.websocket.frames: Add test for empty frame with MASK and key set
Matthew Wild <mwild1@gmail.com>
parents: 11168
diff changeset
    52
			["RSV2"] = false;
eae8046d51fc net.websocket.frames: Add test for empty frame with MASK and key set
Matthew Wild <mwild1@gmail.com>
parents: 11168
diff changeset
    53
			["RSV3"] = false;
eae8046d51fc net.websocket.frames: Add test for empty frame with MASK and key set
Matthew Wild <mwild1@gmail.com>
parents: 11168
diff changeset
    54
		};
10588
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    55
		ping = {
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    56
			["opcode"] = 0x9;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    57
			["length"] = 4;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    58
			["data"] = "ping";
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    59
			["FIN"] = true;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    60
			["MASK"] = false;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    61
			["RSV1"] = false;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    62
			["RSV2"] = false;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    63
			["RSV3"] = false;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    64
		};
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    65
		pong = {
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    66
			["opcode"] = 0xa;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    67
			["length"] = 4;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    68
			["data"] = "pong";
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    69
			["FIN"] = true;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    70
			["MASK"] = false;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    71
			["RSV1"] = false;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    72
			["RSV2"] = false;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    73
			["RSV3"] = false;
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    74
		};
9664
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    75
	}
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    76
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    77
	describe("build", function ()
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    78
		local build = nwf.build;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    79
		it("works", function ()
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    80
			assert.equal("\0\0", build(test_frames.simple_empty));
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    81
			assert.equal("\0\5hello", build(test_frames.simple_data));
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    82
			assert.equal("\128\0", build(test_frames.simple_fin));
11166
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    83
			assert.equal("\128\133 \0 \0HeLlO", build(test_frames.with_mask))
11169
eae8046d51fc net.websocket.frames: Add test for empty frame with MASK and key set
Matthew Wild <mwild1@gmail.com>
parents: 11168
diff changeset
    84
			assert.equal("\128\128 \0 \0", build(test_frames.empty_with_mask))
10588
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    85
			assert.equal("\137\4ping", build(test_frames.ping));
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    86
			assert.equal("\138\4pong", build(test_frames.pong));
9664
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    87
		end);
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    88
	end);
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    89
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    90
	describe("parse", function ()
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    91
		local parse = nwf.parse;
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    92
		it("works", function ()
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    93
			assert.same(test_frames.simple_empty, parse("\0\0"));
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    94
			assert.same(test_frames.simple_data, parse("\0\5hello"));
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    95
			assert.same(test_frames.simple_fin, parse("\128\0"));
11166
ee399a0522cc net.websocket.frames: Add small test covering xor-masking
Kim Alvefur <zash@zash.se>
parents: 9664
diff changeset
    96
			assert.same(test_frames.with_mask, parse("\128\133 \0 \0HeLlO"));
10588
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    97
			assert.same(test_frames.ping, parse("\137\4ping"));
0c464bb7eb03 net.websocket.frames: Add ping and pong test cases
Kim Alvefur <zash@zash.se>
parents: 10587
diff changeset
    98
			assert.same(test_frames.pong, parse("\138\4pong"));
9664
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    99
		end);
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   100
	end);
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   101
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   102
end);
7e75c348095b net.websocket.frames: Add some brief tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   103