Software /
code /
prosody
Annotate
spec/util_serialization_spec.lua @ 12907:d2333b468d07
mod_c2s: Disconnect accounts when they are disabled
We decided that at the first stage, accounts that are disabled should
simply be prevented from authenticating, thus they should also be
prevented from having connected sessions. Since this is aimed to be a
moderation action for cases of abuse, they shouldn't be allowed to
continue being connected.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 23 Feb 2023 16:28:57 +0100 |
parent | 9567:dbfa286cfa88 |
rev | line source |
---|---|
9342
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 local serialization = require "util.serialization"; |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 describe("util.serialization", function () |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 describe("serialize", function () |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 it("makes a string", function () |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 assert.is_string(serialization.serialize({})); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 assert.is_string(serialization.serialize(nil)); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 assert.is_string(serialization.serialize(1)); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 assert.is_string(serialization.serialize(true)); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 end); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 |
9480
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
12 it("rejects function by default", function () |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
13 assert.has_error(function () |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
14 serialization.serialize(function () end) |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
15 end); |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
16 end); |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
17 |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
18 it("makes a string in debug mode", function () |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
19 assert.is_string(serialization.serialize(function () end, "debug")); |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
20 end); |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
21 |
9481
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
22 it("rejects cycles", function () |
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
23 assert.has_error(function () |
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
24 local t = {} |
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
25 t[t] = { t }; |
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
26 serialization.serialize(t) |
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
27 end); |
9567
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
28 -- also with multirefs allowed |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
29 assert.has_error(function () |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
30 local t = {} |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
31 t[t] = { t }; |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
32 serialization.serialize(t, { multirefs = true }) |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
33 end); |
9481
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
34 end); |
9480
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
35 |
9566
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
36 it("rejects multiple references to same table", function () |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
37 assert.has_error(function () |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
38 local t1 = {}; |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
39 local t2 = { t1, t1 }; |
9567
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
40 serialization.serialize(t2, { multirefs = false }); |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
41 end); |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
42 end); |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
43 |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
44 it("optionally allows multiple references to same table", function () |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
45 assert.has_error(function () |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
46 local t1 = {}; |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
47 local t2 = { t1, t1 }; |
dbfa286cfa88
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Kim Alvefur <zash@zash.se>
parents:
9566
diff
changeset
|
48 serialization.serialize(t2, { multirefs = true }); |
9566
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
49 end); |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
50 end); |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
51 |
9342
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 it("roundtrips", function () |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 local function test(data) |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 local serialized = serialization.serialize(data); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 assert.is_string(serialized); |
9343
e767da06399d
util.serialization: Use deserialize instead of envload directly
Kim Alvefur <zash@zash.se>
parents:
9342
diff
changeset
|
56 local deserialized, err = serialization.deserialize(serialized); |
e767da06399d
util.serialization: Use deserialize instead of envload directly
Kim Alvefur <zash@zash.se>
parents:
9342
diff
changeset
|
57 assert.same(data, deserialized, err); |
9342
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 end |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 test({}); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 test({hello="world"}); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 test("foobar") |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 test("\0\1\2\3"); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 test("nödåtgärd"); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 test({1,2,3,4}); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 test({foo={[100]={{"bar"},{baz=1}}}}); |
9482
8791bfa3984a
util.serialization: Test table keys that are Lua keywords
Kim Alvefur <zash@zash.se>
parents:
9481
diff
changeset
|
67 test({["goto"] = {["function"]={["do"]="keywords"}}}); |
9342
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 end); |
9485
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
69 |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
70 it("can serialize with metatables", function () |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
71 local s = serialization.new({ freeze = true }); |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
72 local t = setmetatable({ a = "hi" }, { __freeze = function (t) return { t.a } end }); |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
73 local rt = serialization.deserialize(s(t)); |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
74 assert.same({"hi"}, rt); |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
75 end); |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
76 |
9342
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 end); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 end); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 |