Software / code / prosody
Annotate
spec/util_strbitop_spec.lua @ 13792:4ea7bd7325be 13.0
core.portmanager: Restore use of per-host 'ssl' for SNI hosts. Fixes #1915.
This was an unintentional regression, as per-host 'ssl' options became valid
in 0.12 when SNI support was added for direct TLS ports. While we encourage
most people to use the simpler automatic certificate selection (and it seems
most do, given the overlooking of this bug), there are likely always going to
be use cases for manually-configured certificates.
The issue was introduced in commit 7e9ebdc75ce4 which inadvertently removed
the per-host option checking for SNI.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 29 Mar 2025 22:25:19 +0100 |
| parent | 13430:1a5e3cf037f6 |
| rev | line source |
|---|---|
|
11168
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 local strbitop = require "util.strbitop"; |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 describe("util.strbitop", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 describe("sand()", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 it("works", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 assert.equal(string.rep("Aa", 100), strbitop.sand(string.rep("a", 200), "Aa")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 end); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 it("returns empty string if first argument is empty", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 assert.equal("", strbitop.sand("", "")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 assert.equal("", strbitop.sand("", "key")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 end); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 it("returns initial string if key is empty", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 assert.equal("hello", strbitop.sand("hello", "")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 end); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 end); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 describe("sor()", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 it("works", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 assert.equal(string.rep("a", 200), strbitop.sor(string.rep("Aa", 100), "a")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 end); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 it("returns empty string if first argument is empty", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 assert.equal("", strbitop.sor("", "")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 assert.equal("", strbitop.sor("", "key")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 end); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 it("returns initial string if key is empty", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 assert.equal("hello", strbitop.sor("hello", "")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 end); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 end); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 describe("sxor()", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 it("works", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 assert.equal(string.rep("Aa", 100), strbitop.sxor(string.rep("a", 200), " \0")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 end); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 it("returns empty string if first argument is empty", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 assert.equal("", strbitop.sxor("", "")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 assert.equal("", strbitop.sxor("", "key")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 end); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 it("returns initial string if key is empty", function () |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 assert.equal("hello", strbitop.sxor("hello", "")); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 end); |
|
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 end); |
|
13429
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
41 |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
42 describe("common_prefix_bits()", function () |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
43 local function B(s) |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
44 assert(#s%8==0, "Invalid test input: B(s): s should be a multiple of 8 bits in length"); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
45 local byte = 0; |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
46 local out_str = {}; |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
47 for i = 1, #s do |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
48 local bit_ascii = s:byte(i); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
49 if bit_ascii == 49 then -- '1' |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
50 byte = byte + 2^((7-(i-1))%8); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
51 elseif bit_ascii ~= 48 then |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
52 error("Invalid test input: B(s): s should contain only '0' or '1' characters"); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
53 end |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
54 if (i-1)%8 == 7 then |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
55 table.insert(out_str, string.char(byte)); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
56 byte = 0; |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
57 end |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
58 end |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
59 return table.concat(out_str); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
60 end |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
61 |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
62 local _cpb = strbitop.common_prefix_bits; |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
63 local function test(a, b) |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
64 local Ba, Bb = B(a), B(b); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
65 local ret1 = _cpb(Ba, Bb); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
66 local ret2 = _cpb(Bb, Ba); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
67 assert(ret1 == ret2, ("parameter order should not make a difference to the result (%s, %s) = %d, reversed = %d"):format(a, b, ret1, ret2)); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
68 return ret1; |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
69 end |
|
13430
1a5e3cf037f6
util.strbitop: Remove unused import in tests
Matthew Wild <mwild1@gmail.com>
parents:
13429
diff
changeset
|
70 |
|
13429
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
71 it("works on single bytes", function () |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
72 assert.equal(0, test("00000000", "11111111")); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
73 assert.equal(1, test("10000000", "11111111")); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
74 assert.equal(0, test("01000000", "11111111")); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
75 assert.equal(0, test("01000000", "11111111")); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
76 assert.equal(8, test("11111111", "11111111")); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
77 end); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
78 |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
79 it("works on multiple bytes", function () |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
80 for i = 0, 16 do |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
81 assert.equal(i, test(string.rep("1", i)..string.rep("0", 16-i), "1111111111111111")); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
82 end |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
83 end); |
|
6cdc6923d65a
util.strbitop: Add common_prefix_bits() method
Matthew Wild <mwild1@gmail.com>
parents:
13427
diff
changeset
|
84 end); |
|
11168
cde600e2fdf9
util.strbitop: Add tests covering basics
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 end); |