cactus-test-definitions 1.8.0__py3-none-any.whl

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 (173) hide show
  1. cactus_test_definitions/__init__.py +39 -0
  2. cactus_test_definitions/__pycache__/__init__.cpython-312.pyc +0 -0
  3. cactus_test_definitions/__pycache__/actions.cpython-312.pyc +0 -0
  4. cactus_test_definitions/__pycache__/checks.cpython-312.pyc +0 -0
  5. cactus_test_definitions/__pycache__/csipaus.cpython-312.pyc +0 -0
  6. cactus_test_definitions/__pycache__/errors.cpython-312.pyc +0 -0
  7. cactus_test_definitions/__pycache__/events.cpython-312.pyc +0 -0
  8. cactus_test_definitions/__pycache__/parameters.cpython-312.pyc +0 -0
  9. cactus_test_definitions/__pycache__/schema.cpython-312.pyc +0 -0
  10. cactus_test_definitions/__pycache__/test_procedures.cpython-312-pytest-8.3.5.pyc +0 -0
  11. cactus_test_definitions/__pycache__/test_procedures.cpython-312.pyc +0 -0
  12. cactus_test_definitions/__pycache__/variable_expressions.cpython-312.pyc +0 -0
  13. cactus_test_definitions/__pycache__/version.cpython-312.pyc +0 -0
  14. cactus_test_definitions/client/__init__.py +30 -0
  15. cactus_test_definitions/client/__pycache__/__init__.cpython-312.pyc +0 -0
  16. cactus_test_definitions/client/__pycache__/actions.cpython-312.pyc +0 -0
  17. cactus_test_definitions/client/__pycache__/checks.cpython-312.pyc +0 -0
  18. cactus_test_definitions/client/__pycache__/events.cpython-312.pyc +0 -0
  19. cactus_test_definitions/client/__pycache__/test_procedures.cpython-312-pytest-8.3.5.pyc +0 -0
  20. cactus_test_definitions/client/__pycache__/validate.cpython-312.pyc +0 -0
  21. cactus_test_definitions/client/actions.py +99 -0
  22. cactus_test_definitions/client/checks.py +128 -0
  23. cactus_test_definitions/client/events.py +71 -0
  24. cactus_test_definitions/client/procedures/ALL-01.yaml +94 -0
  25. cactus_test_definitions/client/procedures/ALL-02.yaml +113 -0
  26. cactus_test_definitions/client/procedures/ALL-03-REJ.yaml +69 -0
  27. cactus_test_definitions/client/procedures/ALL-03.yaml +110 -0
  28. cactus_test_definitions/client/procedures/ALL-04.yaml +69 -0
  29. cactus_test_definitions/client/procedures/ALL-05.yaml +117 -0
  30. cactus_test_definitions/client/procedures/ALL-06.yaml +128 -0
  31. cactus_test_definitions/client/procedures/ALL-07.yaml +76 -0
  32. cactus_test_definitions/client/procedures/ALL-08.yaml +78 -0
  33. cactus_test_definitions/client/procedures/ALL-09.yaml +111 -0
  34. cactus_test_definitions/client/procedures/ALL-10.yaml +128 -0
  35. cactus_test_definitions/client/procedures/ALL-11.yaml +111 -0
  36. cactus_test_definitions/client/procedures/ALL-12.yaml +126 -0
  37. cactus_test_definitions/client/procedures/ALL-13.yaml +112 -0
  38. cactus_test_definitions/client/procedures/ALL-14.yaml +165 -0
  39. cactus_test_definitions/client/procedures/ALL-15.yaml +109 -0
  40. cactus_test_definitions/client/procedures/ALL-16.yaml +102 -0
  41. cactus_test_definitions/client/procedures/ALL-17.yaml +63 -0
  42. cactus_test_definitions/client/procedures/ALL-18.yaml +289 -0
  43. cactus_test_definitions/client/procedures/ALL-19.yaml +78 -0
  44. cactus_test_definitions/client/procedures/ALL-20.yaml +136 -0
  45. cactus_test_definitions/client/procedures/ALL-21.yaml +203 -0
  46. cactus_test_definitions/client/procedures/ALL-22.yaml +82 -0
  47. cactus_test_definitions/client/procedures/ALL-23.yaml +158 -0
  48. cactus_test_definitions/client/procedures/ALL-24.yaml +132 -0
  49. cactus_test_definitions/client/procedures/ALL-25-EXT.yaml +228 -0
  50. cactus_test_definitions/client/procedures/ALL-25.yaml +136 -0
  51. cactus_test_definitions/client/procedures/ALL-26.yaml +147 -0
  52. cactus_test_definitions/client/procedures/ALL-27.yaml +144 -0
  53. cactus_test_definitions/client/procedures/ALL-28.yaml +273 -0
  54. cactus_test_definitions/client/procedures/ALL-29.yaml +87 -0
  55. cactus_test_definitions/client/procedures/ALL-30.yaml +188 -0
  56. cactus_test_definitions/client/procedures/BES-01.yaml +136 -0
  57. cactus_test_definitions/client/procedures/BES-02.yaml +137 -0
  58. cactus_test_definitions/client/procedures/BES-03.yaml +135 -0
  59. cactus_test_definitions/client/procedures/BES-04.yaml +228 -0
  60. cactus_test_definitions/client/procedures/DRA-01.yaml +54 -0
  61. cactus_test_definitions/client/procedures/DRA-02.yaml +64 -0
  62. cactus_test_definitions/client/procedures/DRD-01.yaml +667 -0
  63. cactus_test_definitions/client/procedures/DRL-01.yaml +327 -0
  64. cactus_test_definitions/client/procedures/GEN-01.yaml +73 -0
  65. cactus_test_definitions/client/procedures/GEN-02.yaml +72 -0
  66. cactus_test_definitions/client/procedures/GEN-03.yaml +160 -0
  67. cactus_test_definitions/client/procedures/GEN-04.yaml +161 -0
  68. cactus_test_definitions/client/procedures/GEN-05.yaml +89 -0
  69. cactus_test_definitions/client/procedures/GEN-06.yaml +90 -0
  70. cactus_test_definitions/client/procedures/GEN-07.yaml +145 -0
  71. cactus_test_definitions/client/procedures/GEN-08.yaml +145 -0
  72. cactus_test_definitions/client/procedures/GEN-09.yaml +117 -0
  73. cactus_test_definitions/client/procedures/GEN-10.yaml +793 -0
  74. cactus_test_definitions/client/procedures/GEN-11.yaml +402 -0
  75. cactus_test_definitions/client/procedures/GEN-12.yaml +402 -0
  76. cactus_test_definitions/client/procedures/GEN-13.yaml +70 -0
  77. cactus_test_definitions/client/procedures/LOA-01.yaml +73 -0
  78. cactus_test_definitions/client/procedures/LOA-02.yaml +73 -0
  79. cactus_test_definitions/client/procedures/LOA-03.yaml +160 -0
  80. cactus_test_definitions/client/procedures/LOA-04.yaml +161 -0
  81. cactus_test_definitions/client/procedures/LOA-05.yaml +89 -0
  82. cactus_test_definitions/client/procedures/LOA-06.yaml +89 -0
  83. cactus_test_definitions/client/procedures/LOA-07.yaml +145 -0
  84. cactus_test_definitions/client/procedures/LOA-08.yaml +145 -0
  85. cactus_test_definitions/client/procedures/LOA-09.yaml +117 -0
  86. cactus_test_definitions/client/procedures/LOA-10.yaml +793 -0
  87. cactus_test_definitions/client/procedures/LOA-11.yaml +402 -0
  88. cactus_test_definitions/client/procedures/LOA-12.yaml +402 -0
  89. cactus_test_definitions/client/procedures/LOA-13.yaml +71 -0
  90. cactus_test_definitions/client/procedures/MUL-01.yaml +92 -0
  91. cactus_test_definitions/client/procedures/MUL-02.yaml +80 -0
  92. cactus_test_definitions/client/procedures/MUL-03.yaml +74 -0
  93. cactus_test_definitions/client/test_procedures.py +185 -0
  94. cactus_test_definitions/client/validate.py +98 -0
  95. cactus_test_definitions/csipaus.py +83 -0
  96. cactus_test_definitions/errors.py +15 -0
  97. cactus_test_definitions/parameters.py +153 -0
  98. cactus_test_definitions/py.typed +0 -0
  99. cactus_test_definitions/schema.py +22 -0
  100. cactus_test_definitions/server/README.md +172 -0
  101. cactus_test_definitions/server/__init__.py +27 -0
  102. cactus_test_definitions/server/__pycache__/__init__.cpython-312.pyc +0 -0
  103. cactus_test_definitions/server/__pycache__/actions.cpython-312.pyc +0 -0
  104. cactus_test_definitions/server/__pycache__/checks.cpython-312.pyc +0 -0
  105. cactus_test_definitions/server/__pycache__/test_procedures.cpython-312-pytest-8.3.5.pyc +0 -0
  106. cactus_test_definitions/server/__pycache__/validate.cpython-312.pyc +0 -0
  107. cactus_test_definitions/server/actions.py +140 -0
  108. cactus_test_definitions/server/checks.py +152 -0
  109. cactus_test_definitions/server/procedures/S-ALL-01.yaml +45 -0
  110. cactus_test_definitions/server/procedures/S-ALL-02.yaml +65 -0
  111. cactus_test_definitions/server/procedures/S-ALL-03.yaml +65 -0
  112. cactus_test_definitions/server/procedures/S-ALL-04.yaml +137 -0
  113. cactus_test_definitions/server/procedures/S-ALL-05.yaml +111 -0
  114. cactus_test_definitions/server/procedures/S-ALL-06.yaml +111 -0
  115. cactus_test_definitions/server/procedures/S-ALL-07.yaml +100 -0
  116. cactus_test_definitions/server/procedures/S-ALL-08.yaml +77 -0
  117. cactus_test_definitions/server/procedures/S-ALL-09.yaml +43 -0
  118. cactus_test_definitions/server/procedures/S-ALL-10.yaml +68 -0
  119. cactus_test_definitions/server/procedures/S-ALL-11.yaml +36 -0
  120. cactus_test_definitions/server/procedures/S-ALL-12.yaml +36 -0
  121. cactus_test_definitions/server/procedures/S-ALL-13.yaml +36 -0
  122. cactus_test_definitions/server/procedures/S-ALL-14.yaml +36 -0
  123. cactus_test_definitions/server/procedures/S-ALL-15.yaml +79 -0
  124. cactus_test_definitions/server/procedures/S-ALL-16.yaml +79 -0
  125. cactus_test_definitions/server/procedures/S-ALL-17.yaml +39 -0
  126. cactus_test_definitions/server/procedures/S-ALL-18.yaml +35 -0
  127. cactus_test_definitions/server/procedures/S-ALL-19.yaml +34 -0
  128. cactus_test_definitions/server/procedures/S-ALL-20.yaml +34 -0
  129. cactus_test_definitions/server/procedures/S-ALL-21.yaml +34 -0
  130. cactus_test_definitions/server/procedures/S-ALL-22.yaml +34 -0
  131. cactus_test_definitions/server/procedures/S-ALL-23.yaml +34 -0
  132. cactus_test_definitions/server/procedures/S-ALL-24.yaml +37 -0
  133. cactus_test_definitions/server/procedures/S-ALL-25.yaml +151 -0
  134. cactus_test_definitions/server/procedures/S-ALL-41.yaml +343 -0
  135. cactus_test_definitions/server/procedures/S-ALL-42.yaml +81 -0
  136. cactus_test_definitions/server/procedures/S-ALL-43.yaml +146 -0
  137. cactus_test_definitions/server/procedures/S-ALL-44.yaml +51 -0
  138. cactus_test_definitions/server/procedures/S-ALL-45.yaml +34 -0
  139. cactus_test_definitions/server/procedures/S-ALL-48.yaml +29 -0
  140. cactus_test_definitions/server/procedures/S-ALL-49.yaml +56 -0
  141. cactus_test_definitions/server/procedures/S-ALL-51.yaml +35 -0
  142. cactus_test_definitions/server/procedures/S-ALL-52.yaml +35 -0
  143. cactus_test_definitions/server/procedures/S-ALL-53.yaml +42 -0
  144. cactus_test_definitions/server/procedures/S-ALL-55.yaml +45 -0
  145. cactus_test_definitions/server/procedures/S-ALL-56.yaml +36 -0
  146. cactus_test_definitions/server/procedures/S-ALL-57.yaml +62 -0
  147. cactus_test_definitions/server/procedures/S-OPT-01.yaml +42 -0
  148. cactus_test_definitions/server/procedures/S-OPT-02.yaml +40 -0
  149. cactus_test_definitions/server/procedures/S-OPT-03.yaml +47 -0
  150. cactus_test_definitions/server/procedures/S-OPT-04.yaml +32 -0
  151. cactus_test_definitions/server/procedures/S-OPT-05.yaml +33 -0
  152. cactus_test_definitions/server/test_procedures.py +156 -0
  153. cactus_test_definitions/server/validate.py +30 -0
  154. cactus_test_definitions/variable_expressions.py +419 -0
  155. cactus_test_definitions-1.8.0.dist-info/METADATA +289 -0
  156. cactus_test_definitions-1.8.0.dist-info/RECORD +173 -0
  157. cactus_test_definitions-1.8.0.dist-info/WHEEL +5 -0
  158. cactus_test_definitions-1.8.0.dist-info/licenses/LICENSE.txt +22 -0
  159. cactus_test_definitions-1.8.0.dist-info/top_level.txt +2 -0
  160. tests/__init__.py +0 -0
  161. tests/unit/__init__.py +0 -0
  162. tests/unit/client/__init__.py +0 -0
  163. tests/unit/client/test_actions.py +72 -0
  164. tests/unit/client/test_checks.py +71 -0
  165. tests/unit/client/test_events.py +36 -0
  166. tests/unit/client/test_test_procedures.py +103 -0
  167. tests/unit/client/test_validate.py +200 -0
  168. tests/unit/server/__init__.py +0 -0
  169. tests/unit/server/test_test_procedures.py +60 -0
  170. tests/unit/server/test_validate.py +75 -0
  171. tests/unit/test_csipaus.py +49 -0
  172. tests/unit/test_parameters.py +197 -0
  173. tests/unit/test_variable_expressions.py +402 -0
