rsmp_schemer 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,277 @@
1
+ RSpec.describe "Traffic Light Controller RSMP SXL Schema validation" do
2
+ describe 'Alarm Issue' do
3
+ let(:message) {{
4
+ "mType" => "rSMsg",
5
+ "type" => "Alarm",
6
+ "mId" => "2ea7edfc-8e3a-4765-85e7-db844c4702a0",
7
+ "ntsOId" => "",
8
+ "xNId" => "",
9
+ "cId" => "AB+84001=860VA001",
10
+ "aCId" => "A0004",
11
+ "xACId" => "",
12
+ "xNACId" => "",
13
+ "aSp" => "Suspend",
14
+ "ack" => "Acknowledged",
15
+ "aS" => "Active",
16
+ "sS" => "notSuspended",
17
+ "aTs" => "2015-05-29T08:56:25.390Z",
18
+ "cat" => "D",
19
+ "pri" => "3",
20
+ "rvs" => [
21
+ {
22
+ "n" => "Temp",
23
+ "v" => "-18.5"
24
+ }
25
+ ]
26
+ }}
27
+
28
+ it 'accepts valid alarm suspended' do
29
+ expect( validate(message) ).to be_nil
30
+ end
31
+
32
+ it 'catches missing component id' do
33
+ invalid = message.dup
34
+ invalid.delete 'cId'
35
+ expect( validate(invalid) ).to eq([
36
+ ["", "required", {"missing_keys"=>["cId"]}]
37
+ ])
38
+ end
39
+
40
+ it 'catches missing alarm code id' do
41
+ invalid = message.dup
42
+ invalid.delete 'aCId'
43
+ expect( validate(invalid) ).to eq([
44
+ ["", "required", {"missing_keys"=>["aCId"]}]
45
+ ])
46
+ end
47
+
48
+ it 'catches bad alarm code id' do
49
+ invalid = message.dup
50
+ invalid['aCId'] = "001"
51
+ expect( validate(invalid) ).to eq([
52
+ ["/aCId", "pattern"]
53
+ ])
54
+ end
55
+
56
+ it 'catches wrong alarm code id type' do
57
+ invalid = message.dup
58
+ invalid['aCId'] = 123
59
+ expect( validate(invalid) ).to eq([
60
+ ["/aCId", "string"]
61
+ ])
62
+ end
63
+
64
+ it 'catches missing extended alarm code id' do
65
+ invalid = message.dup
66
+ invalid.delete 'xACId'
67
+ expect( validate(invalid) ).to eq([
68
+ ["", "required", {"missing_keys"=>["xACId"]}]
69
+ ])
70
+ end
71
+
72
+ it 'catches wrong extended alarm code id type' do
73
+ invalid = message.dup
74
+ invalid['xACId'] = 123
75
+ expect( validate(invalid) ).to eq([
76
+ ["/xACId", "string"]
77
+ ])
78
+ end
79
+
80
+ it 'catches missing specialization' do
81
+ invalid = message.dup
82
+ invalid.delete 'aSp'
83
+ expect( validate(invalid) ).to eq([
84
+ ["", "required", {"missing_keys"=>["aSp"]}]
85
+ ])
86
+ end
87
+
88
+ it 'catches bad specialization' do
89
+ invalid = message.dup
90
+ invalid['aSp'] = "Bad"
91
+ expect( validate(invalid) ).to eq([
92
+ ["/aSp", "enum"]
93
+ ])
94
+ end
95
+
96
+ it 'catches wrong specialization type' do
97
+ invalid = message.dup
98
+ invalid['aSp'] = 123
99
+ expect( validate(invalid) ).to eq([
100
+ ["/aSp", "enum"],
101
+ ["/aSp", "string"]
102
+ ])
103
+ end
104
+
105
+ it 'catches missing alarm active status' do
106
+ invalid = message.dup
107
+ invalid.delete 'aS'
108
+ expect( validate(invalid) ).to eq([
109
+ ["", "required", {"missing_keys"=>["aS"]}]
110
+ ])
111
+ end
112
+
113
+ it 'catches bad alarm active status' do
114
+ invalid = message.dup
115
+ invalid['aS'] = "Bad"
116
+ expect( validate(invalid) ).to eq([
117
+ ["/aS", "enum"]
118
+ ])
119
+ end
120
+
121
+ it 'catches wrong alarm active status' do
122
+ invalid = message.dup
123
+ invalid['aS'] = 123
124
+ expect( validate(invalid) ).to eq([
125
+ ["/aS", "enum"],
126
+ ["/aS", "string"]
127
+ ])
128
+ end
129
+
130
+ it 'catches missing alarm acknowledged status' do
131
+ invalid = message.dup
132
+ invalid.delete 'ack'
133
+ expect( validate(invalid) ).to eq([
134
+ ["", "required", {"missing_keys"=>["ack"]}]
135
+ ])
136
+ end
137
+
138
+ it 'catches bad alarm acknowledged status' do
139
+ invalid = message.dup
140
+ invalid['ack'] = "Bad"
141
+ expect( validate(invalid) ).to eq([
142
+ ["/ack", "enum"]
143
+ ])
144
+ end
145
+
146
+ it 'catches wrong alarm acknowledged status type' do
147
+ invalid = message.dup
148
+ invalid['ack'] = 123
149
+ expect( validate(invalid) ).to eq([
150
+ ["/ack", "enum"],
151
+ ["/ack", "string"]
152
+ ])
153
+ end
154
+
155
+ it 'catches missing category' do
156
+ invalid = message.dup
157
+ invalid.delete 'cat'
158
+ expect( validate(invalid) ).to eq([
159
+ ["", "required", {"missing_keys"=>["cat"]}]
160
+ ])
161
+ end
162
+
163
+ it 'catches bad category' do
164
+ invalid = message.dup
165
+ invalid['cat'] = "A"
166
+ expect( validate(invalid) ).to eq([
167
+ ["/cat", "enum"]
168
+ ])
169
+ end
170
+
171
+ it 'catches wrong category' do
172
+ invalid = message.dup
173
+ invalid['cat'] = 123
174
+ expect( validate(invalid) ).to eq([
175
+ ["/cat", "enum"],
176
+ ["/cat", "string"]
177
+ ])
178
+ end
179
+
180
+ it 'catches missing priority' do
181
+ invalid = message.dup
182
+ invalid.delete 'pri'
183
+ expect( validate(invalid) ).to eq([
184
+ ["", "required", {"missing_keys"=>["pri"]}]
185
+ ])
186
+ end
187
+
188
+ it 'catches bad priority' do
189
+ invalid = message.dup
190
+ invalid['pri'] = "4"
191
+ expect( validate(invalid) ).to eq([
192
+ ["/pri", "enum"]
193
+ ])
194
+ end
195
+
196
+ it 'catches wrong priority' do
197
+ invalid = message.dup
198
+ invalid['pri'] = 1
199
+ expect( validate(invalid) ).to eq([
200
+ ["/pri", "enum"],
201
+ ["/pri", "string"]
202
+ ])
203
+ end
204
+
205
+ it 'catches missing timestamp' do
206
+ invalid = message.dup
207
+ invalid.delete 'aTs'
208
+ expect( validate(invalid) ).to eq([
209
+ ["", "required", {"missing_keys"=>["aTs"]}]
210
+ ])
211
+ end
212
+
213
+ it 'catches bad timestamp' do
214
+ invalid = message.dup
215
+ invalid['aTs'] = "yesterday"
216
+ expect( validate(invalid) ).to eq([
217
+ ["/aTs", "pattern"]
218
+ ])
219
+ end
220
+
221
+ it 'catches wrong timestamp type' do
222
+ invalid = message.dup
223
+ invalid['aTs'] = 123
224
+ expect( validate(invalid) ).to eq([
225
+ ["/aTs", "string"]
226
+ ])
227
+ end
228
+
229
+ it 'catches missing rvs' do
230
+ invalid = message.dup
231
+ invalid.delete 'rvs'
232
+ expect( validate(invalid) ).to eq([
233
+ ["", "required", {"missing_keys"=>["rvs"]}]
234
+ ])
235
+ end
236
+
237
+ it 'catches bad rvs type' do
238
+ invalid = message.dup
239
+ invalid["rvs"] = {}
240
+ expect( validate(invalid) ).to eq([
241
+ ["/rvs", "array"]
242
+ ])
243
+ end
244
+
245
+ it 'catches missing alarm name' do
246
+ invalid = message.dup
247
+ invalid["rvs"].first.delete 'n'
248
+ expect( validate(invalid) ).to eq([
249
+ ["/rvs/0", "required", {"missing_keys"=>["n"]}]
250
+ ])
251
+ end
252
+
253
+ it 'catches bad alarm name' do
254
+ invalid = message.dup
255
+ invalid["rvs"].first['n'] = 3
256
+ expect( validate(invalid) ).to eq([
257
+ ["/rvs/0/n", "string"]
258
+ ])
259
+ end
260
+
261
+ it 'catches missing alarm value' do
262
+ invalid = message.dup
263
+ invalid["rvs"].first.delete 'v'
264
+ expect( validate(invalid) ).to eq([
265
+ ["/rvs/0", "required", {"missing_keys"=>["v"]}]
266
+ ])
267
+ end
268
+
269
+ it 'catches bad alarm value' do
270
+ invalid = message.dup
271
+ invalid["rvs"].first['v'] = 3
272
+ expect( validate(invalid) ).to eq([
273
+ ["/rvs/0/v", "string"]
274
+ ])
275
+ end
276
+ end
277
+ end
@@ -0,0 +1,93 @@
1
+ RSpec.describe "Traffic Light Controller RSMP SXL Schema validation" do
2
+ describe 'Alarm Suspend' do
3
+ let(:message) {{
4
+ "mType" => "rSMsg",
5
+ "type" => "Alarm",
6
+ "mId" => "2a744145-403a-423f-ba80-f38e283a778e",
7
+ "ntsOId" => "",
8
+ "xNId" => "",
9
+ "cId" => "AB+84001=860VA001",
10
+ "aCId" => "A0004",
11
+ "xACId" => "",
12
+ "xNACId" => "",
13
+ "aSp" => "Suspend"
14
+ }}
15
+
16
+ it 'accepts valid alarm suspend' do
17
+ expect( validate(message) ).to be_nil
18
+ end
19
+
20
+ it 'catches missing component id' do
21
+ invalid = message.dup
22
+ invalid.delete 'cId'
23
+ expect( validate(invalid) ).to eq([
24
+ ["", "required", {"missing_keys"=>["cId"]}]
25
+ ])
26
+ end
27
+
28
+ it 'catches missing alarm code id' do
29
+ invalid = message.dup
30
+ invalid.delete 'aCId'
31
+ expect( validate(invalid) ).to eq([
32
+ ["", "required", {"missing_keys"=>["aCId"]}]
33
+ ])
34
+ end
35
+
36
+ it 'catches bad alarm code id' do
37
+ invalid = message.dup
38
+ invalid['aCId'] = "001"
39
+ expect( validate(invalid) ).to eq([
40
+ ["/aCId", "pattern"]
41
+ ])
42
+ end
43
+
44
+ it 'catches wrong alarm code id type' do
45
+ invalid = message.dup
46
+ invalid['aCId'] = 123
47
+ expect( validate(invalid) ).to eq([
48
+ ["/aCId", "string"]
49
+ ])
50
+ end
51
+
52
+ it 'catches missing extended alarm code id' do
53
+ invalid = message.dup
54
+ invalid.delete 'xACId'
55
+ expect( validate(invalid) ).to eq([
56
+ ["", "required", {"missing_keys"=>["xACId"]}]
57
+ ])
58
+ end
59
+
60
+ it 'catches wrong extended alarm code id type' do
61
+ invalid = message.dup
62
+ invalid['xACId'] = 123
63
+ expect( validate(invalid) ).to eq([
64
+ ["/xACId", "string"]
65
+ ])
66
+ end
67
+
68
+ it 'catches missing specialization' do
69
+ invalid = message.dup
70
+ invalid.delete 'aSp'
71
+ expect( validate(invalid) ).to eq([
72
+ ["", "required", {"missing_keys"=>["aSp"]}]
73
+ ])
74
+ end
75
+
76
+ it 'catches bad specialization' do
77
+ invalid = message.dup
78
+ invalid['aSp'] = "Bad"
79
+ expect( validate(invalid) ).to eq([
80
+ ["/aSp", "enum"]
81
+ ])
82
+ end
83
+
84
+ it 'catches wrong specialization type' do
85
+ invalid = message.dup
86
+ invalid['aSp'] = 123
87
+ expect( validate(invalid) ).to eq([
88
+ ["/aSp", "enum"],
89
+ ["/aSp", "string"]
90
+ ])
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,277 @@
1
+ RSpec.describe "Traffic Light Controller RSMP SXL Schema validation" do
2
+ describe 'Alarm Issue' do
3
+ let(:message) {{
4
+ "mType" => "rSMsg",
5
+ "type" => "Alarm",
6
+ "mId" => "2ea7edfc-8e3a-4765-85e7-db844c4702a0",
7
+ "ntsOId" => "",
8
+ "xNId" => "",
9
+ "cId" => "AB+84001=860VA001",
10
+ "aCId" => "A0004",
11
+ "xACId" => "",
12
+ "xNACId" => "",
13
+ "aSp" => "Suspend",
14
+ "ack" => "Acknowledged",
15
+ "aS" => "Active",
16
+ "sS" => "suspended",
17
+ "aTs" => "2015-05-29T08:56:25.390Z",
18
+ "cat" => "D",
19
+ "pri" => "3",
20
+ "rvs" => [
21
+ {
22
+ "n" => "Temp",
23
+ "v" => "-18.5"
24
+ }
25
+ ]
26
+ }}
27
+
28
+ it 'accepts valid alarm suspended' do
29
+ expect( validate(message) ).to be_nil
30
+ end
31
+
32
+ it 'catches missing component id' do
33
+ invalid = message.dup
34
+ invalid.delete 'cId'
35
+ expect( validate(invalid) ).to eq([
36
+ ["", "required", {"missing_keys"=>["cId"]}]
37
+ ])
38
+ end
39
+
40
+ it 'catches missing alarm code id' do
41
+ invalid = message.dup
42
+ invalid.delete 'aCId'
43
+ expect( validate(invalid) ).to eq([
44
+ ["", "required", {"missing_keys"=>["aCId"]}]
45
+ ])
46
+ end
47
+
48
+ it 'catches bad alarm code id' do
49
+ invalid = message.dup
50
+ invalid['aCId'] = "001"
51
+ expect( validate(invalid) ).to eq([
52
+ ["/aCId", "pattern"]
53
+ ])
54
+ end
55
+
56
+ it 'catches wrong alarm code id type' do
57
+ invalid = message.dup
58
+ invalid['aCId'] = 123
59
+ expect( validate(invalid) ).to eq([
60
+ ["/aCId", "string"]
61
+ ])
62
+ end
63
+
64
+ it 'catches missing extended alarm code id' do
65
+ invalid = message.dup
66
+ invalid.delete 'xACId'
67
+ expect( validate(invalid) ).to eq([
68
+ ["", "required", {"missing_keys"=>["xACId"]}]
69
+ ])
70
+ end
71
+
72
+ it 'catches wrong extended alarm code id type' do
73
+ invalid = message.dup
74
+ invalid['xACId'] = 123
75
+ expect( validate(invalid) ).to eq([
76
+ ["/xACId", "string"]
77
+ ])
78
+ end
79
+
80
+ it 'catches missing specialization' do
81
+ invalid = message.dup
82
+ invalid.delete 'aSp'
83
+ expect( validate(invalid) ).to eq([
84
+ ["", "required", {"missing_keys"=>["aSp"]}]
85
+ ])
86
+ end
87
+
88
+ it 'catches bad specialization' do
89
+ invalid = message.dup
90
+ invalid['aSp'] = "Bad"
91
+ expect( validate(invalid) ).to eq([
92
+ ["/aSp", "enum"]
93
+ ])
94
+ end
95
+
96
+ it 'catches wrong specialization type' do
97
+ invalid = message.dup
98
+ invalid['aSp'] = 123
99
+ expect( validate(invalid) ).to eq([
100
+ ["/aSp", "enum"],
101
+ ["/aSp", "string"]
102
+ ])
103
+ end
104
+
105
+ it 'catches missing alarm active status' do
106
+ invalid = message.dup
107
+ invalid.delete 'aS'
108
+ expect( validate(invalid) ).to eq([
109
+ ["", "required", {"missing_keys"=>["aS"]}]
110
+ ])
111
+ end
112
+
113
+ it 'catches bad alarm active status' do
114
+ invalid = message.dup
115
+ invalid['aS'] = "Bad"
116
+ expect( validate(invalid) ).to eq([
117
+ ["/aS", "enum"]
118
+ ])
119
+ end
120
+
121
+ it 'catches wrong alarm active status' do
122
+ invalid = message.dup
123
+ invalid['aS'] = 123
124
+ expect( validate(invalid) ).to eq([
125
+ ["/aS", "enum"],
126
+ ["/aS", "string"]
127
+ ])
128
+ end
129
+
130
+ it 'catches missing alarm acknowledged status' do
131
+ invalid = message.dup
132
+ invalid.delete 'ack'
133
+ expect( validate(invalid) ).to eq([
134
+ ["", "required", {"missing_keys"=>["ack"]}]
135
+ ])
136
+ end
137
+
138
+ it 'catches bad alarm acknowledged status' do
139
+ invalid = message.dup
140
+ invalid['ack'] = "Bad"
141
+ expect( validate(invalid) ).to eq([
142
+ ["/ack", "enum"]
143
+ ])
144
+ end
145
+
146
+ it 'catches wrong alarm acknowledged status type' do
147
+ invalid = message.dup
148
+ invalid['ack'] = 123
149
+ expect( validate(invalid) ).to eq([
150
+ ["/ack", "enum"],
151
+ ["/ack", "string"]
152
+ ])
153
+ end
154
+
155
+ it 'catches missing category' do
156
+ invalid = message.dup
157
+ invalid.delete 'cat'
158
+ expect( validate(invalid) ).to eq([
159
+ ["", "required", {"missing_keys"=>["cat"]}]
160
+ ])
161
+ end
162
+
163
+ it 'catches bad category' do
164
+ invalid = message.dup
165
+ invalid['cat'] = "A"
166
+ expect( validate(invalid) ).to eq([
167
+ ["/cat", "enum"]
168
+ ])
169
+ end
170
+
171
+ it 'catches wrong category' do
172
+ invalid = message.dup
173
+ invalid['cat'] = 123
174
+ expect( validate(invalid) ).to eq([
175
+ ["/cat", "enum"],
176
+ ["/cat", "string"]
177
+ ])
178
+ end
179
+
180
+ it 'catches missing priority' do
181
+ invalid = message.dup
182
+ invalid.delete 'pri'
183
+ expect( validate(invalid) ).to eq([
184
+ ["", "required", {"missing_keys"=>["pri"]}]
185
+ ])
186
+ end
187
+
188
+ it 'catches bad priority' do
189
+ invalid = message.dup
190
+ invalid['pri'] = "4"
191
+ expect( validate(invalid) ).to eq([
192
+ ["/pri", "enum"]
193
+ ])
194
+ end
195
+
196
+ it 'catches wrong priority' do
197
+ invalid = message.dup
198
+ invalid['pri'] = 1
199
+ expect( validate(invalid) ).to eq([
200
+ ["/pri", "enum"],
201
+ ["/pri", "string"]
202
+ ])
203
+ end
204
+
205
+ it 'catches missing timestamp' do
206
+ invalid = message.dup
207
+ invalid.delete 'aTs'
208
+ expect( validate(invalid) ).to eq([
209
+ ["", "required", {"missing_keys"=>["aTs"]}]
210
+ ])
211
+ end
212
+
213
+ it 'catches bad timestamp' do
214
+ invalid = message.dup
215
+ invalid['aTs'] = "yesterday"
216
+ expect( validate(invalid) ).to eq([
217
+ ["/aTs", "pattern"]
218
+ ])
219
+ end
220
+
221
+ it 'catches wrong timestamp type' do
222
+ invalid = message.dup
223
+ invalid['aTs'] = 123
224
+ expect( validate(invalid) ).to eq([
225
+ ["/aTs", "string"]
226
+ ])
227
+ end
228
+
229
+ it 'catches missing rvs' do
230
+ invalid = message.dup
231
+ invalid.delete 'rvs'
232
+ expect( validate(invalid) ).to eq([
233
+ ["", "required", {"missing_keys"=>["rvs"]}]
234
+ ])
235
+ end
236
+
237
+ it 'catches bad rvs type' do
238
+ invalid = message.dup
239
+ invalid["rvs"] = {}
240
+ expect( validate(invalid) ).to eq([
241
+ ["/rvs", "array"]
242
+ ])
243
+ end
244
+
245
+ it 'catches missing alarm name' do
246
+ invalid = message.dup
247
+ invalid["rvs"].first.delete 'n'
248
+ expect( validate(invalid) ).to eq([
249
+ ["/rvs/0", "required", {"missing_keys"=>["n"]}]
250
+ ])
251
+ end
252
+
253
+ it 'catches bad alarm name' do
254
+ invalid = message.dup
255
+ invalid["rvs"].first['n'] = 3
256
+ expect( validate(invalid) ).to eq([
257
+ ["/rvs/0/n", "string"]
258
+ ])
259
+ end
260
+
261
+ it 'catches missing alarm value' do
262
+ invalid = message.dup
263
+ invalid["rvs"].first.delete 'v'
264
+ expect( validate(invalid) ).to eq([
265
+ ["/rvs/0", "required", {"missing_keys"=>["v"]}]
266
+ ])
267
+ end
268
+
269
+ it 'catches bad alarm value' do
270
+ invalid = message.dup
271
+ invalid["rvs"].first['v'] = 3
272
+ expect( validate(invalid) ).to eq([
273
+ ["/rvs/0/v", "string"]
274
+ ])
275
+ end
276
+ end
277
+ end
@@ -10,9 +10,10 @@ RSpec.describe "Traffic Light Controller RSMP SXL Schema validation" do
10
10
  { "vers" => "3.1.1" },
11
11
  { "vers" => "3.1.2" },
12
12
  { "vers" => "3.1.3" },
13
- { "vers" => "3.1.4" }
13
+ { "vers" => "3.1.4" },
14
+ { "vers" => "3.1.5" }
14
15
  ],
15
- "SXL" => "1.1"
16
+ "SXL" => "1.0.15"
16
17
  }}
17
18
 
18
19
  it 'accepts valid message' do