@bitpoolos/edge-bacnet 1.0.6 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/bacnet_client.js +650 -233
  2. package/bacnet_device.js +65 -16
  3. package/bacnet_gateway.html +242 -99
  4. package/bacnet_gateway.js +211 -27
  5. package/bacnet_object.js +1 -1
  6. package/bacnet_read.html +211 -133
  7. package/bacnet_read.js +24 -24
  8. package/bacnet_server.js +321 -0
  9. package/bacnet_write.html +24 -15
  10. package/bacnet_write.js +0 -2
  11. package/common.js +95 -9
  12. package/edge-bacnet-datastore.cfg +0 -0
  13. package/package.json +6 -4
  14. package/resources/confirmationservice.min.js +1 -0
  15. package/resources/confirmdialog.min.js +1 -0
  16. package/resources/fonts/primeicons.woff2 +0 -0
  17. package/resources/node-bacnet/CHANGELOG.md +481 -0
  18. package/resources/{bacstack → node-bacnet}/LICENSE.md +3 -1
  19. package/resources/node-bacnet/README.md +91 -0
  20. package/resources/node-bacnet/docs/Client.html +4422 -0
  21. package/resources/node-bacnet/docs/bacnet-icon-quad.png +0 -0
  22. package/resources/node-bacnet/docs/bacnet-icon-quad128.png +0 -0
  23. package/resources/node-bacnet/docs/bacnet-icon-quad64.png +0 -0
  24. package/resources/node-bacnet/docs/bacnet-icon-small.xcf +0 -0
  25. package/resources/node-bacnet/docs/bacnet-icon.xcf +0 -0
  26. package/resources/node-bacnet/docs/bacnet.html +7032 -0
  27. package/resources/node-bacnet/docs/client.js.html +1759 -0
  28. package/resources/node-bacnet/docs/enum.js.html +2530 -0
  29. package/resources/node-bacnet/docs/global.html +2068 -0
  30. package/resources/node-bacnet/docs/images/mocha-logo.svg +65 -0
  31. package/resources/node-bacnet/docs/index.html +283 -0
  32. package/resources/node-bacnet/docs/scripts/collapse.js +11 -0
  33. package/resources/node-bacnet/docs/scripts/jquery-3.1.1.min.js +4 -0
  34. package/resources/node-bacnet/docs/scripts/linenumber.js +26 -0
  35. package/resources/node-bacnet/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  36. package/resources/node-bacnet/docs/scripts/prettify/lang-css.js +2 -0
  37. package/resources/node-bacnet/docs/scripts/prettify/prettify.js +28 -0
  38. package/resources/node-bacnet/docs/scripts/search.js +47 -0
  39. package/resources/node-bacnet/docs/services_i-am.js.html +157 -0
  40. package/resources/node-bacnet/docs/services_time-sync.js.html +118 -0
  41. package/resources/node-bacnet/docs/services_who-is.js.html +138 -0
  42. package/resources/node-bacnet/docs/styles/jsdoc.css +683 -0
  43. package/resources/node-bacnet/docs/styles/prettify.css +82 -0
  44. package/resources/node-bacnet/examples/discover-devices.js +66 -0
  45. package/resources/node-bacnet/examples/read-device.js +510 -0
  46. package/resources/node-bacnet/examples/subscribe-cov.js +75 -0
  47. package/resources/{bacstack → node-bacnet}/index.js +3 -0
  48. package/resources/{bacstack → node-bacnet}/lib/apdu.js +56 -39
  49. package/resources/{bacstack → node-bacnet}/lib/asn1.js +550 -532
  50. package/resources/node-bacnet/lib/bvlc.js +90 -0
  51. package/resources/node-bacnet/lib/client.js +1695 -0
  52. package/resources/node-bacnet/lib/enum.js +2463 -0
  53. package/resources/node-bacnet/lib/npdu.js +123 -0
  54. package/resources/{bacstack → node-bacnet}/lib/services/add-list-element.js +12 -6
  55. package/resources/{bacstack → node-bacnet}/lib/services/alarm-acknowledge.js +3 -3
  56. package/resources/{bacstack → node-bacnet}/lib/services/alarm-summary.js +5 -4
  57. package/resources/{bacstack → node-bacnet}/lib/services/atomic-read-file.js +49 -26
  58. package/resources/{bacstack → node-bacnet}/lib/services/atomic-write-file.js +40 -23
  59. package/resources/{bacstack → node-bacnet}/lib/services/cov-notify.js +33 -17
  60. package/resources/{bacstack → node-bacnet}/lib/services/create-object.js +23 -13
  61. package/resources/{bacstack → node-bacnet}/lib/services/delete-object.js +7 -2
  62. package/resources/{bacstack → node-bacnet}/lib/services/device-communication-control.js +8 -3
  63. package/resources/{bacstack → node-bacnet}/lib/services/error.js +7 -0
  64. package/resources/{bacstack → node-bacnet}/lib/services/event-information.js +10 -9
  65. package/resources/{bacstack → node-bacnet}/lib/services/event-notify-data.js +38 -16
  66. package/resources/{bacstack → node-bacnet}/lib/services/get-enrollment-summary.js +24 -11
  67. package/resources/{bacstack → node-bacnet}/lib/services/get-event-information.js +28 -13
  68. package/resources/node-bacnet/lib/services/i-am.js +90 -0
  69. package/resources/{bacstack/lib/services/i-have-broadcast.js → node-bacnet/lib/services/i-have.js} +3 -2
  70. package/resources/{bacstack → node-bacnet}/lib/services/index.js +7 -4
  71. package/resources/{bacstack → node-bacnet}/lib/services/life-safety-operation.js +3 -2
  72. package/resources/{bacstack → node-bacnet}/lib/services/private-transfer.js +3 -2
  73. package/resources/{bacstack → node-bacnet}/lib/services/read-property-multiple.js +11 -6
  74. package/resources/{bacstack → node-bacnet}/lib/services/read-property.js +42 -24
  75. package/resources/{bacstack → node-bacnet}/lib/services/read-range.js +37 -27
  76. package/resources/node-bacnet/lib/services/register-foreign-device.js +18 -0
  77. package/resources/{bacstack → node-bacnet}/lib/services/reinitialize-device.js +9 -4
  78. package/resources/{bacstack → node-bacnet}/lib/services/subscribe-cov.js +9 -4
  79. package/resources/{bacstack → node-bacnet}/lib/services/subscribe-property.js +18 -8
  80. package/resources/{bacstack → node-bacnet}/lib/services/time-sync.js +28 -5
  81. package/resources/{bacstack → node-bacnet}/lib/services/who-has.js +3 -3
  82. package/resources/{bacstack → node-bacnet}/lib/services/who-is.js +42 -9
  83. package/resources/{bacstack → node-bacnet}/lib/services/write-property-multiple.js +33 -16
  84. package/resources/{bacstack → node-bacnet}/lib/services/write-property.js +23 -13
  85. package/resources/node-bacnet/lib/transport.js +82 -0
  86. package/resources/node-bacnet/package.json +92 -0
  87. package/resources/primeicons.css +90 -2
  88. package/resources/bacstack/.codeclimate.yml +0 -15
  89. package/resources/bacstack/.dockerignore +0 -5
  90. package/resources/bacstack/.editorconfig +0 -13
  91. package/resources/bacstack/.eslintrc.yml +0 -13
  92. package/resources/bacstack/.github/ISSUE_TEMPLATE.md +0 -26
  93. package/resources/bacstack/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  94. package/resources/bacstack/.github/workflows/ci.yml +0 -39
  95. package/resources/bacstack/.jscsrc +0 -8
  96. package/resources/bacstack/.jshintrc +0 -50
  97. package/resources/bacstack/.travis.yml +0 -27
  98. package/resources/bacstack/CHANGELOG.md +0 -232
  99. package/resources/bacstack/CODE_OF_CONDUCT.md +0 -74
  100. package/resources/bacstack/CONTRIBUTING.md +0 -77
  101. package/resources/bacstack/Dockerfile +0 -15
  102. package/resources/bacstack/FAQ.md +0 -64
  103. package/resources/bacstack/README.md +0 -157
  104. package/resources/bacstack/docker-compose.yml +0 -9
  105. package/resources/bacstack/lib/adpu.js +0 -190
  106. package/resources/bacstack/lib/bvlc.js +0 -43
  107. package/resources/bacstack/lib/client.js +0 -1028
  108. package/resources/bacstack/lib/enum.js +0 -1314
  109. package/resources/bacstack/lib/npdu.js +0 -119
  110. package/resources/bacstack/lib/services/i-am-broadcast.js +0 -51
  111. package/resources/bacstack/lib/services.js +0 -1963
  112. package/resources/bacstack/lib/transport.js +0 -52
  113. package/resources/bacstack/package-lock.json +0 -7974
  114. package/resources/bacstack/package.json +0 -84
  115. package/resources/bacstack/test/compliance/who-is.spec.js +0 -37
  116. package/resources/bacstack/test/integration/acknowledge-alarm.spec.js +0 -14
  117. package/resources/bacstack/test/integration/add-list-element.spec.js +0 -16
  118. package/resources/bacstack/test/integration/confirmed-event-notification.spec.js +0 -30
  119. package/resources/bacstack/test/integration/confirmed-private-transfer.spec.js +0 -15
  120. package/resources/bacstack/test/integration/create-object.spec.js +0 -16
  121. package/resources/bacstack/test/integration/delete-object.spec.js +0 -14
  122. package/resources/bacstack/test/integration/device-communication-control.spec.js +0 -14
  123. package/resources/bacstack/test/integration/get-alarm-summary.spec.js +0 -14
  124. package/resources/bacstack/test/integration/get-enrollment-summary.spec.js +0 -15
  125. package/resources/bacstack/test/integration/get-event-information.spec.js +0 -14
  126. package/resources/bacstack/test/integration/read-file.spec.js +0 -14
  127. package/resources/bacstack/test/integration/read-property-multiple.spec.js +0 -110
  128. package/resources/bacstack/test/integration/read-property.spec.js +0 -14
  129. package/resources/bacstack/test/integration/read-range.spec.js +0 -14
  130. package/resources/bacstack/test/integration/reinitialize-sevice.spec.js +0 -14
  131. package/resources/bacstack/test/integration/remove-list-element.spec.js +0 -16
  132. package/resources/bacstack/test/integration/subscribe-cov.spec.js +0 -14
  133. package/resources/bacstack/test/integration/subscribe-property.spec.js +0 -14
  134. package/resources/bacstack/test/integration/time-sync-utc.spec.js +0 -10
  135. package/resources/bacstack/test/integration/time-sync.spec.js +0 -10
  136. package/resources/bacstack/test/integration/unconfirmed-event-notification.spec.js +0 -28
  137. package/resources/bacstack/test/integration/unconfirmed-private-transfer.spec.js +0 -11
  138. package/resources/bacstack/test/integration/utils.js +0 -30
  139. package/resources/bacstack/test/integration/who-is.spec.js +0 -17
  140. package/resources/bacstack/test/integration/write-file.spec.js +0 -14
  141. package/resources/bacstack/test/integration/write-property-multiple.spec.js +0 -19
  142. package/resources/bacstack/test/integration/write-property.spec.js +0 -14
  143. package/resources/bacstack/test/unit/apdu.spec.js +0 -162
  144. package/resources/bacstack/test/unit/asn1.spec.js +0 -39
  145. package/resources/bacstack/test/unit/bacnet-apdu.spec.js +0 -161
  146. package/resources/bacstack/test/unit/bacnet-asn1.spec.js +0 -32
  147. package/resources/bacstack/test/unit/bacnet-bvlc.spec.js +0 -57
  148. package/resources/bacstack/test/unit/bacnet-npdu.spec.js +0 -118
  149. package/resources/bacstack/test/unit/bacnet-services.spec.js +0 -2052
  150. package/resources/bacstack/test/unit/bvlc.spec.js +0 -58
  151. package/resources/bacstack/test/unit/npdu.spec.js +0 -119
  152. package/resources/bacstack/test/unit/service-add-list-element.spec.js +0 -24
  153. package/resources/bacstack/test/unit/service-alarm-acknowledge.spec.js +0 -71
  154. package/resources/bacstack/test/unit/service-alarm-summary.spec.js +0 -22
  155. package/resources/bacstack/test/unit/service-atomic-read-file.spec.js +0 -54
  156. package/resources/bacstack/test/unit/service-atomic-write-file.spec.js +0 -56
  157. package/resources/bacstack/test/unit/service-cov-notify.spec.js +0 -98
  158. package/resources/bacstack/test/unit/service-create-object.spec.js +0 -90
  159. package/resources/bacstack/test/unit/service-delete-object.spec.js +0 -17
  160. package/resources/bacstack/test/unit/service-device-communication-control.spec.js +0 -29
  161. package/resources/bacstack/test/unit/service-error.spec.js +0 -17
  162. package/resources/bacstack/test/unit/service-event-information.spec.js +0 -48
  163. package/resources/bacstack/test/unit/service-event-notify-data.spec.js +0 -310
  164. package/resources/bacstack/test/unit/service-get-enrollment-summary.spec.js +0 -45
  165. package/resources/bacstack/test/unit/service-get-event-information.spec.js +0 -62
  166. package/resources/bacstack/test/unit/service-i-am.spec.js +0 -19
  167. package/resources/bacstack/test/unit/service-i-have-broadcast.spec.js +0 -18
  168. package/resources/bacstack/test/unit/service-life-safety-operation.spec.js +0 -19
  169. package/resources/bacstack/test/unit/service-private-transfer.spec.js +0 -18
  170. package/resources/bacstack/test/unit/service-read-property-multiple.spec.js +0 -131
  171. package/resources/bacstack/test/unit/service-read-property.spec.js +0 -541
  172. package/resources/bacstack/test/unit/service-read-range.spec.js +0 -97
  173. package/resources/bacstack/test/unit/service-reinitialize-device.spec.js +0 -27
  174. package/resources/bacstack/test/unit/service-subscribe-cov.spec.js +0 -32
  175. package/resources/bacstack/test/unit/service-subscribe-property.spec.js +0 -50
  176. package/resources/bacstack/test/unit/service-time-sync.spec.js +0 -18
  177. package/resources/bacstack/test/unit/service-who-has.spec.js +0 -33
  178. package/resources/bacstack/test/unit/service-who-is.spec.js +0 -17
  179. package/resources/bacstack/test/unit/service-write-property-multiple.spec.js +0 -143
  180. package/resources/bacstack/test/unit/service-write-property.spec.js +0 -198
  181. package/resources/bacstack/test/unit/utils.js +0 -6