@@ -0,0 +1,151 @@
1
+ Description: Subscribe
2
+ Category: Subscription / Notification
3
+ Classes:
4
+ - A
5
+
6
+ TargetVersions:
7
+ - v1.2
8
+
9
+ Preconditions:
10
+ required_clients:
11
+ - id: client
12
+
13
+ Steps:
14
+ - id: PRECONDITION
15
+ repeat_until_pass: true
16
+ instructions:
17
+ - Create an EndDevice registration for client.
18
+ action:
19
+ type: discovery
20
+ parameters:
21
+ resources:
22
+ - EndDevice
23
+ - FunctionSetAssignments
24
+ - DERProgram
25
+ - SubscriptionList
26
+ checks:
27
+ - type: end-device
28
+ parameters:
29
+ matches_client: true
30
+
31
+ - id: EDEV LIST SUBSCRIBE
32
+ action:
33
+ type: create-subscription
34
+ parameters:
35
+ sub_id: edev_list_sub
36
+ resource: EndDeviceList
37
+
38
+ - id: AWAIT EDEV LIST NOTIFICATION
39
+ repeat_until_pass: true
40
+ instructions:
41
+ - Change the EndDeviceList to have a pollRate of 30 seconds. Ensure it sends a Notification.
42
+ action:
43
+ type: notifications
44
+ parameters:
45
+ sub_id: edev_list_sub
46
+ collect: true
47
+ checks:
48
+ - type: end-device-list
49
+ parameters:
50
+ minimum_count: 1
51
+ maximum_count: 1
52
+ poll_rate: 30
53
+ sub_id: edev_list_sub
54
+
55
+ - id: FSA LIST SUBSCRIBE
56
+ action:
57
+ type: create-subscription
58
+ parameters:
59
+ sub_id: fsa_list_sub
60
+ resource: FunctionSetAssignmentsList
61
+
62
+ - id: AWAIT FSA LIST NOTIFICATION
63
+ repeat_until_pass: true
64
+ instructions:
65
+ - Add a new FunctionSetAssignment to client EndDevice. Ensure it sends a Notification.
66
+ action:
67
+ type: notifications
68
+ parameters:
69
+ sub_id: fsa_list_sub
70
+ collect: true
71
+ checks:
72
+ - type: function-set-assignment
73
+ parameters:
74
+ minimum_count: 1
75
+ maximum_count: 1
76
+ matches_client_edev: true
77
+ sub_id: fsa_list_sub
78
+
79
+
80
+ # At this point the client will have a FunctionSetAssignment with a LINK to a DERProgramList but NO
81
+ # physical record of that DERProgramList - we can't just subscribe to a ListLink.href as the actual underlying
82
+ # record might NOT be subscribable (we can only discover that by resolving the record)
83
+ #
84
+ # For these reasons - we are forced to actually resolve the DERProgramList via discovery.
85
+ - id: DISCOVER NEW DERP LIST
86
+ action:
87
+ type: discovery
88
+ parameters:
89
+ resources:
90
+ - DERProgramList
91
+
92
+ - id: DERP LIST SUBSCRIBE
93
+ action:
94
+ type: create-subscription
95
+ parameters:
96
+ sub_id: derp_list_sub
97
+ resource: DERProgramList
98
+
99
+ - id: AWAIT DERP LIST NOTIFICATION
100
+ repeat_until_pass: true
101
+ instructions:
102
+ - Add a new DERProgram to the newly created FunctionSetAssignment. Ensure it sends a Notification.
103
+ action:
104
+ type: notifications
105
+ parameters:
106
+ sub_id: derp_list_sub
107
+ collect: true
108
+ checks:
109
+ - type: der-program
110
+ parameters:
111
+ minimum_count: 1
112
+ maximum_count: 1
113
+ fsa_index: -1 # Must belong to the latest FunctionSetAssignment
114
+ sub_id: derp_list_sub
115
+
116
+ # Same as above - we don't have the DefaultDERControl (only a link) - we need to resolve it
117
+ - id: DISCOVER NEW DERC
118
+ repeat_until_pass: true
119
+ instructions:
120
+ - Add a DefaultDERControl to the recently created DERProgram. Ensure it's subscribable.
121
+ action:
122
+ type: discovery
123
+ parameters:
124
+ resources:
125
+ - DefaultDERControl
126
+ checks:
127
+ - type: default-der-control
128
+ parameters:
129
+ minimum_count: 1
130
+
131
+ - id: DEFAULT DERC SUBSCRIBE
132
+ action:
133
+ type: create-subscription
134
+ parameters:
135
+ sub_id: dderc_sub
136
+ resource: DefaultDERControl
137
+
138
+ - id: AWAIT DEFAULT DERC NOTIFICATION
139
+ repeat_until_pass: true
140
+ instructions:
141
+ - Adjust the DefaultDERControl to have opModeExpLimW 2000 W. Ensure it sends a Notification.
142
+ action:
143
+ type: notifications
144
+ parameters:
145
+ sub_id: dderc_sub
146
+ collect: true
147
+ checks:
148
+ - type: default-der-control
149
+ parameters:
150
+ opModExpLimW: 2000
151
+ sub_id: dderc_sub
@@ -0,0 +1,343 @@
1
+ Description: Control Responses
2
+ Category: Control
3
+ Classes:
4
+ - A
5
+
6
+ TargetVersions:
7
+ - v1.2
8
+
9
+ Preconditions:
10
+ required_clients:
11
+ - id: client
12
+
13
+ Steps:
14
+ - id: (A) PRECONDITION
15
+ repeat_until_pass: true
16
+ client: client
17
+ instructions:
18
+ - Create an EndDevice registration.
19
+ - Configure an active control with opModExpLimW and opModImpLimW = 200% of the DERs rated active power, responseRequired = 03, and replyTo set to the response endpoint on the test utility server.
20
+ action:
21
+ type: discovery
22
+ parameters:
23
+ resources:
24
+ - EndDevice
25
+ - DERControl
26
+ checks:
27
+ - type: end-device
28
+ parameters:
29
+ matches_client: true
30
+ - type: der-control
31
+ parameters:
32
+ minimum_count: 1
33
+ maximum_count: 1
34
+ opModExpLimW: $(setMaxW * 2)
35
+ opModImpLimW: $(setMaxW * 2)
36
+ # replyTo should also be set but this check is implicit in later communications
37
+ event_status: 0 # Scheduled
38
+
39
+
40
+ ################################## TEST SECTION 1 - Receive, Start, Complete ##################################
41
+
42
+
43
+ - id: (1b) DERControl 1 - Received
44
+ client: client
45
+ action:
46
+ type: respond-der-controls # send response status = 1 (received) immediately after it is sent
47
+
48
+ - id: (2) DERControl 1 - Active
49
+ repeat_until_pass: True # The first DER Control can start any time and be of any duration.
50
+ client: client
51
+ action:
52
+ type: refresh-resource
53
+ parameters:
54
+ resource: DERControl
55
+ checks:
56
+ - type: der-control # Check event status has been updated
57
+ parameters:
58
+ minimum_count: 1
59
+ maximum_count: 1
60
+ opModExpLimW: $(setMaxW * 2)
61
+ opModImpLimW: $(setMaxW * 2)
62
+ event_status: 1 # Active
63
+
64
+ - id: (2b) DERControl 1 - Started
65
+ client: client
66
+ action:
67
+ type: respond-der-controls # send response status = 2 (started)
68
+
69
+ - id: (3) DERControl 1 - Completed
70
+ repeat_until_pass: true # Wait until event status has been updated
71
+ client: client
72
+ action:
73
+ type: refresh-resource
74
+ parameters:
75
+ resource: DERControl
76
+ checks:
77
+ - type: der-control # Check event status has been updated
78
+ parameters:
79
+ minimum_count: 1
80
+ maximum_count: 1
81
+ opModExpLimW: $(setMaxW * 2)
82
+ opModImpLimW: $(setMaxW * 2)
83
+ event_status: 2 # Completed
84
+
85
+ - id: (3b) DERControl 1 - Completed
86
+ client: client
87
+ action:
88
+ type: respond-der-controls # send response status = 3 (Completed)
89
+
90
+ - id: WAIT for completed DERControl to be removed from server (20 seconds buffer from completion time)
91
+ client: client
92
+ action:
93
+ type: wait
94
+ parameters:
95
+ duration_seconds: 20
96
+
97
+ - id: CLEAR OUT DERControls
98
+ client: client
99
+ instructions: The server should clear out the completed control ready to begin the next controls.
100
+ action:
101
+ type: discovery
102
+ parameters:
103
+ resources:
104
+ - DERControl
105
+ checks:
106
+ - type: der-control
107
+ parameters:
108
+ maximum_count: 0 # Empty list of controls
109
+
110
+
111
+ ################################## TEST SECTION 2 - CANCELLATION ##################################
112
+
113
+
114
+ - id: (4) DERControl 2
115
+ repeat_until_pass: true
116
+ client: client
117
+ instructions:
118
+ - The utility server is configured with an active control with opModExpLimW and opModImpLimW = 200% of the DERs rated active power, responseRequired = 03 and replyTo set to the response endpoint on the test utility server, to begin in 5 minutes.
119
+ action:
120
+ type: discovery
121
+ parameters:
122
+ resources:
123
+ - DERControl
124
+ checks:
125
+ - type: der-control
126
+ parameters:
127
+ minimum_count: 1
128
+ maximum_count: 1
129
+ opModExpLimW: $(setMaxW * 2)
130
+ opModImpLimW: $(setMaxW * 2)
131
+ responseRequired: 3
132
+ # replyTo should also be set but this check is implicit in later communications
133
+ event_status: 0 # Scheduled
134
+ # start time should be set to 5 mins, check is implicit in the next step
135
+
136
+ - id: (4b) DERControl 2 - Received
137
+ client: client
138
+ action:
139
+ type: respond-der-controls # send response status = 1 (Received)
140
+
141
+ - id: WAIT for DERControl start time
142
+ client: client
143
+ action:
144
+ type: wait
145
+ parameters:
146
+ duration_seconds: 320 # 5 minutes and 20 second buffer
147
+
148
+ - id: (4c) DERControl 2 - Started
149
+ client: client
150
+ action:
151
+ type: refresh-resource
152
+ parameters:
153
+ resource: DERControl
154
+ checks:
155
+ - type: der-control # Check event status has been updated
156
+ parameters:
157
+ minimum_count: 1
158
+ maximum_count: 1
159
+ opModExpLimW: $(setMaxW * 2)
160
+ opModImpLimW: $(setMaxW * 2)
161
+ event_status: 1 # Active
162
+
163
+ - id: (4d) DERControl 2 - Started
164
+ client: client
165
+ action:
166
+ type: respond-der-controls # send response status = 2 (Started)
167
+
168
+ - id: (5) DERControl 2 - Cancelled.
169
+ repeat_until_pass: true
170
+ client: client
171
+ instructions:
172
+ - The utility server is configured to cancel the active control while it is still active.
173
+ action:
174
+ type: refresh-resource
175
+ parameters:
176
+ resource: DERControl
177
+ checks:
178
+ - type: der-control
179
+ parameters:
180
+ minimum_count: 1
181
+ maximum_count: 1
182
+ opModExpLimW: $(setMaxW * 2)
183
+ opModImpLimW: $(setMaxW * 2)
184
+ responseRequired: 3
185
+ event_status: 2 # Cancelled
186
+
187
+ - id: CHECK pt. 1 - Cancelled DERControl isnt just removed immediately (client has a chance to see cancellation)
188
+ client: client
189
+ action:
190
+ type: wait
191
+ parameters:
192
+ duration_seconds: 10 # little buffer to check behaviour
193
+
194
+ - id: CHECK pt. 2 - Cancelled DERControl isnt just removed immediately (client has a chance to see cancellation)
195
+ client: client
196
+ action:
197
+ type: refresh-resource
198
+ parameters:
199
+ resource: DERControl
200
+ checks:
201
+ - type: der-control # Check DER Control still exists
202
+ parameters:
203
+ minimum_count: 1
204
+ maximum_count: 1
205
+ opModExpLimW: $(setMaxW * 2)
206
+ opModImpLimW: $(setMaxW * 2)
207
+ event_status: 2 # Cancelled
208
+
209
+ - id: (5b) DERControl 2 - Respond to cancelled DERControl
210
+ client: client
211
+ action:
212
+ type: respond-der-controls # Will post control response status = 6 (cancelled).
213
+
214
+ - id: CLEAR OUT DERControls for next section of the test
215
+ repeat_until_pass: true
216
+ client: client
217
+ instructions: The server should clear out the cancelled control ready to begin the next controls (not written but makes next section easier to test).
218
+ action:
219
+ type: discovery
220
+ parameters:
221
+ resources:
222
+ - DERControl
223
+ checks:
224
+ - type: der-control
225
+ parameters:
226
+ maximum_count: 0 # Empty list of controls
227
+
228
+
229
+ ################################## TEST SECTION 3 - SUPERSEEDED ##################################
230
+
231
+
232
+ - id: (6) DERControl 3
233
+ repeat_until_pass: true
234
+ client: client
235
+ instructions:
236
+ - The utility server is configured with an active control with opModExpLimW and opModImpLimW = 200% of the DERs rated active power, responseRequired = 03 and replyTo set to the response endpoint on the test utility server, to begin in 10 minutes.
237
+ action:
238
+ type: discovery
239
+ parameters:
240
+ resources:
241
+ - DERControl
242
+ checks:
243
+ - type: der-control
244
+ parameters:
245
+ minimum_count: 1
246
+ maximum_count: 1
247
+ opModExpLimW: $(setMaxW * 2)
248
+ opModImpLimW: $(setMaxW * 2)
249
+ responseRequired: 3
250
+ # replyTo should also be set but this check is implicit in later communications
251
+ event_status: 0 # Scheduled
252
+ # start time should be set to 10 mins but we do not check here
253
+
254
+ - id: (6b) Respond to scheduled DERControl 3
255
+ client: client
256
+ action:
257
+ type: respond-der-controls # Respond status = 1 (received).
258
+
259
+ - id: (7) DERControl 3 - Cancel
260
+ repeat_until_pass: true
261
+ client: client
262
+ instructions:
263
+ - The utility server is configured to cancel the scheduled control before it is active.
264
+ action:
265
+ type: refresh-resource
266
+ parameters:
267
+ resource: DERControl
268
+ checks:
269
+ - type: der-control
270
+ parameters:
271
+ minimum_count: 1
272
+ maximum_count: 1
273
+ opModExpLimW: $(setMaxW * 2)
274
+ opModImpLimW: $(setMaxW * 2)
275
+ responseRequired: 3
276
+ event_status: 2 # Cancelled
277
+
278
+ - id: (7b) Respond to cancelled DERControl 3
279
+ client: client
280
+ action:
281
+ type: respond-der-controls # Will post control response status = 6 (cancelled).
282
+
283
+ - id: (8) DERControl 4
284
+ repeat_until_pass: true
285
+ client: client
286
+ instructions:
287
+ - The utility server configures an active control with opModExpLimW and opModImpLimW = 200% of the DERs rated active power to begin in 10 minutes.
288
+ action:
289
+ type: refresh-resource
290
+ parameters:
291
+ resource: DERControl
292
+ checks:
293
+ - type: der-control
294
+ parameters:
295
+ minimum_count: 1
296
+ maximum_count: 1
297
+ opModExpLimW: $(setMaxW * 2)
298
+ opModImpLimW: $(setMaxW * 2)
299
+ event_status: 0 # Scheduled
300
+
301
+ - id: (8b) Respond to scheduled DERControl 4
302
+ client: client
303
+ action:
304
+ type: respond-der-controls # Will post control response status = 1 (received).
305
+
306
+ - id: (9) DERControl 5
307
+ repeat_until_pass: true
308
+ client: client
309
+ instructions:
310
+ - The utility server configures an active control with the same primacy and an overlapping control window.
311
+ action:
312
+ type: refresh-resource
313
+ parameters:
314
+ resource: DERControl
315
+ checks:
316
+ - type: der-control
317
+ parameters:
318
+ minimum_count: 1 # The control above should now be set to superseeded not scheduled, so still only one expected.
319
+ maximum_count: 1
320
+ opModExpLimW: $(setMaxW * 2)
321
+ opModImpLimW: $(setMaxW * 2)
322
+ event_status: 0 # Scheduled
323
+
324
+ - id: (9b) Respond to scheduled DERControls 4 and 5
325
+ client: client
326
+ action:
327
+ type: respond-der-controls # Send both: control 4 (7 superseeded), and control 5 (1 scheduled).
328
+
329
+ - id: (9c) Check DERControl 4 is superseeded
330
+ repeat_until_pass: true
331
+ client: client
332
+ action:
333
+ type: refresh-resource
334
+ parameters:
335
+ resource: DERControl
336
+ checks:
337
+ - type: der-control
338
+ parameters:
339
+ opModExpLimW: $(setMaxW * 2)
340
+ opModImpLimW: $(setMaxW * 2)
341
+ event_status: 4 # Superseeded
342
+ minimum_count: 1
343
+ maximum_count: 1
@@ -0,0 +1,81 @@
1
+ Description: Delayed Response to Cancelled Export Control
2
+ Category: Control
3
+ Classes:
4
+ - A
5
+
6
+ TargetVersions:
7
+ - v1.2
8
+
9
+ Preconditions:
10
+ required_clients:
11
+ - id: client
12
+
13
+ Steps:
14
+ - id: (A) PRECONDITION
15
+ repeat_until_pass: true
16
+ client: client
17
+ instructions:
18
+ - The client has a DER that is exporting at the connection point at least 50% of its rated active power.
19
+ - The utility server has a current active control in operation with opModExpLimW set to 200% of the DER's rated active power, and a default DER control in-place with opModExpLimW set to 30% of the DER's rated active power.
20
+ action:
21
+ type: discovery
22
+ parameters:
23
+ resources:
24
+ - EndDevice
25
+ - DERControl
26
+ - DefaultDERControl
27
+ checks:
28
+ - type: end-device
29
+ parameters:
30
+ matches_client: true
31
+ - type: der-control
32
+ parameters:
33
+ minimum_count: 1
34
+ maximum_count: 1
35
+ opModExpLimW: $(setMaxW * 2)
36
+ event_status: 1 # Active
37
+ - type: default-der-control
38
+ parameters:
39
+ opModExpLimW: $(setMaxW * 0.3)
40
+
41
+ - id: (1) Cancel active controls
42
+ repeat_until_pass: True
43
+ instructions: The server should set all active controls to cancelled.
44
+ client: client
45
+ action:
46
+ type: refresh-resource
47
+ parameters:
48
+ resource: DERControl
49
+ checks:
50
+ - type: der-control # Check event status has been updated
51
+ parameters:
52
+ minimum_count: 1
53
+ maximum_count: 1
54
+ opModExpLimW: $(setMaxW * 2)
55
+ event_status: 2 # Cancelled
56
+
57
+ - id: WAIT to see that cancelled responses are not immediately removed
58
+ client: client
59
+ action:
60
+ type: wait
61
+ parameters:
62
+ duration_seconds: 60
63
+
64
+ - id: (2) CHECK to see that cancelled responses are not immediately removed
65
+ client: client
66
+ action:
67
+ type: refresh-resource
68
+ parameters:
69
+ resource: DERControl
70
+ checks:
71
+ - type: der-control
72
+ parameters:
73
+ minimum_count: 1
74
+ maximum_count: 1
75
+ opModExpLimW: $(setMaxW * 2)
76
+ event_status: 2 # Cancelled
77
+
78
+ - id: (3) Response
79
+ client: client
80
+ action:
81
+ type: respond-der-controls # send response status = 6 (Cancelled)
@@ -0,0 +1,146 @@
1
+ Description: Update Poll Rates
2
+ Category: Control
3
+ Classes:
4
+ - A
5
+
6
+ TargetVersions:
7
+ - v1.2
8
+
9
+ Preconditions:
10
+ required_clients:
11
+ - id: client
12
+
13
+ Steps:
14
+ - id: (A) PRECONDITION
15
+ repeat_until_pass: true
16
+ client: client
17
+ instructions:
18
+ - The client has a device with DeviceCapability, EndDeviceList and FunctionSetAssignmentsList poll-rate set to 300s, DERProgramList, DERList and MirrorUsagePoint to 60s.
19
+ action:
20
+ type: discovery
21
+ parameters:
22
+ resources:
23
+ - EndDevice
24
+ - DeviceCapability
25
+ - EndDeviceList
26
+ - FunctionSetAssignmentsList
27
+ - DERProgramList
28
+ - DERList
29
+ - MirrorUsagePoint
30
+ checks:
31
+ - type: poll-rate
32
+ parameters:
33
+ resource: DeviceCapability
34
+ poll_rate_seconds: 300
35
+ - type: poll-rate
36
+ parameters:
37
+ resource: EndDeviceList
38
+ poll_rate_seconds: 300
39
+ - type: poll-rate
40
+ parameters:
41
+ resource: FunctionSetAssignmentsList
42
+ poll_rate_seconds: 300
43
+ - type: poll-rate
44
+ parameters:
45
+ resource: DERProgramList
46
+ poll_rate_seconds: 60
47
+ - type: poll-rate
48
+ parameters:
49
+ resource: DERList
50
+ poll_rate_seconds: 60
51
+ - type: poll-rate
52
+ parameters:
53
+ resource: MirrorUsagePoint
54
+ poll_rate_seconds: 60
55
+
56
+ - id: (1) UPDATE DeviceCapability poll-rate
57
+ repeat_until_pass: true
58
+ client: client
59
+ instructions:
60
+ - Set DeviceCapabilitypoll poll rate to 60s.
61
+ action:
62
+ type: refresh-resource
63
+ parameters:
64
+ resource: DeviceCapability
65
+ checks:
66
+ - type: poll-rate
67
+ parameters:
68
+ resource: DeviceCapability
69
+ poll_rate_seconds: 60
70
+
71
+ - id: (2) UPDATE EndDeviceList poll-rate
72
+ repeat_until_pass: true
73
+ client: client
74
+ instructions:
75
+ - Set EndDeviceList poll rate to 60s.
76
+ action:
77
+ type: refresh-resource
78
+ parameters:
79
+ resource: EndDeviceList
80
+ checks:
81
+ - type: poll-rate
82
+ parameters:
83
+ resource: EndDeviceList
84
+ poll_rate_seconds: 60
85
+
86
+ - id: (3) UPDATE FunctionSetAssignments poll-rate
87
+ repeat_until_pass: true
88
+ client: client
89
+ instructions:
90
+ - Set FunctionSetAssignments poll rate to 60s.
91
+ action:
92
+ type: refresh-resource
93
+ parameters:
94
+ resource: FunctionSetAssignments
95
+ checks:
96
+ - type: poll-rate
97
+ parameters:
98
+ resource: FunctionSetAssignments
99
+ poll_rate_seconds: 60
100
+
101
+ - id: (4) UPDATE DERProgramList poll-rate
102
+ repeat_until_pass: true
103
+ client: client
104
+ instructions:
105
+ - Set DERProgramList poll rate to 120s.
106
+ action:
107
+ type: refresh-resource
108
+ parameters:
109
+ resource: DERProgramList
110
+ checks:
111
+ - type: poll-rate
112
+ parameters:
113
+ resource: DERProgramList
114
+ poll_rate_seconds: 120
115
+
116
+ - id: (5) UPDATE DERList poll-rate
117
+ repeat_until_pass: true
118
+ client: client
119
+ instructions:
120
+ - Set DERList poll rate to 120s.
121
+ action:
122
+ type: refresh-resource
123
+ parameters:
124
+ resource: DERList
125
+ checks:
126
+ - type: poll-rate
127
+ parameters:
128
+ resource: DERList
129
+ poll_rate_seconds: 120
130
+
131
+ - id: (6) UPDATE MirrorUsagePoint poll-rate
132
+ repeat_until_pass: true
133
+ client: client
134
+ instructions:
135
+ - Set MirrorUsagePoint poll rate to 120s.
136
+ action:
137
+ type: refresh-resource
138
+ parameters:
139
+ resource: MirrorUsagePoint
140
+ checks:
141
+ - type: poll-rate
142
+ parameters:
143
+ resource: MirrorUsagePoint
144
+ poll_rate_seconds: 120
145
+
146
+