2 Copyright (C) 2019 "IoT.bzh"
3 Author Frédéric Marec <frederic.marec@iot.bzh>
5 Licensed under the Apache License, Version 2.0 (the "License");
6 you may not use this file except in compliance with the License.
7 You may obtain a copy of the License at
9 http://www.apache.org/licenses/LICENSE-2.0
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
18 NOTE: strict mode: every global variables should be prefixed by '_'
21 local testPrefix ="persistence_APITest_"
22 local key_values0 = {"TESTinsert", "insert", "wrong_value", 3.1415926546, nil}
23 local key_values1 = key_values0
24 local key_values2 = key_values0
26 local function formatize (arg)
27 return tostring(arg):gsub("[^a-zA-Z0-9_]", "_")
30 for _, key_value0 in pairs(key_values0) do
31 for _, key_value1 in pairs(key_values1) do
33 local arg1 = "key_"..formatize(key_value0).."_"
34 local arg2 = "value_"..formatize(key_value1)
36 -- This tests the 'insert' verb of the persistence API
37 local test_name_insert = testPrefix.."insert_with_verification_"..arg1..arg2
38 _AFT.describe(test_name_insert,function()
39 _AFT.assertVerbStatusSuccess("persistence", "insert", {key= key_value0, value= key_value1})
40 _AFT.assertVerbResponseEquals("persistence","read", {key= key_value0},{key= key_value0, value= key_value1})
41 _AFT.assertVerbStatusSuccess("persistence", "delete", {key= key_value0})
44 -- This tests the 'delete' verb of the persistence API
45 local test_name_deldete = testPrefix.."delete_with_verification_"..arg1..arg2
46 _AFT.describe(test_name_deldete,function()
47 _AFT.assertVerbStatusSuccess("persistence", "insert", {key= key_value0, value= key_value1})
48 _AFT.assertVerbResponseEquals("persistence","read", {key= key_value0},{key= key_value0, value= key_value1})
49 _AFT.assertVerbStatusSuccess("persistence", "delete", {key= key_value0})
52 for _, key_value2 in pairs(key_values2) do
54 local arg3 = "_updated_value_"..formatize(key_value2)
56 -- This tests the 'update' verb of the persistence API
57 local test_name_update = testPrefix.."update_with_verification_"..arg1..arg2..arg3
58 _AFT.describe(test_name_update,function()
59 _AFT.assertVerbStatusSuccess("persistence", "insert", {key= key_value0, value= key_value1})
60 _AFT.assertVerbResponseEquals("persistence","read", {key= key_value0},{key= key_value0, value= key_value1})
61 _AFT.assertVerbStatusSuccess("persistence", "update", {key= key_value0, value= key_value2})
62 _AFT.assertVerbResponseEquals("persistence","read", {key= key_value0},{key= key_value0, value= key_value2})
63 _AFT.assertVerbStatusSuccess("persistence", "delete", {key= key_value0})
64 _AFT.assertVerbResponseEqualsError("persistence","read", {key= key_value0},{key= key_value0, value= key_value2})
65 _AFT.assertVerbResponseEqualsError("persistence","read", {key= key_value0},{key= key_value0, value= key_value1})
68 -- This tests 'multiple insert' of the persistence API
69 local test_name_multiple_insert = testPrefix.."multiple_insert_with_verification_"..arg1..arg2..arg3
70 _AFT.describe(test_name_multiple_insert,function()
72 if ((key_value0 == key_value2) or (key_value1 == key_value2) or (key_value0 == key_value1)
73 or ((key_value0 == key_value2) and (key_value1 == key_value2) and (key_value0 == key_value1)))
75 _AFT.assertVerbStatusSuccess("persistence", "update", {key= key_value2, value= key_value2})
77 if (key_value0 == key_value2)
79 _AFT.assertVerbStatusError("persistence", "insert", {key= key_value0, value= key_value0})
81 _AFT.assertVerbStatusSuccess("persistence", "insert", {key= key_value0, value= key_value0})
84 if (key_value1 == key_value2) or (key_value0 == key_value1)
86 _AFT.assertVerbStatusError("persistence", "insert", {key= key_value1, value= key_value1})
88 _AFT.assertVerbStatusSuccess("persistence", "insert", {key= key_value1, value= key_value1})
91 _AFT.assertVerbStatusError("persistence", "insert", {key= key_value1, value= key_value2})
92 _AFT.assertVerbStatusError("persistence", "insert", {key= key_value2, value= key_value0})
93 _AFT.assertVerbResponseEquals("persistence","read", {key= key_value0},{key= key_value0, value= key_value0})
94 _AFT.assertVerbResponseEquals("persistence","read", {key= key_value1},{key= key_value1, value= key_value1})
95 _AFT.assertVerbResponseEquals("persistence","read", {key= key_value2},{key= key_value2, value= key_value2})
97 if (key_value0 == key_value2)
99 _AFT.assertVerbStatusSuccess("persistence", "delete", {key= key_value0})
100 _AFT.assertVerbStatusError("persistence", "delete", {key= key_value2})
102 _AFT.assertVerbStatusSuccess("persistence", "delete", {key= key_value0})
103 _AFT.assertVerbStatusSuccess("persistence", "delete", {key= key_value2})
106 if (key_value1 == key_value2) or (key_value0 == key_value1)
108 _AFT.assertVerbStatusError("persistence", "delete", {key= key_value1})
110 _AFT.assertVerbStatusSuccess("persistence", "delete", {key= key_value1})
113 else -- key_values0, key_value1 & key_value2 not equal
114 _AFT.assertVerbStatusSuccess("persistence", "update", {key= key_value2, value= key_value2})
115 _AFT.assertVerbStatusSuccess("persistence", "insert", {key= key_value0, value= key_value0})
116 _AFT.assertVerbStatusSuccess("persistence", "insert", {key= key_value1, value= key_value1})
117 _AFT.assertVerbStatusError("persistence", "insert", {key= key_value1, value= key_value2})
118 _AFT.assertVerbStatusError("persistence", "insert", {key= key_value2, value= key_value0})
119 _AFT.assertVerbResponseEquals("persistence","read", {key= key_value0},{key= key_value0, value= key_value0})
120 _AFT.assertVerbResponseEquals("persistence","read", {key= key_value1},{key= key_value1, value= key_value1})
121 _AFT.assertVerbResponseEquals("persistence","read", {key= key_value2},{key= key_value2, value= key_value2})
122 _AFT.assertVerbStatusSuccess("persistence", "delete", {key= key_value0})
123 _AFT.assertVerbStatusSuccess("persistence", "delete", {key= key_value1})
124 _AFT.assertVerbStatusSuccess("persistence", "delete", {key= key_value2})