@@ -1,2052 +0,0 @@
1
- var expect = require('chai').expect;
2
- var utils = require('./utils');
3
- var baServices = require('../../lib/services');
4
- var baEnum = require('../../lib/enum');
5
-
6
- describe('bacstack - Services layer', function() {
7
- describe('Iam', function() {
8
- it('should successfully encode and decode', function() {
9
- var buffer = utils.getBuffer();
10
- baServices.encodeIamBroadcast(buffer, 47, 1, 1, 7);
11
- var result = baServices.decodeIamBroadcast(buffer.buffer, 0);
12
- delete result.len;
13
- expect(result).to.deep.equal({
14
- deviceId: 47,
15
- maxApdu: 1,
16
- segmentation: 1,
17
- vendorId: 7
18
- });
19
- });
20
- });
21
-
22
- describe('WhoHas', function() {
23
- it('should successfully encode and decode by id', function() {
24
- var buffer = utils.getBuffer();
25
- baServices.encodeWhoHasBroadcast(buffer, 3, 4000, {type: 3, instance: 15});
26
- var result = baServices.decodeWhoHasBroadcast(buffer.buffer, 0, buffer.offset);
27
- delete result.len;
28
- expect(result).to.deep.equal({
29
- lowLimit: 3,
30
- highLimit: 4000,
31
- objectId: {
32
- type: 3,
33
- instance: 15
34
- }
35
- });
36
- });
37
-
38
- it('should successfully encode and decode by name', function() {
39
- var buffer = utils.getBuffer();
40
- baServices.encodeWhoHasBroadcast(buffer, 3, 4000, {}, 'analog-output-1');
41
- var result = baServices.decodeWhoHasBroadcast(buffer.buffer, 0, buffer.offset);
42
- delete result.len;
43
- expect(result).to.deep.equal({
44
- lowLimit: 3,
45
- highLimit: 4000,
46
- objectName: 'analog-output-1'
47
- });
48
- });
49
- });
50
-
51
- describe('WhoIs', function() {
52
- it('should successfully encode and decode', function() {
53
- var buffer = utils.getBuffer();
54
- baServices.encodeWhoIsBroadcast(buffer, 1, 3000);
55
- var result = baServices.decodeWhoIsBroadcast(buffer.buffer, 0, buffer.offset);
56
- delete result.len;
57
- expect(result).to.deep.equal({
58
- lowLimit: 1,
59
- highLimit: 3000
60
- });
61
- });
62
- });
63
-
64
- describe('ReadPropertyAcknowledge', function() {
65
- it('should successfully encode and decode a boolean value', function() {
66
- var buffer = utils.getBuffer();
67
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
68
- {type: 1, value: true},
69
- {type: 1, value: false}
70
- ]);
71
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
72
- delete result.len;
73
- expect(result).to.deep.equal({
74
- objectId: {
75
- type: 8,
76
- instance: 40000
77
- },
78
- property: {
79
- index: 0xFFFFFFFF,
80
- id: 81
81
- },
82
- values: [
83
- {type: 1, value: true},
84
- {type: 1, value: false}
85
- ]
86
- });
87
- });
88
-
89
- it('should successfully encode and decode a boolean value with array index', function() {
90
- var buffer = utils.getBuffer();
91
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 2, [
92
- {type: 1, value: true}
93
- ]);
94
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
95
- delete result.len;
96
- expect(result).to.deep.equal({
97
- objectId: {
98
- type: 8,
99
- instance: 40000
100
- },
101
- property: {
102
- index: 2,
103
- id: 81
104
- },
105
- values: [
106
- {type: 1, value: true}
107
- ]
108
- });
109
- });
110
-
111
- it('should successfully encode and decode an unsigned value', function() {
112
- var buffer = utils.getBuffer();
113
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
114
- {type: 2, value: 1},
115
- {type: 2, value: 1000},
116
- {type: 2, value: 1000000},
117
- {type: 2, value: 1000000000}
118
- ]);
119
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
120
- delete result.len;
121
- expect(result).to.deep.equal({
122
- objectId: {
123
- type: 8,
124
- instance: 40000
125
- },
126
- property: {
127
- index: 0xFFFFFFFF,
128
- id: 81
129
- },
130
- values: [
131
- {type: 2, value: 1},
132
- {type: 2, value: 1000},
133
- {type: 2, value: 1000000},
134
- {type: 2, value: 1000000000}
135
- ]
136
- });
137
- });
138
-
139
- it('should successfully encode and decode a signed value', function() {
140
- var buffer = utils.getBuffer();
141
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
142
- {type: 3, value: -1},
143
- {type: 3, value: -1000},
144
- {type: 3, value: -1000000},
145
- {type: 3, value: -1000000000}
146
- ]);
147
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
148
- delete result.len;
149
- expect(result).to.deep.equal({
150
- objectId: {
151
- type: 8,
152
- instance: 40000
153
- },
154
- property: {
155
- index: 0xFFFFFFFF,
156
- id: 81
157
- },
158
- values: [
159
- {type: 3, value: -1},
160
- {type: 3, value: -1000},
161
- {type: 3, value: -1000000},
162
- {type: 3, value: -1000000000}
163
- ]
164
- });
165
- });
166
-
167
- it('should successfully encode and decode an real value', function() {
168
- var buffer = utils.getBuffer();
169
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
170
- {type: 4, value: 0},
171
- {type: 4, value: 0.1}
172
- ]);
173
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
174
- delete result.len;
175
- expect(Math.floor(0.1 * 10000)).to.equal(Math.floor(result.values[1].value * 10000));
176
- result.values[1].value = 0;
177
- expect(result).to.deep.equal({
178
- objectId: {
179
- type: 8,
180
- instance: 40000
181
- },
182
- property: {
183
- index: 0xFFFFFFFF,
184
- id: 81
185
- },
186
- values: [
187
- {type: 4, value: 0},
188
- {type: 4, value: 0}
189
- ]
190
- });
191
- });
192
-
193
- it('should successfully encode and decode a double value', function() {
194
- var buffer = utils.getBuffer();
195
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
196
- {type: 5, value: 0},
197
- {type: 5, value: 100.121212}
198
- ]);
199
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
200
- delete result.len;
201
- expect(result).to.deep.equal({
202
- objectId: {
203
- type: 8,
204
- instance: 40000
205
- },
206
- property: {
207
- index: 0xFFFFFFFF,
208
- id: 81
209
- },
210
- values: [
211
- {type: 5, value: 0},
212
- {type: 5, value: 100.121212}
213
- ]
214
- });
215
- });
216
-
217
- it('should successfully encode and decode an octet-string value', function() {
218
- var buffer = utils.getBuffer();
219
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
220
- {type: 6, value: []},
221
- {type: 6, value: [1, 2, 100, 200]}
222
- ]);
223
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
224
- delete result.len;
225
- expect(result).to.deep.equal({
226
- objectId: {
227
- type: 8,
228
- instance: 40000
229
- },
230
- property: {
231
- index: 0xFFFFFFFF,
232
- id: 81
233
- },
234
- values: [
235
- {type: 6, value: []},
236
- {type: 6, value: [1, 2, 100, 200]}
237
- ]
238
- });
239
- });
240
-
241
- it('should successfully encode and decode a character-string value', function() {
242
- var buffer = utils.getBuffer();
243
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
244
- {type: 7, value: ''},
245
- {type: 7, value: 'Test1234$äöü'}
246
- ]);
247
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
248
- delete result.len;
249
- expect(result).to.deep.equal({
250
- objectId: {
251
- type: 8,
252
- instance: 40000
253
- },
254
- property: {
255
- index: 0xFFFFFFFF,
256
- id: 81
257
- },
258
- values: [
259
- {type: 7, value: '', encoding: 0},
260
- {type: 7, value: 'Test1234$äöü', encoding: 0}
261
- ]
262
- });
263
- });
264
-
265
- it('should successfully encode and decode a character-string value with ISO-8859-1 encoding', function() {
266
- var buffer = utils.getBuffer();
267
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
268
- {type: 7, value: '', encoding: baEnum.CharacterStringEncodings.CHARACTER_ISO8859_1},
269
- {type: 7, value: 'Test1234$äöü', encoding: baEnum.CharacterStringEncodings.CHARACTER_ISO8859_1}
270
- ]);
271
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
272
- delete result.len;
273
- expect(result).to.deep.equal({
274
- objectId: {
275
- type: 8,
276
- instance: 40000
277
- },
278
- property: {
279
- index: 0xFFFFFFFF,
280
- id: 81
281
- },
282
- values: [
283
- {type: 7, value: '', encoding: baEnum.CharacterStringEncodings.CHARACTER_ISO8859_1},
284
- {type: 7, value: 'Test1234$äöü', encoding: baEnum.CharacterStringEncodings.CHARACTER_ISO8859_1}
285
- ]
286
- });
287
- });
288
-
289
- it('should successfully encode and decode a character-string value with UCS2 encoding', function() {
290
- var buffer = utils.getBuffer();
291
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
292
- {type: 7, value: '', encoding: baEnum.CharacterStringEncodings.CHARACTER_UCS2},
293
- {type: 7, value: 'Test1234$äöü', encoding: baEnum.CharacterStringEncodings.CHARACTER_UCS2}
294
- ]);
295
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
296
- delete result.len;
297
- expect(result).to.deep.equal({
298
- objectId: {
299
- type: 8,
300
- instance: 40000
301
- },
302
- property: {
303
- index: 0xFFFFFFFF,
304
- id: 81
305
- },
306
- values: [
307
- {type: 7, value: '', encoding: baEnum.CharacterStringEncodings.CHARACTER_UCS2},
308
- {type: 7, value: 'Test1234$äöü', encoding: baEnum.CharacterStringEncodings.CHARACTER_UCS2}
309
- ]
310
- });
311
- });
312
-
313
- it('should successfully encode and decode a character-string value with Codepage850 encoding', function() {
314
- var buffer = utils.getBuffer();
315
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
316
- {type: 7, value: '', encoding: baEnum.CharacterStringEncodings.CHARACTER_MS_DBCS},
317
- {type: 7, value: 'Test1234$äöü', encoding: baEnum.CharacterStringEncodings.CHARACTER_MS_DBCS}
318
- ]);
319
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
320
- delete result.len;
321
- expect(result).to.deep.equal({
322
- objectId: {
323
- type: 8,
324
- instance: 40000
325
- },
326
- property: {
327
- index: 0xFFFFFFFF,
328
- id: 81
329
- },
330
- values: [
331
- {type: 7, value: '', encoding: baEnum.CharacterStringEncodings.CHARACTER_MS_DBCS},
332
- {type: 7, value: 'Test1234$äöü', encoding: baEnum.CharacterStringEncodings.CHARACTER_MS_DBCS}
333
- ]
334
- });
335
- });
336
-
337
- it('should successfully encode and decode a character-string value with JISX-0208 encoding', function() {
338
- var buffer = utils.getBuffer();
339
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
340
- {type: 7, value: '', encoding: baEnum.CharacterStringEncodings.CHARACTER_JISX_0208},
341
- {type: 7, value: 'できます', encoding: baEnum.CharacterStringEncodings.CHARACTER_JISX_0208}
342
- ]);
343
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
344
- delete result.len;
345
- expect(result).to.deep.equal({
346
- objectId: {
347
- type: 8,
348
- instance: 40000
349
- },
350
- property: {
351
- index: 0xFFFFFFFF,
352
- id: 81
353
- },
354
- values: [
355
- {type: 7, value: '', encoding: baEnum.CharacterStringEncodings.CHARACTER_JISX_0208},
356
- {type: 7, value: 'できます', encoding: baEnum.CharacterStringEncodings.CHARACTER_JISX_0208}
357
- ]
358
- });
359
- });
360
-
361
- it('should successfully encode and decode a bit-string value', function() {
362
- var buffer = utils.getBuffer();
363
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
364
- {type: 8, value: {bitsUsed: 0, value: []}},
365
- {type: 8, value: {bitsUsed: 24, value: [0xAA, 0xAA, 0xAA]}}
366
- ]);
367
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
368
- delete result.len;
369
- expect(result).to.deep.equal({
370
- objectId: {
371
- type: 8,
372
- instance: 40000
373
- },
374
- property: {
375
- index: 0xFFFFFFFF,
376
- id: 81
377
- },
378
- values: [
379
- {type: 8, value: {bitsUsed: 0, value: []}},
380
- {type: 8, value: {bitsUsed: 24, value: [0xAA, 0xAA, 0xAA]}}
381
- ]
382
- });
383
- });
384
-
385
- it('should successfully encode and decode a enumeration value', function() {
386
- var buffer = utils.getBuffer();
387
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
388
- {type: 9, value: 0},
389
- {type: 9, value: 4}
390
- ]);
391
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
392
- delete result.len;
393
- expect(result).to.deep.equal({
394
- objectId: {
395
- type: 8,
396
- instance: 40000
397
- },
398
- property: {
399
- index: 0xFFFFFFFF,
400
- id: 81
401
- },
402
- values: [
403
- {type: 9, value: 0},
404
- {type: 9, value: 4}
405
- ]
406
- });
407
- });
408
-
409
- it('should successfully encode and decode a date value', function() {
410
- var buffer = utils.getBuffer();
411
- var date = new Date(1, 1, 1);
412
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
413
- {type: 10, value: date}
414
- ]);
415
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
416
- delete result.len;
417
- expect(result).to.deep.equal({
418
- objectId: {
419
- type: 8,
420
- instance: 40000
421
- },
422
- property: {
423
- index: 0xFFFFFFFF,
424
- id: 81
425
- },
426
- values: [
427
- {type: 10, value: date}
428
- ]
429
- });
430
- });
431
-
432
- it('should successfully encode and decode a time value', function() {
433
- var buffer = utils.getBuffer();
434
- var time = new Date(1, 1, 1);
435
- time.setMilliseconds(990);
436
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
437
- {type: 11, value: time}
438
- ]);
439
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
440
- delete result.len;
441
- expect(result).to.deep.equal({
442
- objectId: {
443
- type: 8,
444
- instance: 40000
445
- },
446
- property: {
447
- index: 0xFFFFFFFF,
448
- id: 81
449
- },
450
- values: [
451
- {type: 11, value: time}
452
- ]
453
- });
454
- });
455
-
456
- it('should successfully encode and decode a object-identifier value', function() {
457
- var buffer = utils.getBuffer();
458
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 8, instance: 40000}, 81, 0xFFFFFFFF, [
459
- {type: 12, value: {type: 3, instance: 0}},
460
- {type: 12, value: {type: 3, instance: 50000}}
461
- ]);
462
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
463
- delete result.len;
464
- expect(result).to.deep.equal({
465
- objectId: {
466
- type: 8,
467
- instance: 40000
468
- },
469
- property: {
470
- index: 0xFFFFFFFF,
471
- id: 81
472
- },
473
- values: [
474
- {type: 12, value: {type: 3, instance: 0}},
475
- {type: 12, value: {type: 3, instance: 50000}}
476
- ]
477
- });
478
- });
479
-
480
- it('should successfully encode and decode a cov-subscription value', function() {
481
- var buffer = utils.getBuffer();
482
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 222, instance: 3}, 152, 0xFFFFFFFF, [
483
- {type: 111, value: {
484
- recipient: {network: 12, address: [0, 1]},
485
- subscriptionProcessId: 3,
486
- monitoredObjectId: {type: 2, instance: 1},
487
- monitoredProperty: {id: 85, index: 0},
488
- issueConfirmedNotifications: false,
489
- timeRemaining: 5,
490
- covIncrement: 1
491
- }},
492
- {type: 111, value: {
493
- recipient: {network: 0xFFFF, address: []},
494
- subscriptionProcessId: 3,
495
- monitoredObjectId: {type: 2, instance: 1},
496
- monitoredProperty: {id: 85, index: 5},
497
- issueConfirmedNotifications: true,
498
- timeRemaining: 5
499
- }}
500
- ]);
501
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
502
- delete result.len;
503
- expect(result).to.deep.equal({
504
- objectId: {
505
- type: 222,
506
- instance: 3
507
- },
508
- property: {
509
- index: 0xFFFFFFFF,
510
- id: 152
511
- },
512
- values: [
513
- {type: 111, value: {
514
- recipient: {net: 12, adr: [0, 1]},
515
- subscriptionProcessId: 3,
516
- monitoredObjectId: {type: 2, instance: 1},
517
- monitoredProperty: {id: 85, index: 0},
518
- issueConfirmedNotifications: false,
519
- timeRemaining: 5,
520
- covIncrement: 1
521
- }},
522
- {type: 111, value: {
523
- recipient: {net: 0xFFFF, adr: []},
524
- subscriptionProcessId: 3,
525
- monitoredObjectId: {type: 2, instance: 1},
526
- monitoredProperty: {id: 85, index: 5},
527
- issueConfirmedNotifications: true,
528
- timeRemaining: 5
529
- }}
530
- ]
531
- });
532
- });
533
-
534
- it('should successfully encode and decode a read-access-specification value', function() {
535
- var buffer = utils.getBuffer();
536
- baServices.encodeReadPropertyAcknowledge(buffer, {type: 223, instance: 90000}, 53, 0xFFFFFFFF, [
537
- {type: 115, value: {objectId: {type: 3, instance: 0}, properties: []}},
538
- {type: 115, value: {objectId: {type: 3, instance: 50000}, properties: [
539
- {id: 85},
540
- {id: 1, index: 2}
541
- ]}}
542
- ]);
543
- var result = baServices.decodeReadPropertyAcknowledge(buffer.buffer, 0, buffer.offset);
544
- delete result.len;
545
- expect(result).to.deep.equal({
546
- objectId: {
547
- type: 223,
548
- instance: 90000
549
- },
550
- property: {
551
- index: 0xFFFFFFFF,
552
- id: 53
553
- },
554
- values: [
555
- {type: 115, value: {objectId: {type: 3, instance: 0}, properties: []}},
556
- {type: 115, value: {objectId: {type: 3, instance: 50000}, properties: [
557
- {id: 85, index: 0xFFFFFFFF},
558
- {id: 1, index: 2}
559
- ]}}
560
- ]
561
- });
562
- });
563
- });
564
-
565
- describe('ReadPropertyMultipleAcknowledge', function() {
566
- it('should successfully encode and decode', function() {
567
- var buffer = utils.getBuffer();
568
- var date = new Date(1, 1, 1);
569
- var time = new Date(1, 1, 1);
570
- time.setMilliseconds(990);
571
- baServices.encodeReadPropertyMultipleAcknowledge(buffer, [
572
- {objectId: {type: 9, instance: 50000}, values: [
573
- {property: {id: 81, index: 0xFFFFFFFF}, value: [
574
- {type: 0},
575
- {type: 1, value: null},
576
- {type: 1, value: true},
577
- {type: 1, value: false},
578
- {type: 2, value: 1},
579
- {type: 2, value: 1000},
580
- {type: 2, value: 1000000},
581
- {type: 2, value: 1000000000},
582
- {type: 3, value: -1},
583
- {type: 3, value: -1000},
584
- {type: 3, value: -1000000},
585
- {type: 3, value: -1000000000},
586
- {type: 4, value: 0.1},
587
- {type: 5, value: 100.121212},
588
- {type: 6, value: [1, 2, 100, 200]},
589
- {type: 7, value: 'Test1234$'},
590
- {type: 8, value: {bitsUsed: 0, value: []}},
591
- {type: 8, value: {bitsUsed: 24, value: [0xAA, 0xAA, 0xAA]}},
592
- {type: 9, value: 4},
593
- {type: 10, value: date},
594
- {type: 11, value: time},
595
- {type: 12, value: {type: 3, instance: 0}}
596
- ]}
597
- ]}
598
- ]);
599
- var result = baServices.decodeReadPropertyMultipleAcknowledge(buffer.buffer, 0, buffer.offset);
600
- delete result.len;
601
- expect(Math.floor(0.1 * 10000)).to.equal(Math.floor(result.values[0].values[0].value[12].value * 10000));
602
- result.values[0].values[0].value[12].value = 0;
603
- expect(result).to.deep.equal({
604
- values: [{
605
- objectId: {
606
- type: 9,
607
- instance: 50000
608
- },
609
- values: [{
610
- index: 4294967295,
611
- id: 81,
612
- value: [
613
- {type: 0, value: null},
614
- {type: 0, value: null},
615
- {type: 1, value: true},
616
- {type: 1, value: false},
617
- {type: 2, value: 1},
618
- {type: 2, value: 1000},
619
- {type: 2, value: 1000000},
620
- {type: 2, value: 1000000000},
621
- {type: 3, value: -1},
622
- {type: 3, value: -1000},
623
- {type: 3, value: -1000000},
624
- {type: 3, value: -1000000000},
625
- {type: 4, value: 0},
626
- {type: 5, value: 100.121212},
627
- {type: 6, value: [1, 2, 100, 200]},
628
- {type: 7, value: 'Test1234$', encoding: 0},
629
- {type: 8, value: {bitsUsed: 0, value: []}},
630
- {type: 8, value: {bitsUsed: 24, value: [0xAA, 0xAA, 0xAA]}},
631
- {type: 9, value: 4},
632
- {type: 10, value: date},
633
- {type: 11, value: time},
634
- {type: 12, value: {type: 3, instance: 0}}
635
- ]
636
- }]
637
- }]
638
- });
639
- });
640
- });
641
-
642
- describe('WriteProperty', function() {
643
- it('should successfully encode and decode', function() {
644
- var buffer = utils.getBuffer();
645
- var date = new Date(1, 1, 1);
646
- var time = new Date(1, 1, 1);
647
- time.setMilliseconds(990);
648
- baServices.encodeWriteProperty(buffer, 31, 12, 80, 0xFFFFFFFF, 0, [
649
- {type: 0},
650
- {type: 1, value: null},
651
- {type: 1, value: true},
652
- {type: 1, value: false},
653
- {type: 2, value: 1},
654
- {type: 2, value: 1000},
655
- {type: 2, value: 1000000},
656
- {type: 2, value: 1000000000},
657
- {type: 3, value: -1},
658
- {type: 3, value: -1000},
659
- {type: 3, value: -1000000},
660
- {type: 3, value: -1000000000},
661
- {type: 4, value: 0},
662
- {type: 5, value: 100.121212},
663
- {type: 7, value: 'Test1234$'},
664
- {type: 9, value: 4},
665
- {type: 10, value: date},
666
- {type: 11, value: time},
667
- {type: 12, value: {type: 3, instance: 0}}
668
- ]);
669
- var result = baServices.decodeWriteProperty(buffer.buffer, 0, buffer.offset);
670
- delete result.len;
671
- expect(result).to.deep.equal({
672
- objectId: {
673
- instance: 12,
674
- type: 31
675
- },
676
- value: {
677
- priority: 16,
678
- property: {
679
- index: 4294967295,
680
- id: 80
681
- },
682
- value: [
683
- {type: 0, value: null},
684
- {type: 0, value: null},
685
- {type: 1, value: true},
686
- {type: 1, value: false},
687
- {type: 2, value: 1},
688
- {type: 2, value: 1000},
689
- {type: 2, value: 1000000},
690
- {type: 2, value: 1000000000},
691
- {type: 3, value: -1},
692
- {type: 3, value: -1000},
693
- {type: 3, value: -1000000},
694
- {type: 3, value: -1000000000},
695
- {type: 4, value: 0},
696
- {type: 5, value: 100.121212},
697
- {type: 7, value: 'Test1234$', encoding: 0},
698
- {type: 9, value: 4},
699
- {type: 10, value: date},
700
- {type: 11, value: time},
701
- {type: 12, value: {type: 3, instance: 0}}
702
- ]
703
- }
704
- });
705
- });
706
-
707
- it('should successfully encode and decode with defined priority', function() {
708
- var buffer = utils.getBuffer();
709
- var date = new Date(1, 1, 1);
710
- var time = new Date(1, 1, 1);
711
- time.setMilliseconds(990);
712
- baServices.encodeWriteProperty(buffer, 31, 12, 80, 0xFFFFFFFF, 8, [
713
- {type: 0},
714
- {type: 1, value: null},
715
- {type: 1, value: true},
716
- {type: 1, value: false},
717
- {type: 2, value: 1},
718
- {type: 2, value: 1000},
719
- {type: 2, value: 1000000},
720
- {type: 2, value: 1000000000},
721
- {type: 3, value: -1},
722
- {type: 3, value: -1000},
723
- {type: 3, value: -1000000},
724
- {type: 3, value: -1000000000},
725
- {type: 4, value: 0},
726
- {type: 5, value: 100.121212},
727
- {type: 7, value: 'Test1234$'},
728
- {type: 9, value: 4},
729
- {type: 10, value: date},
730
- {type: 11, value: time},
731
- {type: 12, value: {type: 3, instance: 0}}
732
- ]);
733
- var result = baServices.decodeWriteProperty(buffer.buffer, 0, buffer.offset);
734
- delete result.len;
735
- expect(result).to.deep.equal({
736
- objectId: {
737
- instance: 12,
738
- type: 31
739
- },
740
- value: {
741
- priority: 8,
742
- property: {
743
- index: 4294967295,
744
- id: 80
745
- },
746
- value: [
747
- {type: 0, value: null},
748
- {type: 0, value: null},
749
- {type: 1, value: true},
750
- {type: 1, value: false},
751
- {type: 2, value: 1},
752
- {type: 2, value: 1000},
753
- {type: 2, value: 1000000},
754
- {type: 2, value: 1000000000},
755
- {type: 3, value: -1},
756
- {type: 3, value: -1000},
757
- {type: 3, value: -1000000},
758
- {type: 3, value: -1000000000},
759
- {type: 4, value: 0},
760
- {type: 5, value: 100.121212},
761
- {type: 7, value: 'Test1234$', encoding: 0},
762
- {type: 9, value: 4},
763
- {type: 10, value: date},
764
- {type: 11, value: time},
765
- {type: 12, value: {type: 3, instance: 0}}
766
- ]
767
- }
768
- });
769
- });
770
-
771
- it('should successfully encode and decode with defined array index', function() {
772
- var buffer = utils.getBuffer();
773
- var date = new Date(1, 1, 1);
774
- var time = new Date(1, 1, 1);
775
- time.setMilliseconds(990);
776
- baServices.encodeWriteProperty(buffer, 31, 12, 80, 2, 0, [
777
- {type: 0, value: null},
778
- {type: 0, value: null},
779
- {type: 1, value: true},
780
- {type: 1, value: false},
781
- {type: 2, value: 1},
782
- {type: 2, value: 1000},
783
- {type: 2, value: 1000000},
784
- {type: 2, value: 1000000000},
785
- {type: 3, value: -1},
786
- {type: 3, value: -1000},
787
- {type: 3, value: -1000000},
788
- {type: 3, value: -1000000000},
789
- {type: 4, value: 0},
790
- {type: 5, value: 100.121212},
791
- {type: 7, value: 'Test1234$', encoding: 0},
792
- {type: 9, value: 4},
793
- {type: 10, value: date},
794
- {type: 11, value: time},
795
- {type: 12, value: {type: 3, instance: 0}}
796
- ]);
797
- var result = baServices.decodeWriteProperty(buffer.buffer, 0, buffer.offset);
798
- delete result.len;
799
- expect(result).to.deep.equal({
800
- objectId: {
801
- instance: 12,
802
- type: 31
803
- },
804
- value: {
805
- priority: 16,
806
- property: {
807
- index: 2,
808
- id: 80
809
- },
810
- value: [
811
- {type: 0, value: null},
812
- {type: 0, value: null},
813
- {type: 1, value: true},
814
- {type: 1, value: false},
815
- {type: 2, value: 1},
816
- {type: 2, value: 1000},
817
- {type: 2, value: 1000000},
818
- {type: 2, value: 1000000000},
819
- {type: 3, value: -1},
820
- {type: 3, value: -1000},
821
- {type: 3, value: -1000000},
822
- {type: 3, value: -1000000000},
823
- {type: 4, value: 0},
824
- {type: 5, value: 100.121212},
825
- {type: 7, value: 'Test1234$', encoding: 0},
826
- {type: 9, value: 4},
827
- {type: 10, value: date},
828
- {type: 11, value: time},
829
- {type: 12, value: {type: 3, instance: 0}}
830
- ]
831
- }
832
- });
833
- });
834
- });
835
-
836
- describe('WritePropertyMultiple', function() {
837
- it('should successfully encode and decode', function() {
838
- var buffer = utils.getBuffer();
839
- var date = new Date(1, 1, 1);
840
- var time = new Date(1, 1, 1);
841
- time.setMilliseconds(990);
842
- baServices.encodeWritePropertyMultiple(buffer, {type: 39, instance: 2400}, [
843
- {property: {id: 81, index: 0xFFFFFFFF}, value: [
844
- {type: 0, value: null},
845
- {type: 0, value: null},
846
- {type: 1, value: true},
847
- {type: 1, value: false},
848
- {type: 2, value: 1},
849
- {type: 2, value: 1000},
850
- {type: 2, value: 1000000},
851
- {type: 2, value: 1000000000},
852
- {type: 3, value: -1},
853
- {type: 3, value: -1000},
854
- {type: 3, value: -1000000},
855
- {type: 3, value: -1000000000},
856
- {type: 4, value: 0.1},
857
- {type: 5, value: 100.121212},
858
- {type: 6, value: [1, 2, 100, 200]},
859
- {type: 7, value: 'Test1234$'},
860
- {type: 8, value: {bitsUsed: 0, value: []}},
861
- {type: 8, value: {bitsUsed: 24, value: [0xAA, 0xAA, 0xAA]}},
862
- {type: 9, value: 4},
863
- {type: 10, value: date},
864
- {type: 11, value: time},
865
- {type: 12, value: {type: 3, instance: 0}}
866
- ], priority: 0}
867
- ]);
868
- var result = baServices.decodeWritePropertyMultiple(buffer.buffer, 0, buffer.offset);
869
- delete result.len;
870
- result.values[0].value[12].value = Math.floor(result.values[0].value[12].value * 1000) / 1000;
871
- expect(result).to.deep.equal({
872
- objectId: {
873
- type: 39,
874
- instance: 2400
875
- },
876
- values: [
877
- {
878
- priority: 0,
879
- property: {
880
- index: 0xFFFFFFFF,
881
- id: 81
882
- },
883
- value: [
884
- {type: 0, value: null},
885
- {type: 0, value: null},
886
- {type: 1, value: true},
887
- {type: 1, value: false},
888
- {type: 2, value: 1},
889
- {type: 2, value: 1000},
890
- {type: 2, value: 1000000},
891
- {type: 2, value: 1000000000},
892
- {type: 3, value: -1},
893
- {type: 3, value: -1000},
894
- {type: 3, value: -1000000},
895
- {type: 3, value: -1000000000},
896
- {type: 4, value: 0.1},
897
- {type: 5, value: 100.121212},
898
- {type: 6, value: [1, 2, 100, 200]},
899
- {type: 7, value: 'Test1234$', encoding: 0},
900
- {type: 8, value: {bitsUsed: 0, value: []}},
901
- {type: 8, value: {bitsUsed: 24, value: [0xAA, 0xAA, 0xAA]}},
902
- {type: 9, value: 4},
903
- {type: 10, value: date},
904
- {type: 11, value: time},
905
- {type: 12, value: {type: 3, instance: 0}}
906
- ]
907
- }
908
- ]
909
- });
910
- });
911
-
912
- it('should successfully encode and decode with defined priority', function() {
913
- var buffer = utils.getBuffer();
914
- var date = new Date(1, 1, 1);
915
- var time = new Date(1, 1, 1);
916
- time.setMilliseconds(990);
917
- baServices.encodeWritePropertyMultiple(buffer, {type: 39, instance: 2400}, [
918
- {property: {id: 81, index: 0xFFFFFFFF}, value: [
919
- {type: 7, value: 'Test1234$'}
920
- ], priority: 12}
921
- ]);
922
- var result = baServices.decodeWritePropertyMultiple(buffer.buffer, 0, buffer.offset);
923
- delete result.len;
924
- expect(result).to.deep.equal({
925
- objectId: {
926
- type: 39,
927
- instance: 2400
928
- },
929
- values: [
930
- {
931
- priority: 12,
932
- property: {
933
- index: 0xFFFFFFFF,
934
- id: 81
935
- },
936
- value: [
937
- {type: 7, value: 'Test1234$', encoding: 0}
938
- ]
939
- }
940
- ]
941
- });
942
- });
943
-
944
- it('should successfully encode and decode with defined array index', function() {
945
- var buffer = utils.getBuffer();
946
- var date = new Date(1, 1, 1);
947
- var time = new Date(1, 1, 1);
948
- time.setMilliseconds(990);
949
- baServices.encodeWritePropertyMultiple(buffer, {type: 39, instance: 2400}, [
950
- {property: {id: 81, index: 414141}, value: [
951
- {type: 7, value: 'Test1234$'}
952
- ], priority: 0}
953
- ]);
954
- var result = baServices.decodeWritePropertyMultiple(buffer.buffer, 0, buffer.offset);
955
- delete result.len;
956
- expect(result).to.deep.equal({
957
- objectId: {
958
- type: 39,
959
- instance: 2400
960
- },
961
- values: [
962
- {
963
- priority: 0,
964
- property: {
965
- index: 414141,
966
- id: 81
967
- },
968
- value: [
969
- {type: 7, value: 'Test1234$', encoding: 0}
970
- ]
971
- }
972
- ]
973
- });
974
- });
975
- });
976
-
977
- describe('DeviceCommunicationControl', function() {
978
- it('should successfully encode and decode', function() {
979
- var buffer = utils.getBuffer();
980
- baServices.encodeDeviceCommunicationControl(buffer, 30, 1);
981
- var result = baServices.decodeDeviceCommunicationControl(buffer.buffer, 0, buffer.offset);
982
- delete result.len;
983
- expect(result).to.deep.equal({
984
- timeDuration: 30,
985
- enableDisable: 1
986
- });
987
- });
988
-
989
- it('should successfully encode and decode with password', function() {
990
- var buffer = utils.getBuffer();
991
- baServices.encodeDeviceCommunicationControl(buffer, 30, 1, 'Test1234!');
992
- var result = baServices.decodeDeviceCommunicationControl(buffer.buffer, 0, buffer.offset);
993
- delete result.len;
994
- expect(result).to.deep.equal({
995
- timeDuration: 30,
996
- enableDisable: 1,
997
- password: 'Test1234!'
998
- });
999
- });
1000
- });
1001
-
1002
- describe('ReinitializeDevice', function() {
1003
- it('should successfully encode and decode', function() {
1004
- var buffer = utils.getBuffer();
1005
- baServices.encodeReinitializeDevice(buffer, 5);
1006
- var result = baServices.decodeReinitializeDevice(buffer.buffer, 0, buffer.offset);
1007
- delete result.len;
1008
- expect(result).to.deep.equal({
1009
- state: 5
1010
- });
1011
- });
1012
-
1013
- it('should successfully encode and decode with password', function() {
1014
- var buffer = utils.getBuffer();
1015
- baServices.encodeReinitializeDevice(buffer, 5, 'Test1234$');
1016
- var result = baServices.decodeReinitializeDevice(buffer.buffer, 0, buffer.offset);
1017
- delete result.len;
1018
- expect(result).to.deep.equal({
1019
- state: 5,
1020
- password: 'Test1234$'
1021
- });
1022
- });
1023
- });
1024
-
1025
- describe('TimeSync', function() {
1026
- it('should successfully encode and decode', function() {
1027
- var buffer = utils.getBuffer();
1028
- var date = new Date();
1029
- date.setMilliseconds(990);
1030
- baServices.encodeTimeSync(buffer, date);
1031
- var result = baServices.decodeTimeSync(buffer.buffer, 0, buffer.offset);
1032
- delete result.len;
1033
- expect(result).to.deep.equal({
1034
- value: date
1035
- });
1036
- });
1037
- });
1038
-
1039
- describe('Error', function() {
1040
- it('should successfully encode and decode', function() {
1041
- var buffer = utils.getBuffer();
1042
- baServices.encodeError(buffer, 15, 25);
1043
- var result = baServices.decodeError(buffer.buffer, 0);
1044
- delete result.len;
1045
- expect(result).to.deep.equal({
1046
- class: 15,
1047
- code: 25
1048
- });
1049
- });
1050
- });
1051
-
1052
- describe('ReadPropertyMultiple', function() {
1053
- it('should successfully encode and decode', function() {
1054
- var buffer = utils.getBuffer();
1055
- baServices.encodeReadPropertyMultiple(buffer, [
1056
- {objectId: {type: 51, instance: 1}, properties: [
1057
- {id: 85, index: 0xFFFFFFFF},
1058
- {id: 85, index: 4}
1059
- ]}
1060
- ]);
1061
- var result = baServices.decodeReadPropertyMultiple(buffer.buffer, 0, buffer.offset);
1062
- delete result.len;
1063
- expect(result).to.deep.equal({properties: [{objectId: {type: 51, instance: 1}, properties: [
1064
- {id: 85, index: 0xFFFFFFFF},
1065
- {id: 85, index: 4}
1066
- ]}]});
1067
- });
1068
- });
1069
-
1070
- describe('SubscribeProperty', function() {
1071
- it('should successfully encode and decode with cancellation request', function() {
1072
- var buffer = utils.getBuffer();
1073
- baServices.encodeSubscribeProperty(buffer, 7, {type: 148, instance: 362}, true, false, 1, {id: 85, index: 0xFFFFFFFF}, true, 1);
1074
- var result = baServices.decodeSubscribeProperty(buffer.buffer, 0);
1075
- delete result.len;
1076
- expect(result).to.deep.equal({
1077
- cancellationRequest: true,
1078
- covIncrement: 1,
1079
- issueConfirmedNotifications: false,
1080
- lifetime: 0,
1081
- monitoredObjectId: {
1082
- instance: 362,
1083
- type: 148
1084
- },
1085
- monitoredProperty: {
1086
- index: 4294967295,
1087
- id: 85
1088
- },
1089
- subscriberProcessId: 7
1090
- });
1091
- });
1092
-
1093
- it('should successfully encode and decode without cancellation request', function() {
1094
- var buffer = utils.getBuffer();
1095
- baServices.encodeSubscribeProperty(buffer, 8, {type: 149, instance: 363}, false, true, 2, {id: 86, index: 3}, false, 10);
1096
- var result = baServices.decodeSubscribeProperty(buffer.buffer, 0);
1097
- delete result.len;
1098
- expect(result).to.deep.equal({
1099
- cancellationRequest: false,
1100
- covIncrement: 0,
1101
- issueConfirmedNotifications: true,
1102
- lifetime: 2,
1103
- monitoredObjectId: {
1104
- instance: 363,
1105
- type: 149
1106
- },
1107
- monitoredProperty: {
1108
- index: 3,
1109
- id: 86
1110
- },
1111
- subscriberProcessId: 8
1112
- });
1113
- });
1114
- });
1115
-
1116
- describe('SubscribeCOV', function() {
1117
- it('should successfully encode and decode a cancelation request', function() {
1118
- var buffer = utils.getBuffer();
1119
- baServices.encodeSubscribeCOV(buffer, 10, {type: 3, instance: 1}, true);
1120
- var result = baServices.decodeSubscribeCOV(buffer.buffer, 0, buffer.offset);
1121
- delete result.len;
1122
- expect(result).to.deep.equal({
1123
- cancellationRequest: true,
1124
- monitoredObjectId: {type: 3, instance: 1},
1125
- subscriberProcessId: 10
1126
- });
1127
- });
1128
-
1129
- it('should successfully encode and decode subscription request', function() {
1130
- var buffer = utils.getBuffer();
1131
- baServices.encodeSubscribeCOV(buffer, 11, {type: 3, instance: 2}, false, true, 5000);
1132
- var result = baServices.decodeSubscribeCOV(buffer.buffer, 0, buffer.offset);
1133
- delete result.len;
1134
- expect(result).to.deep.equal({
1135
- cancellationRequest: false,
1136
- issueConfirmedNotifications: true,
1137
- lifetime: 5000,
1138
- monitoredObjectId: {type: 3, instance: 2},
1139
- subscriberProcessId: 11
1140
- });
1141
- });
1142
- });
1143
-
1144
- describe('AtomicWriteFileAcknowledge', function() {
1145
- it('should successfully encode and decode streamed file', function() {
1146
- var buffer = utils.getBuffer();
1147
- baServices.encodeAtomicWriteFileAcknowledge(buffer, true, -10);
1148
- var result = baServices.decodeAtomicWriteFileAcknowledge(buffer.buffer, 0);
1149
- delete result.len;
1150
- expect(result).to.deep.equal({
1151
- isStream: true,
1152
- position: -10
1153
- });
1154
- });
1155
-
1156
- it('should successfully encode and decode non-streamed file', function() {
1157
- var buffer = utils.getBuffer();
1158
- baServices.encodeAtomicWriteFileAcknowledge(buffer, false, 10);
1159
- var result = baServices.decodeAtomicWriteFileAcknowledge(buffer.buffer, 0);
1160
- delete result.len;
1161
- expect(result).to.deep.equal({
1162
- isStream: false,
1163
- position: 10
1164
- });
1165
- });
1166
- });
1167
-
1168
- describe('ReadProperty', function() {
1169
- it('should successfully encode and decode', function() {
1170
- var buffer = utils.getBuffer();
1171
- baServices.encodeReadProperty(buffer, 4, 630, 85, 0xFFFFFFFF);
1172
- var result = baServices.decodeReadProperty(buffer.buffer, 0, buffer.offset);
1173
- delete result.len;
1174
- expect(result).to.deep.equal({
1175
- objectId: {type: 4, instance: 630},
1176
- property: {id: 85, index: 0xFFFFFFFF}
1177
- });
1178
- });
1179
-
1180
- it('should successfully encode and decode with array index', function() {
1181
- var buffer = utils.getBuffer();
1182
- baServices.encodeReadProperty(buffer, 4, 630, 85, 2);
1183
- var result = baServices.decodeReadProperty(buffer.buffer, 0, buffer.offset);
1184
- delete result.len;
1185
- expect(result).to.deep.equal({
1186
- objectId: {type: 4, instance: 630},
1187
- property: {id: 85, index: 2}
1188
- });
1189
- });
1190
- });
1191
-
1192
- describe('AtomicReadFile', function() {
1193
- it('should successfully encode and decode as stream', function() {
1194
- var buffer = utils.getBuffer();
1195
- baServices.encodeAtomicReadFile(buffer, true, {type: 13, instance: 5000}, -50, 12);
1196
- var result = baServices.decodeAtomicReadFile(buffer.buffer, 0);
1197
- delete result.len;
1198
- expect(result).to.deep.equal({
1199
- objectId: {type: 13, instance: 5000},
1200
- count: 12,
1201
- isStream: true,
1202
- position: -50
1203
- });
1204
- });
1205
-
1206
- it('should successfully encode and decode as non-stream', function() {
1207
- var buffer = utils.getBuffer();
1208
- baServices.encodeAtomicReadFile(buffer, false, {type: 14, instance: 5001}, 60, 13);
1209
- var result = baServices.decodeAtomicReadFile(buffer.buffer, 0);
1210
- delete result.len;
1211
- expect(result).to.deep.equal({
1212
- objectId: {type: 14, instance: 5001},
1213
- count: 13,
1214
- isStream: false,
1215
- position: 60
1216
- });
1217
- });
1218
- });
1219
-
1220
- describe('AtomicReadFileAcknowledge', function() {
1221
- it('should successfully encode and decode as stream', function() {
1222
- var buffer = utils.getBuffer();
1223
- baServices.encodeAtomicReadFileAcknowledge(buffer, true, false, 0, 90, [[12, 12, 12]], [3]);
1224
- var result = baServices.decodeAtomicReadFileAcknowledge(buffer.buffer, 0);
1225
- delete result.len;
1226
- expect(result).to.deep.equal({
1227
- isStream: true,
1228
- position: 0,
1229
- endOfFile: false,
1230
- buffer: Buffer.from([12, 12, 12])
1231
- });
1232
- });
1233
-
1234
- it('should successfully encode and decode as non-stream', function() {
1235
- var buffer = utils.getBuffer();
1236
- baServices.encodeAtomicReadFileAcknowledge(buffer, false, false, 0, 90, [12, 12, 12], 3);
1237
- // TODO: AtomicReadFileAcknowledge as non-stream not yet implemented
1238
- expect(function() {
1239
- baServices.decodeAtomicReadFileAcknowledge(buffer.buffer, 0);
1240
- }).to.throw('NotImplemented');
1241
- });
1242
- });
1243
-
1244
- // TODO: Correct test behaviour
1245
- describe.skip('AtomicWriteFile', function() {
1246
- it('should successfully encode and decode as stream', function() {
1247
- var buffer = utils.getBuffer();
1248
- // (buffer, isStream, objectId, position, blockCount, blocks, counts);
1249
- baServices.encodeAtomicWriteFile(buffer, true, {type: 51, instance: 2}, 0, 100, [12, 12], 2);
1250
- var result = baServices.decodeAtomicWriteFile(buffer.buffer, 0, buffer.offset);
1251
- delete result.len;
1252
- expect(result).to.deep.equal({
1253
- objectId: {type: 51, instance: 2},
1254
- count: 12,
1255
- isStream: true,
1256
- position: -50
1257
- });
1258
- });
1259
-
1260
- it('should successfully encode and decode as non-stream', function() {
1261
- var buffer = utils.getBuffer();
1262
- // (buffer, isStream, objectId, position, blockCount, blocks, counts);
1263
- baServices.encodeAtomicWriteFile(buffer, false, {type: 51, instance: 2}, 0, 100, [12, 12], 2);
1264
- var result = baServices.decodeAtomicWriteFile(buffer.buffer, 0, buffer.offset);
1265
- delete result.len;
1266
- expect(result).to.deep.equal({
1267
- objectId: {type: 51, instance: 2},
1268
- count: 12,
1269
- isStream: true,
1270
- position: -50
1271
- });
1272
- });
1273
- });
1274
-
1275
- describe('ReadRange', function() {
1276
- it('should successfully encode and decode by position', function() {
1277
- var buffer = utils.getBuffer();
1278
- baServices.encodeReadRange(buffer, {type: 61, instance: 35}, 85, 0xFFFFFFFF, 1, 10, null, 0);
1279
- var result = baServices.decodeReadRange(buffer.buffer, 0, buffer.offset);
1280
- delete result.len;
1281
- expect(result).to.deep.equal({
1282
- count: 0,
1283
- objectId: {type: 61, instance: 35},
1284
- position: 10,
1285
- property: {
1286
- index: 0xFFFFFFFF,
1287
- id: 85
1288
- },
1289
- requestType: 1,
1290
- time: undefined
1291
- });
1292
- });
1293
-
1294
- it('should successfully encode and decode by position with array index', function() {
1295
- var buffer = utils.getBuffer();
1296
- baServices.encodeReadRange(buffer, {type: 61, instance: 35}, 12, 2, 1, 10, null, 0);
1297
- var result = baServices.decodeReadRange(buffer.buffer, 0, buffer.offset);
1298
- delete result.len;
1299
- expect(result).to.deep.equal({
1300
- count: 0,
1301
- objectId: {type: 61, instance: 35},
1302
- position: 10,
1303
- property: {
1304
- index: 2,
1305
- id: 12
1306
- },
1307
- requestType: 1,
1308
- time: undefined
1309
- });
1310
- });
1311
-
1312
- it('should successfully encode and decode by sequence', function() {
1313
- var buffer = utils.getBuffer();
1314
- baServices.encodeReadRange(buffer, {type: 61, instance: 35}, 85, 0xFFFFFFFF, 2, 11, null, 1111);
1315
- var result = baServices.decodeReadRange(buffer.buffer, 0, buffer.offset);
1316
- delete result.len;
1317
- expect(result).to.deep.equal({
1318
- count: 1111,
1319
- objectId: {type: 61, instance: 35},
1320
- position: 11,
1321
- property: {
1322
- index: 0xFFFFFFFF,
1323
- id: 85
1324
- },
1325
- requestType: 2,
1326
- time: undefined
1327
- });
1328
- });
1329
-
1330
- it('should successfully encode and decode by time', function() {
1331
- var buffer = utils.getBuffer();
1332
- var date = new Date(1, 1, 1);
1333
- date.setMilliseconds(990);
1334
- baServices.encodeReadRange(buffer, {type: 61, instance: 35}, 85, 0xFFFFFFFF, 4, null, date, -1111);
1335
- var result = baServices.decodeReadRange(buffer.buffer, 0, buffer.offset);
1336
- delete result.len;
1337
- expect(result).to.deep.equal({
1338
- count: -1111,
1339
- objectId: {type: 61, instance: 35},
1340
- position: undefined,
1341
- property: {
1342
- index: 0xFFFFFFFF,
1343
- id: 85
1344
- },
1345
- requestType: 4,
1346
- time: date
1347
- });
1348
- });
1349
- });
1350
-
1351
- describe('EventNotifyData', function() {
1352
- it('should successfully encode and decode a change of bitstring event', function() {
1353
- var buffer = utils.getBuffer();
1354
- var date = new Date();
1355
- date.setMilliseconds(880);
1356
- baServices.encodeEventNotifyData(buffer, {
1357
- processId: 3,
1358
- initiatingObjectId: {type: 60, instance: 12},
1359
- eventObjectId: {type: 61, instance: 1121},
1360
- timeStamp: {type: 2, value: date},
1361
- notificationClass: 9,
1362
- priority: 7,
1363
- eventType: 0,
1364
- messageText: 'Test1234$',
1365
- notifyType: 1,
1366
- ackRequired: true,
1367
- fromState: 5,
1368
- toState: 6,
1369
- changeOfBitstringReferencedBitString: {bitsUsed: 24, value: [0xaa, 0xaa, 0xaa]},
1370
- changeOfBitstringStatusFlags: {bitsUsed: 24, value: [0xaa, 0xaa, 0xaa]}
1371
- });
1372
- var result = baServices.decodeEventNotifyData(buffer.buffer, 0);
1373
- delete result.len;
1374
- expect(result).to.deep.equal({
1375
- processId: 3,
1376
- initiatingObjectId: {type: 60, instance: 12},
1377
- eventObjectId: {type: 61, instance: 1121},
1378
- timeStamp: date,
1379
- notificationClass: 9,
1380
- priority: 7,
1381
- eventType: 0,
1382
- messageText: 'Test1234$',
1383
- notifyType: 1,
1384
- ackRequired: true,
1385
- fromState: 5,
1386
- toState: 6
1387
- });
1388
- });
1389
-
1390
- it('should successfully encode and decode a change of state event', function() {
1391
- var buffer = utils.getBuffer();
1392
- var date = new Date();
1393
- date.setMilliseconds(880);
1394
- baServices.encodeEventNotifyData(buffer, {
1395
- processId: 3,
1396
- initiatingObjectId: {},
1397
- eventObjectId: {},
1398
- timeStamp: {type: 2, value: date},
1399
- notificationClass: 9,
1400
- priority: 7,
1401
- eventType: 1,
1402
- messageText: 'Test1234$',
1403
- notifyType: 1,
1404
- ackRequired: false,
1405
- fromState: 1,
1406
- toState: 2,
1407
- changeOfStateNewState: {type: 2, state: 2},
1408
- changeOfStateStatusFlags: {bitsUsed: 24, value: [0xaa, 0xaa, 0xaa]}
1409
- });
1410
- var result = baServices.decodeEventNotifyData(buffer.buffer, 0);
1411
- delete result.len;
1412
- expect(result).to.deep.equal({
1413
- processId: 3,
1414
- initiatingObjectId: {type: 0, instance: 0},
1415
- eventObjectId: {type: 0, instance: 0},
1416
- timeStamp: date,
1417
- notificationClass: 9,
1418
- priority: 7,
1419
- eventType: 1,
1420
- messageText: 'Test1234$',
1421
- notifyType: 1,
1422
- ackRequired: false,
1423
- fromState: 1,
1424
- toState: 2
1425
- });
1426
- });
1427
-
1428
- it('should successfully encode and decode a change of value event', function() {
1429
- var buffer = utils.getBuffer();
1430
- var date = new Date();
1431
- date.setMilliseconds(880);
1432
- baServices.encodeEventNotifyData(buffer, {
1433
- processId: 3,
1434
- initiatingObjectId: {},
1435
- eventObjectId: {},
1436
- timeStamp: {type: 2, value: date},
1437
- notificationClass: 9,
1438
- priority: 7,
1439
- eventType: 2,
1440
- messageText: 'Test1234$',
1441
- notifyType: 1,
1442
- changeOfValueTag: 1,
1443
- changeOfValueChangeValue: 90,
1444
- changeOfValueStatusFlags: {bitsUsed: 24, value: [0xaa, 0xaa, 0xaa]}
1445
- });
1446
- var result = baServices.decodeEventNotifyData(buffer.buffer, 0);
1447
- delete result.len;
1448
- expect(result).to.deep.equal({
1449
- processId: 3,
1450
- initiatingObjectId: {type: 0, instance: 0},
1451
- eventObjectId: {type: 0, instance: 0},
1452
- timeStamp: date,
1453
- notificationClass: 9,
1454
- priority: 7,
1455
- eventType: 2,
1456
- messageText: 'Test1234$',
1457
- notifyType: 1,
1458
- ackRequired: false,
1459
- fromState: 0,
1460
- toState: 0
1461
- });
1462
- });
1463
-
1464
- it('should successfully encode and decode a floating limit event', function() {
1465
- var buffer = utils.getBuffer();
1466
- var date = new Date();
1467
- date.setMilliseconds(880);
1468
- baServices.encodeEventNotifyData(buffer, {
1469
- processId: 3,
1470
- initiatingObjectId: {},
1471
- eventObjectId: {},
1472
- timeStamp: {type: 2, value: date},
1473
- notificationClass: 9,
1474
- priority: 7,
1475
- eventType: 4,
1476
- messageText: 'Test1234$',
1477
- notifyType: 1,
1478
- ackRequired: true,
1479
- fromState: 19,
1480
- toState: 12,
1481
- floatingLimitReferenceValue: 121,
1482
- floatingLimitStatusFlags: {bitsUsed: 24, value: [0xaa, 0xaa, 0xaa]},
1483
- floatingLimitSetPointValue: 120,
1484
- floatingLimitErrorLimit: 120
1485
- });
1486
- var result = baServices.decodeEventNotifyData(buffer.buffer, 0);
1487
- delete result.len;
1488
- expect(result).to.deep.equal({
1489
- processId: 3,
1490
- initiatingObjectId: {type: 0, instance: 0},
1491
- eventObjectId: {type: 0, instance: 0},
1492
- timeStamp: date,
1493
- notificationClass: 9,
1494
- priority: 7,
1495
- eventType: 4,
1496
- messageText: 'Test1234$',
1497
- notifyType: 1,
1498
- ackRequired: true,
1499
- fromState: 19,
1500
- toState: 12
1501
- });
1502
- });
1503
-
1504
- it('should successfully encode and decode an out of range event', function() {
1505
- var buffer = utils.getBuffer();
1506
- var date = new Date();
1507
- date.setMilliseconds(880);
1508
- baServices.encodeEventNotifyData(buffer, {
1509
- processId: 3,
1510
- initiatingObjectId: {},
1511
- eventObjectId: {},
1512
- timeStamp: {type: 2, value: date},
1513
- notificationClass: 9,
1514
- priority: 7,
1515
- eventType: 5,
1516
- messageText: 'Test1234$',
1517
- notifyType: 1,
1518
- outOfRangeExceedingValue: 155,
1519
- outOfRangeStatusFlags: {bitsUsed: 24, value: [0xaa, 0xaa, 0xaa]},
1520
- outOfRangeDeadband: 50,
1521
- outOfRangeExceededLimit: 150
1522
- });
1523
- var result = baServices.decodeEventNotifyData(buffer.buffer, 0);
1524
- delete result.len;
1525
- expect(result).to.deep.equal({
1526
- processId: 3,
1527
- initiatingObjectId: {type: 0, instance: 0},
1528
- eventObjectId: {type: 0, instance: 0},
1529
- timeStamp: date,
1530
- notificationClass: 9,
1531
- priority: 7,
1532
- eventType: 5,
1533
- messageText: 'Test1234$',
1534
- notifyType: 1,
1535
- ackRequired: false,
1536
- fromState: 0,
1537
- toState: 0
1538
- });
1539
- });
1540
-
1541
- it('should successfully encode and decode a change of life-safety event', function() {
1542
- var buffer = utils.getBuffer();
1543
- var date = new Date();
1544
- date.setMilliseconds(880);
1545
- baServices.encodeEventNotifyData(buffer, {
1546
- processId: 3,
1547
- initiatingObjectId: {},
1548
- eventObjectId: {},
1549
- timeStamp: {type: 2, value: date},
1550
- notificationClass: 9,
1551
- priority: 7,
1552
- eventType: 8,
1553
- messageText: 'Test1234$',
1554
- notifyType: 1,
1555
- changeOfLifeSafetyNewState: 8,
1556
- changeOfLifeSafetyNewMode: 9,
1557
- changeOfLifeSafetyStatusFlags: {bitsUsed: 24, value: [0xaa, 0xaa, 0xaa]},
1558
- changeOfLifeSafetyOperationExpected: 2
1559
- });
1560
- var result = baServices.decodeEventNotifyData(buffer.buffer, 0);
1561
- delete result.len;
1562
- expect(result).to.deep.equal({
1563
- processId: 3,
1564
- initiatingObjectId: {type: 0, instance: 0},
1565
- eventObjectId: {type: 0, instance: 0},
1566
- timeStamp: date,
1567
- notificationClass: 9,
1568
- priority: 7,
1569
- eventType: 8,
1570
- messageText: 'Test1234$',
1571
- notifyType: 1,
1572
- ackRequired: false,
1573
- fromState: 0,
1574
- toState: 0
1575
- });
1576
- });
1577
-
1578
- it('should successfully encode and decode a buffer ready event', function() {
1579
- var buffer = utils.getBuffer();
1580
- var date = new Date();
1581
- date.setMilliseconds(880);
1582
- baServices.encodeEventNotifyData(buffer, {
1583
- processId: 3,
1584
- initiatingObjectId: {},
1585
- eventObjectId: {},
1586
- timeStamp: {type: 2, value: date},
1587
- notificationClass: 9,
1588
- priority: 7,
1589
- eventType: 10,
1590
- messageText: 'Test1234$',
1591
- notifyType: 1,
1592
- bufferReadyBufferProperty: {
1593
- objectId: {type: 65, instance: 2},
1594
- id: 85,
1595
- arrayIndex: 3,
1596
- deviceIndentifier: {type: 8, instance: 443}
1597
- },
1598
- bufferReadyPreviousNotification: 121,
1599
- bufferReadyCurrentNotification: 281
1600
- });
1601
- var result = baServices.decodeEventNotifyData(buffer.buffer, 0);
1602
- delete result.len;
1603
- expect(result).to.deep.equal({
1604
- processId: 3,
1605
- initiatingObjectId: {type: 0, instance: 0},
1606
- eventObjectId: {type: 0, instance: 0},
1607
- timeStamp: date,
1608
- notificationClass: 9,
1609
- priority: 7,
1610
- eventType: 10,
1611
- messageText: 'Test1234$',
1612
- notifyType: 1,
1613
- ackRequired: false,
1614
- fromState: 0,
1615
- toState: 0
1616
- });
1617
- });
1618
-
1619
- it('should successfully encode and decode a unsigned range event', function() {
1620
- var buffer = utils.getBuffer();
1621
- var date = new Date();
1622
- date.setMilliseconds(880);
1623
- baServices.encodeEventNotifyData(buffer, {
1624
- processId: 3,
1625
- initiatingObjectId: {},
1626
- eventObjectId: {},
1627
- timeStamp: {type: 2, value: date},
1628
- notificationClass: 9,
1629
- priority: 7,
1630
- eventType: 11,
1631
- messageText: 'Test1234$',
1632
- notifyType: 1,
1633
- unsignedRangeExceedingValue: 101,
1634
- unsignedRangeStatusFlags: {bitsUsed: 24, value: [0xaa, 0xaa, 0xaa]},
1635
- unsignedRangeExceededLimit: 100
1636
- });
1637
- var result = baServices.decodeEventNotifyData(buffer.buffer, 0);
1638
- delete result.len;
1639
- expect(result).to.deep.equal({
1640
- processId: 3,
1641
- initiatingObjectId: {type: 0, instance: 0},
1642
- eventObjectId: {type: 0, instance: 0},
1643
- timeStamp: date,
1644
- notificationClass: 9,
1645
- priority: 7,
1646
- eventType: 11,
1647
- messageText: 'Test1234$',
1648
- notifyType: 1,
1649
- ackRequired: false,
1650
- fromState: 0,
1651
- toState: 0
1652
- });
1653
- });
1654
- });
1655
-
1656
- // TODO: Correct test behaviour
1657
- describe.skip('ReadRangeAcknowledge', function() {
1658
- it('should successfully encode and decode', function() {
1659
- var buffer = utils.getBuffer();
1660
- baServices.encodeReadRangeAcknowledge(buffer, {type: 12, instance: 500}, 5048, 0xFFFFFFFF, {bitsUsed: 24, value: [1, 2, 3]}, 12, Buffer.from([1, 2, 3]), 2, 2);
1661
- var result = baServices.decodeReadRangeAcknowledge(buffer.buffer, 0, buffer.offset);
1662
- delete result.len;
1663
- expect(result).to.deep.equal({
1664
- count: 0,
1665
- objectId: {type: 61, instance: 35},
1666
- position: 10,
1667
- property: {
1668
- index: 0xFFFFFFFF,
1669
- id: 85
1670
- },
1671
- requestType: 1,
1672
- time: undefined
1673
- });
1674
- });
1675
- });
1676
-
1677
- describe('DeleteObject', function() {
1678
- it('should successfully encode and decode', function() {
1679
- var buffer = utils.getBuffer();
1680
- baServices.encodeDeleteObject(buffer, {type: 1, instance: 10});
1681
- var result = baServices.decodeDeleteObject(buffer.buffer, 0, buffer.offset);
1682
- delete result.len;
1683
- expect(result).to.deep.equal({
1684
- objectType: 1,
1685
- instance: 10
1686
- });
1687
- });
1688
- });
1689
-
1690
- describe('CreateObject', function() {
1691
- it('should successfully encode and decode', function() {
1692
- var buffer = utils.getBuffer();
1693
- var date = new Date(1, 1, 1);
1694
- var time = new Date(1, 1, 1);
1695
- time.setMilliseconds(990);
1696
- baServices.encodeCreateObject(buffer, {type: 1, instance: 10}, [
1697
- {property: {id: 81, index: 0xFFFFFFFF}, value: [
1698
- {type: 0},
1699
- {type: 1, value: null},
1700
- {type: 1, value: true},
1701
- {type: 1, value: false},
1702
- {type: 2, value: 1},
1703
- {type: 2, value: 1000},
1704
- {type: 2, value: 1000000},
1705
- {type: 2, value: 1000000000},
1706
- {type: 3, value: -1},
1707
- {type: 3, value: -1000},
1708
- {type: 3, value: -1000000},
1709
- {type: 3, value: -1000000000},
1710
- {type: 4, value: 0.1},
1711
- {type: 5, value: 100.121212},
1712
- {type: 6, value: [1, 2, 100, 200]},
1713
- {type: 7, value: 'Test1234$'},
1714
- {type: 8, value: {bitsUsed: 0, value: []}},
1715
- {type: 8, value: {bitsUsed: 24, value: [0xAA, 0xAA, 0xAA]}},
1716
- {type: 9, value: 4},
1717
- {type: 10, value: date},
1718
- {type: 11, value: time}
1719
- ], priority: 0},
1720
- {property: {id: 82, index: 0}, value: [
1721
- {type: 12, value: {type: 3, instance: 0}}
1722
- ], priority: 0}
1723
- ]);
1724
- var result = baServices.decodeCreateObject(buffer.buffer, 0, buffer.offset);
1725
- delete result.len;
1726
- result.values[0].value[12].value = Math.floor(result.values[0].value[12].value * 1000) / 1000;
1727
- expect(result).to.deep.equal({
1728
- objectId: {
1729
- type: 1,
1730
- instance: 10
1731
- },
1732
- values: [
1733
- {
1734
- property: {
1735
- index: 0xFFFFFFFF,
1736
- id: 81
1737
- },
1738
- value: [
1739
- {type: 0, value: null},
1740
- {type: 0, value: null},
1741
- {type: 1, value: true},
1742
- {type: 1, value: false},
1743
- {type: 2, value: 1},
1744
- {type: 2, value: 1000},
1745
- {type: 2, value: 1000000},
1746
- {type: 2, value: 1000000000},
1747
- {type: 3, value: -1},
1748
- {type: 3, value: -1000},
1749
- {type: 3, value: -1000000},
1750
- {type: 3, value: -1000000000},
1751
- {type: 4, value: 0.1},
1752
- {type: 5, value: 100.121212},
1753
- {type: 6, value: [1, 2, 100, 200]},
1754
- {type: 7, value: 'Test1234$', encoding: 0},
1755
- {type: 8, value: {bitsUsed: 0, value: []}},
1756
- {type: 8, value: {bitsUsed: 24, value: [0xAA, 0xAA, 0xAA]}},
1757
- {type: 9, value: 4},
1758
- {type: 10, value: date},
1759
- {type: 11, value: time}
1760
- ]
1761
- },
1762
- {
1763
- property: {
1764
- index: 0xFFFFFFFF,
1765
- id: 82
1766
- },
1767
- value: [
1768
- {type: 12, value: {type: 3, instance: 0}}
1769
- ]
1770
- }
1771
- ]
1772
- });
1773
- });
1774
- });
1775
-
1776
- describe('COVNotify', function() {
1777
- it('should successfully encode and decode', function() {
1778
- var buffer = utils.getBuffer();
1779
- var date = new Date(1, 1, 1);
1780
- var time = new Date(1, 1, 1);
1781
- time.setMilliseconds(990);
1782
- baServices.encodeCOVNotify(buffer, 7, 443, {type: 2, instance: 12}, 120, [
1783
- {property: {id: 81, index: 0xFFFFFFFF}, value: [
1784
- {type: 0},
1785
- {type: 1, value: null},
1786
- {type: 1, value: true},
1787
- {type: 1, value: false},
1788
- {type: 2, value: 1},
1789
- {type: 2, value: 1000},
1790
- {type: 2, value: 1000000},
1791
- {type: 2, value: 1000000000},
1792
- {type: 3, value: -1},
1793
- {type: 3, value: -1000},
1794
- {type: 3, value: -1000000},
1795
- {type: 3, value: -1000000000},
1796
- {type: 4, value: 0.1},
1797
- {type: 5, value: 100.121212},
1798
- {type: 6, value: [1, 2, 100, 200]},
1799
- {type: 7, value: 'Test1234$'},
1800
- {type: 8, value: {bitsUsed: 0, value: []}},
1801
- {type: 8, value: {bitsUsed: 24, value: [0xAA, 0xAA, 0xAA]}},
1802
- {type: 9, value: 4},
1803
- {type: 10, value: date},
1804
- {type: 11, value: time}
1805
- ], priority: 0},
1806
- {property: {id: 82, index: 0}, value: [
1807
- {type: 12, value: {type: 3, instance: 0}}
1808
- ], priority: 8}
1809
- ]);
1810
- var result = baServices.decodeCOVNotify(buffer.buffer, 0, buffer.offset);
1811
- delete result.len;
1812
- result.values[0].value[12].value = Math.floor(result.values[0].value[12].value * 1000) / 1000;
1813
- expect(result).to.deep.equal({
1814
- initiatingDeviceId: {
1815
- type: 8,
1816
- instance: 443
1817
- },
1818
- monitoredObjectId: {
1819
- type: 2,
1820
- instance: 12
1821
- },
1822
- subscriberProcessId: 7,
1823
- timeRemaining: 120,
1824
- values: [
1825
- {
1826
- priority: 0,
1827
- property: {
1828
- index: 0xFFFFFFFF,
1829
- id: 81
1830
- },
1831
- value: [
1832
- {type: 0, value: null},
1833
- {type: 0, value: null},
1834
- {type: 1, value: true},
1835
- {type: 1, value: false},
1836
- {type: 2, value: 1},
1837
- {type: 2, value: 1000},
1838
- {type: 2, value: 1000000},
1839
- {type: 2, value: 1000000000},
1840
- {type: 3, value: -1},
1841
- {type: 3, value: -1000},
1842
- {type: 3, value: -1000000},
1843
- {type: 3, value: -1000000000},
1844
- {type: 4, value: 0.1},
1845
- {type: 5, value: 100.121212},
1846
- {type: 6, value: [1, 2, 100, 200]},
1847
- {type: 7, value: 'Test1234$', encoding: 0},
1848
- {type: 8, value: {bitsUsed: 0, value: []}},
1849
- {type: 8, value: {bitsUsed: 24, value: [0xAA, 0xAA, 0xAA]}},
1850
- {type: 9, value: 4},
1851
- {type: 10, value: date},
1852
- {type: 11, value: time}
1853
- ]
1854
- },
1855
- {
1856
- priority: 0,
1857
- property: {
1858
- index: 0xFFFFFFFF,
1859
- id: 82
1860
- },
1861
- value: [
1862
- {type: 12, value: {type: 3, instance: 0}}
1863
- ]
1864
- }
1865
- ]
1866
- });
1867
- });
1868
- });
1869
-
1870
- describe('AlarmSummary', function() {
1871
- it('should successfully encode and decode', function() {
1872
- var buffer = utils.getBuffer();
1873
- baServices.encodeAlarmSummary(buffer, [
1874
- {objectId: {type: 12, instance: 12}, alarmState: 12, acknowledgedTransitions: {value: [12], bitsUsed: 5}},
1875
- {objectId: {type: 13, instance: 13}, alarmState: 13, acknowledgedTransitions: {value: [13], bitsUsed: 6}}
1876
- ]);
1877
- var result = baServices.decodeAlarmSummary(buffer.buffer, 0, buffer.offset);
1878
- delete result.len;
1879
- expect(result).to.deep.equal({
1880
- alarms: [
1881
- {objectId: {type: 12, instance: 12}, alarmState: 12, acknowledgedTransitions: {value: [12], bitsUsed: 5}},
1882
- {objectId: {type: 13, instance: 13}, alarmState: 13, acknowledgedTransitions: {value: [13], bitsUsed: 6}}
1883
- ]
1884
- });
1885
- });
1886
- });
1887
-
1888
- describe('EventInformation', function() {
1889
- it('should successfully encode and decode', function() {
1890
- var buffer = utils.getBuffer();
1891
- var date1 = new Date();
1892
- date1.setMilliseconds(990);
1893
- var date2 = new Date();
1894
- date2.setMilliseconds(990);
1895
- var date3 = new Date();
1896
- date3.setMilliseconds(990);
1897
- baServices.encodeEventInformation(buffer, [
1898
- {objectId: {type: 0, instance: 32}, eventState: 12, acknowledgedTransitions: {value: [14], bitsUsed: 6}, eventTimeStamps: [date1, date2, date3], notifyType: 5, eventEnable: {value: [15], bitsUsed: 7}, eventPriorities: [2, 3, 4]}
1899
- ], false);
1900
- var result = baServices.decodeEventInformation(buffer.buffer, 0, buffer.offset);
1901
- delete result.len;
1902
- expect(result).to.deep.equal({
1903
- alarms: [
1904
- {
1905
- objectId: {
1906
- type: 0,
1907
- instance: 32
1908
- },
1909
- eventState: 12,
1910
- acknowledgedTransitions: {
1911
- bitsUsed: 6,
1912
- value: [14]
1913
- },
1914
- eventTimeStamps: [
1915
- date1,
1916
- date2,
1917
- date3
1918
- ],
1919
- notifyType: 5,
1920
- eventEnable: {
1921
- bitsUsed: 7,
1922
- value: [15]
1923
- },
1924
- eventPriorities: [2, 3, 4]
1925
- }
1926
- ],
1927
- moreEvents: false
1928
- });
1929
- });
1930
- });
1931
-
1932
- describe('AlarmAcknowledge', function() {
1933
- it('should successfully encode and decode with time timestamp', function() {
1934
- var buffer = utils.getBuffer();
1935
- var eventTime = new Date(1, 1, 1);
1936
- eventTime.setMilliseconds(990);
1937
- var ackTime = new Date(1, 1, 1);
1938
- ackTime.setMilliseconds(880);
1939
- baServices.encodeAlarmAcknowledge(buffer, 57, {type: 0, instance: 33}, 5, 'Alarm Acknowledge Test', {value: eventTime, type: baEnum.TimestampTags.TIME_STAMP_TIME}, {value: ackTime, type: baEnum.TimestampTags.TIME_STAMP_TIME});
1940
- var result = baServices.decodeAlarmAcknowledge(buffer.buffer, 0, buffer.offset);
1941
- delete result.len;
1942
- expect(result).to.deep.equal({
1943
- acknowledgedProcessId: 57,
1944
- eventObjectId: {
1945
- type: 0,
1946
- instance: 33
1947
- },
1948
- eventStateAcknowledged: 5,
1949
- acknowledgeSource: 'Alarm Acknowledge Test',
1950
- eventTimeStamp: eventTime,
1951
- acknowledgeTimeStamp: ackTime
1952
- });
1953
- });
1954
-
1955
- it('should successfully encode and decode with sequence timestamp', function() {
1956
- var buffer = utils.getBuffer();
1957
- var eventTime = 5;
1958
- var ackTime = 6;
1959
- baServices.encodeAlarmAcknowledge(buffer, 57, {type: 0, instance: 33}, 5, 'Alarm Acknowledge Test', {value: eventTime, type: baEnum.TimestampTags.TIME_STAMP_SEQUENCE}, {value: ackTime, type: baEnum.TimestampTags.TIME_STAMP_SEQUENCE});
1960
- var result = baServices.decodeAlarmAcknowledge(buffer.buffer, 0, buffer.offset);
1961
- delete result.len;
1962
- expect(result).to.deep.equal({
1963
- acknowledgedProcessId: 57,
1964
- eventObjectId: {
1965
- type: 0,
1966
- instance: 33
1967
- },
1968
- eventStateAcknowledged: 5,
1969
- acknowledgeSource: 'Alarm Acknowledge Test',
1970
- eventTimeStamp: eventTime,
1971
- acknowledgeTimeStamp: ackTime
1972
- });
1973
- });
1974
-
1975
- it('should successfully encode and decode with datetime timestamp', function() {
1976
- var buffer = utils.getBuffer();
1977
- var eventTime = new Date(1, 1, 1);
1978
- eventTime.setMilliseconds(990);
1979
- var ackTime = new Date(1, 1, 2);
1980
- ackTime.setMilliseconds(880);
1981
- baServices.encodeAlarmAcknowledge(buffer, 57, {type: 0, instance: 33}, 5, 'Alarm Acknowledge Test', {value: eventTime, type: baEnum.TimestampTags.TIME_STAMP_DATETIME}, {value: ackTime, type: baEnum.TimestampTags.TIME_STAMP_DATETIME});
1982
- var result = baServices.decodeAlarmAcknowledge(buffer.buffer, 0, buffer.offset);
1983
- delete result.len;
1984
- expect(result).to.deep.equal({
1985
- acknowledgedProcessId: 57,
1986
- eventObjectId: {
1987
- type: 0,
1988
- instance: 33
1989
- },
1990
- eventStateAcknowledged: 5,
1991
- acknowledgeSource: 'Alarm Acknowledge Test',
1992
- eventTimeStamp: eventTime,
1993
- acknowledgeTimeStamp: ackTime
1994
- });
1995
- });
1996
- });
1997
-
1998
- describe('PrivateTransfer', function() {
1999
- it('should successfully encode and decode', function() {
2000
- var buffer = utils.getBuffer();
2001
- baServices.encodePrivateTransfer(buffer, 255, 8, [1, 2, 3, 4, 5]);
2002
- var result = baServices.decodePrivateTransfer(buffer.buffer, 0, buffer.offset);
2003
- delete result.len;
2004
- expect(result).to.deep.equal({
2005
- vendorId: 255,
2006
- serviceNumber: 8,
2007
- data: [1, 2, 3, 4, 5]
2008
- });
2009
- });
2010
- });
2011
-
2012
- describe('GetEventInformation', function() {
2013
- it('should successfully encode and decode', function() {
2014
- var buffer = utils.getBuffer();
2015
- baServices.encodeGetEventInformation(buffer, {type: 8, instance: 15});
2016
- var result = baServices.decodeGetEventInformation(buffer.buffer, 0);
2017
- delete result.len;
2018
- expect(result).to.deep.equal({
2019
- lastReceivedObjectId: {type: 8, instance: 15}
2020
- });
2021
- });
2022
- });
2023
-
2024
- describe('IhaveBroadcast', function() {
2025
- it('should successfully encode and decode', function() {
2026
- var buffer = utils.getBuffer();
2027
- baServices.encodeIhaveBroadcast(buffer, {type: 8, instance: 443}, {type: 0, instance: 4}, 'LgtCmd01');
2028
- var result = baServices.decodeIhaveBroadcast(buffer.buffer, 0, buffer.offset);
2029
- delete result.len;
2030
- expect(result).to.deep.equal({
2031
- deviceId: {type: 8, instance: 443},
2032
- objectId: {type: 0, instance: 4},
2033
- objectName: 'LgtCmd01'
2034
- });
2035
- });
2036
- });
2037
-
2038
- describe('LifeSafetyOperation', function() {
2039
- it('should successfully encode and decode', function() {
2040
- var buffer = utils.getBuffer();
2041
- baServices.encodeLifeSafetyOperation(buffer, 8, 'User01', 7, {type: 0, instance: 77});
2042
- var result = baServices.decodeLifeSafetyOperation(buffer.buffer, 0, buffer.offset);
2043
- delete result.len;
2044
- expect(result).to.deep.equal({
2045
- processId: 8,
2046
- requestingSource: 'User01',
2047
- operation: 7,
2048
- targetObjectId: {type: 0, instance: 77}
2049
- });
2050
- });
2051
- });
2052
- });