Software /
code /
prosody
Annotate
spec/util_strbitop_spec.lua @ 13627:2db7b3b65363
core.configmanager: Add function for getting secrets from separate files
Idea is to enable easily retrieving of secret values from files outside
of the config, e.g. via the method used by systemd credentials.
CREDENTIALS_DIRECTORY is expected to be set by the process manager
invoking Prosody, so being unset and unavailable from prosodyctl is
going to be normal and a warning is reported in that case. Care will
have to be taken to make it clear that prosodyctl check will not work
with such values. An error is thrown if the directory is unavailable
when running under Prosody.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 16 Jan 2025 15:21:34 +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); |