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.
- cactus_test_definitions/__init__.py +39 -0
- cactus_test_definitions/__pycache__/__init__.cpython-312.pyc +0 -0
- cactus_test_definitions/__pycache__/actions.cpython-312.pyc +0 -0
- cactus_test_definitions/__pycache__/checks.cpython-312.pyc +0 -0
- cactus_test_definitions/__pycache__/csipaus.cpython-312.pyc +0 -0
- cactus_test_definitions/__pycache__/errors.cpython-312.pyc +0 -0
- cactus_test_definitions/__pycache__/events.cpython-312.pyc +0 -0
- cactus_test_definitions/__pycache__/parameters.cpython-312.pyc +0 -0
- cactus_test_definitions/__pycache__/schema.cpython-312.pyc +0 -0
- cactus_test_definitions/__pycache__/test_procedures.cpython-312-pytest-8.3.5.pyc +0 -0
- cactus_test_definitions/__pycache__/test_procedures.cpython-312.pyc +0 -0
- cactus_test_definitions/__pycache__/variable_expressions.cpython-312.pyc +0 -0
- cactus_test_definitions/__pycache__/version.cpython-312.pyc +0 -0
- cactus_test_definitions/client/__init__.py +30 -0
- cactus_test_definitions/client/__pycache__/__init__.cpython-312.pyc +0 -0
- cactus_test_definitions/client/__pycache__/actions.cpython-312.pyc +0 -0
- cactus_test_definitions/client/__pycache__/checks.cpython-312.pyc +0 -0
- cactus_test_definitions/client/__pycache__/events.cpython-312.pyc +0 -0
- cactus_test_definitions/client/__pycache__/test_procedures.cpython-312-pytest-8.3.5.pyc +0 -0
- cactus_test_definitions/client/__pycache__/validate.cpython-312.pyc +0 -0
- cactus_test_definitions/client/actions.py +99 -0
- cactus_test_definitions/client/checks.py +128 -0
- cactus_test_definitions/client/events.py +71 -0
- cactus_test_definitions/client/procedures/ALL-01.yaml +94 -0
- cactus_test_definitions/client/procedures/ALL-02.yaml +113 -0
- cactus_test_definitions/client/procedures/ALL-03-REJ.yaml +69 -0
- cactus_test_definitions/client/procedures/ALL-03.yaml +110 -0
- cactus_test_definitions/client/procedures/ALL-04.yaml +69 -0
- cactus_test_definitions/client/procedures/ALL-05.yaml +117 -0
- cactus_test_definitions/client/procedures/ALL-06.yaml +128 -0
- cactus_test_definitions/client/procedures/ALL-07.yaml +76 -0
- cactus_test_definitions/client/procedures/ALL-08.yaml +78 -0
- cactus_test_definitions/client/procedures/ALL-09.yaml +111 -0
- cactus_test_definitions/client/procedures/ALL-10.yaml +128 -0
- cactus_test_definitions/client/procedures/ALL-11.yaml +111 -0
- cactus_test_definitions/client/procedures/ALL-12.yaml +126 -0
- cactus_test_definitions/client/procedures/ALL-13.yaml +112 -0
- cactus_test_definitions/client/procedures/ALL-14.yaml +165 -0
- cactus_test_definitions/client/procedures/ALL-15.yaml +109 -0
- cactus_test_definitions/client/procedures/ALL-16.yaml +102 -0
- cactus_test_definitions/client/procedures/ALL-17.yaml +63 -0
- cactus_test_definitions/client/procedures/ALL-18.yaml +289 -0
- cactus_test_definitions/client/procedures/ALL-19.yaml +78 -0
- cactus_test_definitions/client/procedures/ALL-20.yaml +136 -0
- cactus_test_definitions/client/procedures/ALL-21.yaml +203 -0
- cactus_test_definitions/client/procedures/ALL-22.yaml +82 -0
- cactus_test_definitions/client/procedures/ALL-23.yaml +158 -0
- cactus_test_definitions/client/procedures/ALL-24.yaml +132 -0
- cactus_test_definitions/client/procedures/ALL-25-EXT.yaml +228 -0
- cactus_test_definitions/client/procedures/ALL-25.yaml +136 -0
- cactus_test_definitions/client/procedures/ALL-26.yaml +147 -0
- cactus_test_definitions/client/procedures/ALL-27.yaml +144 -0
- cactus_test_definitions/client/procedures/ALL-28.yaml +273 -0
- cactus_test_definitions/client/procedures/ALL-29.yaml +87 -0
- cactus_test_definitions/client/procedures/ALL-30.yaml +188 -0
- cactus_test_definitions/client/procedures/BES-01.yaml +136 -0
- cactus_test_definitions/client/procedures/BES-02.yaml +137 -0
- cactus_test_definitions/client/procedures/BES-03.yaml +135 -0
- cactus_test_definitions/client/procedures/BES-04.yaml +228 -0
- cactus_test_definitions/client/procedures/DRA-01.yaml +54 -0
- cactus_test_definitions/client/procedures/DRA-02.yaml +64 -0
- cactus_test_definitions/client/procedures/DRD-01.yaml +667 -0
- cactus_test_definitions/client/procedures/DRL-01.yaml +327 -0
- cactus_test_definitions/client/procedures/GEN-01.yaml +73 -0
- cactus_test_definitions/client/procedures/GEN-02.yaml +72 -0
- cactus_test_definitions/client/procedures/GEN-03.yaml +160 -0
- cactus_test_definitions/client/procedures/GEN-04.yaml +161 -0
- cactus_test_definitions/client/procedures/GEN-05.yaml +89 -0
- cactus_test_definitions/client/procedures/GEN-06.yaml +90 -0
- cactus_test_definitions/client/procedures/GEN-07.yaml +145 -0
- cactus_test_definitions/client/procedures/GEN-08.yaml +145 -0
- cactus_test_definitions/client/procedures/GEN-09.yaml +117 -0
- cactus_test_definitions/client/procedures/GEN-10.yaml +793 -0
- cactus_test_definitions/client/procedures/GEN-11.yaml +402 -0
- cactus_test_definitions/client/procedures/GEN-12.yaml +402 -0
- cactus_test_definitions/client/procedures/GEN-13.yaml +70 -0
- cactus_test_definitions/client/procedures/LOA-01.yaml +73 -0
- cactus_test_definitions/client/procedures/LOA-02.yaml +73 -0
- cactus_test_definitions/client/procedures/LOA-03.yaml +160 -0
- cactus_test_definitions/client/procedures/LOA-04.yaml +161 -0
- cactus_test_definitions/client/procedures/LOA-05.yaml +89 -0
- cactus_test_definitions/client/procedures/LOA-06.yaml +89 -0
- cactus_test_definitions/client/procedures/LOA-07.yaml +145 -0
- cactus_test_definitions/client/procedures/LOA-08.yaml +145 -0
- cactus_test_definitions/client/procedures/LOA-09.yaml +117 -0
- cactus_test_definitions/client/procedures/LOA-10.yaml +793 -0
- cactus_test_definitions/client/procedures/LOA-11.yaml +402 -0
- cactus_test_definitions/client/procedures/LOA-12.yaml +402 -0
- cactus_test_definitions/client/procedures/LOA-13.yaml +71 -0
- cactus_test_definitions/client/procedures/MUL-01.yaml +92 -0
- cactus_test_definitions/client/procedures/MUL-02.yaml +80 -0
- cactus_test_definitions/client/procedures/MUL-03.yaml +74 -0
- cactus_test_definitions/client/test_procedures.py +185 -0
- cactus_test_definitions/client/validate.py +98 -0
- cactus_test_definitions/csipaus.py +83 -0
- cactus_test_definitions/errors.py +15 -0
- cactus_test_definitions/parameters.py +153 -0
- cactus_test_definitions/py.typed +0 -0
- cactus_test_definitions/schema.py +22 -0
- cactus_test_definitions/server/README.md +172 -0
- cactus_test_definitions/server/__init__.py +27 -0
- cactus_test_definitions/server/__pycache__/__init__.cpython-312.pyc +0 -0
- cactus_test_definitions/server/__pycache__/actions.cpython-312.pyc +0 -0
- cactus_test_definitions/server/__pycache__/checks.cpython-312.pyc +0 -0
- cactus_test_definitions/server/__pycache__/test_procedures.cpython-312-pytest-8.3.5.pyc +0 -0
- cactus_test_definitions/server/__pycache__/validate.cpython-312.pyc +0 -0
- cactus_test_definitions/server/actions.py +140 -0
- cactus_test_definitions/server/checks.py +152 -0
- cactus_test_definitions/server/procedures/S-ALL-01.yaml +45 -0
- cactus_test_definitions/server/procedures/S-ALL-02.yaml +65 -0
- cactus_test_definitions/server/procedures/S-ALL-03.yaml +65 -0
- cactus_test_definitions/server/procedures/S-ALL-04.yaml +137 -0
- cactus_test_definitions/server/procedures/S-ALL-05.yaml +111 -0
- cactus_test_definitions/server/procedures/S-ALL-06.yaml +111 -0
- cactus_test_definitions/server/procedures/S-ALL-07.yaml +100 -0
- cactus_test_definitions/server/procedures/S-ALL-08.yaml +77 -0
- cactus_test_definitions/server/procedures/S-ALL-09.yaml +43 -0
- cactus_test_definitions/server/procedures/S-ALL-10.yaml +68 -0
- cactus_test_definitions/server/procedures/S-ALL-11.yaml +36 -0
- cactus_test_definitions/server/procedures/S-ALL-12.yaml +36 -0
- cactus_test_definitions/server/procedures/S-ALL-13.yaml +36 -0
- cactus_test_definitions/server/procedures/S-ALL-14.yaml +36 -0
- cactus_test_definitions/server/procedures/S-ALL-15.yaml +79 -0
- cactus_test_definitions/server/procedures/S-ALL-16.yaml +79 -0
- cactus_test_definitions/server/procedures/S-ALL-17.yaml +39 -0
- cactus_test_definitions/server/procedures/S-ALL-18.yaml +35 -0
- cactus_test_definitions/server/procedures/S-ALL-19.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-20.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-21.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-22.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-23.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-24.yaml +37 -0
- cactus_test_definitions/server/procedures/S-ALL-25.yaml +151 -0
- cactus_test_definitions/server/procedures/S-ALL-41.yaml +343 -0
- cactus_test_definitions/server/procedures/S-ALL-42.yaml +81 -0
- cactus_test_definitions/server/procedures/S-ALL-43.yaml +146 -0
- cactus_test_definitions/server/procedures/S-ALL-44.yaml +51 -0
- cactus_test_definitions/server/procedures/S-ALL-45.yaml +34 -0
- cactus_test_definitions/server/procedures/S-ALL-48.yaml +29 -0
- cactus_test_definitions/server/procedures/S-ALL-49.yaml +56 -0
- cactus_test_definitions/server/procedures/S-ALL-51.yaml +35 -0
- cactus_test_definitions/server/procedures/S-ALL-52.yaml +35 -0
- cactus_test_definitions/server/procedures/S-ALL-53.yaml +42 -0
- cactus_test_definitions/server/procedures/S-ALL-55.yaml +45 -0
- cactus_test_definitions/server/procedures/S-ALL-56.yaml +36 -0
- cactus_test_definitions/server/procedures/S-ALL-57.yaml +62 -0
- cactus_test_definitions/server/procedures/S-OPT-01.yaml +42 -0
- cactus_test_definitions/server/procedures/S-OPT-02.yaml +40 -0
- cactus_test_definitions/server/procedures/S-OPT-03.yaml +47 -0
- cactus_test_definitions/server/procedures/S-OPT-04.yaml +32 -0
- cactus_test_definitions/server/procedures/S-OPT-05.yaml +33 -0
- cactus_test_definitions/server/test_procedures.py +156 -0
- cactus_test_definitions/server/validate.py +30 -0
- cactus_test_definitions/variable_expressions.py +419 -0
- cactus_test_definitions-1.8.0.dist-info/METADATA +289 -0
- cactus_test_definitions-1.8.0.dist-info/RECORD +173 -0
- cactus_test_definitions-1.8.0.dist-info/WHEEL +5 -0
- cactus_test_definitions-1.8.0.dist-info/licenses/LICENSE.txt +22 -0
- cactus_test_definitions-1.8.0.dist-info/top_level.txt +2 -0
- tests/__init__.py +0 -0
- tests/unit/__init__.py +0 -0
- tests/unit/client/__init__.py +0 -0
- tests/unit/client/test_actions.py +72 -0
- tests/unit/client/test_checks.py +71 -0
- tests/unit/client/test_events.py +36 -0
- tests/unit/client/test_test_procedures.py +103 -0
- tests/unit/client/test_validate.py +200 -0
- tests/unit/server/__init__.py +0 -0
- tests/unit/server/test_test_procedures.py +60 -0
- tests/unit/server/test_validate.py +75 -0
- tests/unit/test_csipaus.py +49 -0
- tests/unit/test_parameters.py +197 -0
- tests/unit/test_variable_expressions.py +402 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
Description: Scheduling
|
|
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 utility server is configured to generate a schedule of 24 sequential, non-overlapping controls with a range of export and/or import limits, each with 1min duration.
|
|
19
|
+
action:
|
|
20
|
+
type: discovery
|
|
21
|
+
parameters:
|
|
22
|
+
resources:
|
|
23
|
+
- EndDevice
|
|
24
|
+
- DERControl
|
|
25
|
+
checks:
|
|
26
|
+
- type: der-control
|
|
27
|
+
parameters:
|
|
28
|
+
minimum_count: 24
|
|
29
|
+
opModExpLimW: $(setMaxW * 2)
|
|
30
|
+
opModImpLimW: $(setMaxW)
|
|
31
|
+
event_status: 0 # Scheduled (will ensure non overlapping , superseeded)
|
|
32
|
+
duration: 60
|
|
33
|
+
|
|
34
|
+
- id: (1) DERControlQuery
|
|
35
|
+
client: client
|
|
36
|
+
action:
|
|
37
|
+
type: discovery
|
|
38
|
+
parameters:
|
|
39
|
+
list_limit: 10 # sets s=0, l=10 for paging
|
|
40
|
+
resources:
|
|
41
|
+
- DERControl
|
|
42
|
+
checks:
|
|
43
|
+
- type: der-control
|
|
44
|
+
parameters:
|
|
45
|
+
minimum_count: 10
|
|
46
|
+
maximum_count: 10
|
|
47
|
+
opModExpLimW: $(setMaxW * 2)
|
|
48
|
+
opModImpLimW: $(setMaxW)
|
|
49
|
+
event_status: 0
|
|
50
|
+
duration: 60
|
|
51
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Description: Randomisation
|
|
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 utility server is configured with five sequential, non-overlapping active controls, each with - Duration = 120s, randomizeStart = 60s, opModExpLimW = 200% of the DER's rated active power.
|
|
19
|
+
action:
|
|
20
|
+
type: discovery
|
|
21
|
+
parameters:
|
|
22
|
+
resources:
|
|
23
|
+
- EndDevice
|
|
24
|
+
- DERControl
|
|
25
|
+
checks:
|
|
26
|
+
- type: der-control
|
|
27
|
+
parameters:
|
|
28
|
+
minimum_count: 5
|
|
29
|
+
maximum_count: 5
|
|
30
|
+
opModExpLimW: $(setMaxW * 2)
|
|
31
|
+
randomizeStart: 60
|
|
32
|
+
event_status: 0 # Scheduled (non-overlapping)
|
|
33
|
+
duration: 120
|
|
34
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Description: Changing Ramp-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 utility server is configured with a DefaultDERControl with setGradW = 1% per second.
|
|
19
|
+
action:
|
|
20
|
+
type: discovery
|
|
21
|
+
parameters:
|
|
22
|
+
resources:
|
|
23
|
+
- EndDevice
|
|
24
|
+
- DefaultDERControl
|
|
25
|
+
checks:
|
|
26
|
+
- type: default-der-control
|
|
27
|
+
parameters:
|
|
28
|
+
minimum_count: 1
|
|
29
|
+
setGradW: 1
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
Description: Multiple DER Programs
|
|
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
|
+
- Configure two FunctionSetAssignments - FSA1 and FSA2
|
|
19
|
+
- Each FunctionSetAssignment contains one DERProgram configured under it (DERP1 and DERP2 respectively). DERP1 has a primacy of 1 and DERP2 has a primacy of 2.
|
|
20
|
+
- Give DERP1 a default DER control with opModExpLimW set to 30% of the DER's rated active power.
|
|
21
|
+
- Give DERP2 an active control with opModExpLimW = 200% of the DER's rated active power.
|
|
22
|
+
action:
|
|
23
|
+
type: discovery
|
|
24
|
+
parameters:
|
|
25
|
+
resources:
|
|
26
|
+
- EndDevice
|
|
27
|
+
- DefaultDERControl
|
|
28
|
+
- FunctionSetAssignments
|
|
29
|
+
checks:
|
|
30
|
+
- type: function-set-assignment
|
|
31
|
+
parameters:
|
|
32
|
+
minimum_count: 2
|
|
33
|
+
maximum_count: 2
|
|
34
|
+
matches_client_edev: True
|
|
35
|
+
- type: der-program # DERP 1
|
|
36
|
+
parameters:
|
|
37
|
+
minimum_count: 1
|
|
38
|
+
maximum_count: 1
|
|
39
|
+
primacy: 1
|
|
40
|
+
fsa_index: 1
|
|
41
|
+
- type: der-program # DERP 2
|
|
42
|
+
parameters:
|
|
43
|
+
minimum_count: 1
|
|
44
|
+
maximum_count: 1
|
|
45
|
+
primacy: 2
|
|
46
|
+
fsa_index: 2
|
|
47
|
+
- type: default-der-control
|
|
48
|
+
parameters:
|
|
49
|
+
minimum_count: 1
|
|
50
|
+
derp_primacy: 1
|
|
51
|
+
opModExpLimW: $(setMaxW * 0.3)
|
|
52
|
+
- type: der-control
|
|
53
|
+
parameters:
|
|
54
|
+
minimum_count: 1
|
|
55
|
+
derp_primacy: 2
|
|
56
|
+
opModExpLimW: $(setMaxW * 2)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
Description: End Device Duplication
|
|
2
|
+
Category: Edge Cases
|
|
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
|
+
- DeviceCapability
|
|
24
|
+
- MirrorUsagePointList
|
|
25
|
+
- DER
|
|
26
|
+
checks:
|
|
27
|
+
- type: end-device # This will be the check that will block UNTIL there is an existing EndDevice registration
|
|
28
|
+
parameters:
|
|
29
|
+
matches_client: true
|
|
30
|
+
|
|
31
|
+
- id: Step 1 - Register device with same LFDI.
|
|
32
|
+
action:
|
|
33
|
+
type: insert-end-device
|
|
34
|
+
parameters:
|
|
35
|
+
expect_rejection: True # By default the lfdi will be the same as the existing end device.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
Description: LFDI Doesn't Match Certificate
|
|
2
|
+
Category: Edge Cases
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: CLIENT-A
|
|
12
|
+
- id: CLIENT-B
|
|
13
|
+
|
|
14
|
+
Steps:
|
|
15
|
+
- id: PRECONDITION - register end device on clientA.
|
|
16
|
+
client: CLIENT-A
|
|
17
|
+
repeat_until_pass: true
|
|
18
|
+
instructions:
|
|
19
|
+
- Create an EndDevice registration for clientA.
|
|
20
|
+
action:
|
|
21
|
+
type: discovery
|
|
22
|
+
parameters:
|
|
23
|
+
resources:
|
|
24
|
+
- EndDevice
|
|
25
|
+
checks:
|
|
26
|
+
- type: end-device # This will be the check that will block UNTIL there is an existing EndDevice registration
|
|
27
|
+
parameters:
|
|
28
|
+
matches_client: true
|
|
29
|
+
|
|
30
|
+
- id: Step 1 - Attempt to upsert end device with that the client doesnt own - expect rejection
|
|
31
|
+
client: CLIENT-B
|
|
32
|
+
action:
|
|
33
|
+
type: insert-end-device
|
|
34
|
+
parameters:
|
|
35
|
+
expect_rejection: True
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
Description: Update Connection Point
|
|
2
|
+
Category: Edge Cases
|
|
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.
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- EndDevice
|
|
23
|
+
- DeviceCapability
|
|
24
|
+
- MirrorUsagePointList
|
|
25
|
+
- DER
|
|
26
|
+
checks:
|
|
27
|
+
- type: end-device # This will be the check that will block UNTIL there is an existing EndDevice registration
|
|
28
|
+
parameters:
|
|
29
|
+
matches_client: true
|
|
30
|
+
|
|
31
|
+
- id: SEND CONNECTION POINT ID
|
|
32
|
+
action:
|
|
33
|
+
type: upsert-connection-point
|
|
34
|
+
parameters:
|
|
35
|
+
connectionPointId: "1234567890" # A valid NMI (in the testing range)
|
|
36
|
+
|
|
37
|
+
- id: UPSERT CONNECTION POINT ID
|
|
38
|
+
action:
|
|
39
|
+
type: upsert-connection-point
|
|
40
|
+
parameters:
|
|
41
|
+
connectionPointId: "2345667890" # Upsert automatically checks server response
|
|
42
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Description: Reject Incomplete DER Settings
|
|
2
|
+
Category: Edge Cases
|
|
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.
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- EndDevice
|
|
23
|
+
- DeviceCapability
|
|
24
|
+
- DER
|
|
25
|
+
checks:
|
|
26
|
+
- type: end-device # This will be the check that will block UNTIL there is an existing EndDevice registration
|
|
27
|
+
parameters:
|
|
28
|
+
matches_client: true
|
|
29
|
+
|
|
30
|
+
- id: 1 - SEND MALFORMED DERSettings
|
|
31
|
+
action:
|
|
32
|
+
type: send-malformed-der-settings
|
|
33
|
+
parameters:
|
|
34
|
+
updatedTime_missing: True
|
|
35
|
+
|
|
36
|
+
- id: 2 - Upsert modes enabled
|
|
37
|
+
# NOTE: Cannot test for 400 error when sending int vs hexBinary - the server cannot distinguish them.
|
|
38
|
+
# Instead, this test verifies the server correctly handles valid hexBinary values.
|
|
39
|
+
action:
|
|
40
|
+
type: upsert-der-settings
|
|
41
|
+
parameters:
|
|
42
|
+
setMaxW: 10000
|
|
43
|
+
setGradW: 1000
|
|
44
|
+
modesEnabled: 12 # Double digit, will be checked by the upsert and refetch
|
|
45
|
+
doeModesEnabled: 3
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Description: Reject String LFDIs
|
|
2
|
+
Category: Edge Cases
|
|
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
|
+
- Ensure no end devices are registered.
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- DeviceCapability
|
|
23
|
+
- Time
|
|
24
|
+
- MirrorUsagePointList
|
|
25
|
+
- EndDevice
|
|
26
|
+
checks:
|
|
27
|
+
- type: end-device # Block UNTIL there is no existing EndDevice registration
|
|
28
|
+
parameters:
|
|
29
|
+
matches_client: false
|
|
30
|
+
|
|
31
|
+
- id: 1 - Register EndDevice - Expect rejection from malformed LFDI
|
|
32
|
+
action:
|
|
33
|
+
type: insert-end-device
|
|
34
|
+
parameters:
|
|
35
|
+
force_lfdi: ZZZZZZZZZZZZZZZZ
|
|
36
|
+
expect_rejection: True
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
Description: Invalid 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: PRECONDITION
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
instructions:
|
|
17
|
+
- The utility server is configured with active control with opModExpLimW / opModImpLimW = 200% of the DER's rated active power, responseRequired = 03, and replyTo set to the response endpoint on the test utility server.
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- EndDevice
|
|
23
|
+
- DERControl
|
|
24
|
+
checks:
|
|
25
|
+
- type: end-device
|
|
26
|
+
parameters:
|
|
27
|
+
matches_client: true
|
|
28
|
+
- type: der-control
|
|
29
|
+
parameters:
|
|
30
|
+
minimum_count: 1
|
|
31
|
+
maximum_count: 1
|
|
32
|
+
opModExpLimW: $(setMaxW * 2)
|
|
33
|
+
opModImpLimW: $(setMaxW * 2)
|
|
34
|
+
responseRequired: 3
|
|
35
|
+
event_status: 1 # Active
|
|
36
|
+
# replyTo should also be set but this check is implicit in later communications
|
|
37
|
+
|
|
38
|
+
- id: (1) Malformed response - mrid doesnt exist # Expects 4XX response
|
|
39
|
+
action:
|
|
40
|
+
type: send-malformed-response
|
|
41
|
+
parameters:
|
|
42
|
+
mrid_unknown: True
|
|
43
|
+
endDeviceLFDI_unknown: False
|
|
44
|
+
response_invalid: False
|
|
45
|
+
|
|
46
|
+
- id: (2) Malformed response - lfdi doesnt exist # Expects 4XX response
|
|
47
|
+
action:
|
|
48
|
+
type: send-malformed-response
|
|
49
|
+
parameters:
|
|
50
|
+
mrid_unknown: False
|
|
51
|
+
endDeviceLFDI_unknown: True
|
|
52
|
+
response_invalid: False
|
|
53
|
+
|
|
54
|
+
- id: (3) Malformed response - lfdi doesnt exist # Expects 4XX response
|
|
55
|
+
action:
|
|
56
|
+
type: send-malformed-response
|
|
57
|
+
parameters:
|
|
58
|
+
mrid_unknown: False
|
|
59
|
+
endDeviceLFDI_unknown: False
|
|
60
|
+
response_invalid: True
|
|
61
|
+
|
|
62
|
+
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
Description: Discovery Rejecting In-Band Registration
|
|
2
|
+
Category: Registration
|
|
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 (or rerun S-ALL-02 / S-ALL-03).
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- DeviceCapability
|
|
23
|
+
- Time
|
|
24
|
+
- MirrorUsagePointList
|
|
25
|
+
- EndDevice
|
|
26
|
+
- DER
|
|
27
|
+
checks:
|
|
28
|
+
- type: end-device # This will be the check that will block UNTIL there is an existing EndDevice registration
|
|
29
|
+
parameters:
|
|
30
|
+
matches_client: true
|
|
31
|
+
|
|
32
|
+
- id: REGISTER AGAIN
|
|
33
|
+
action:
|
|
34
|
+
type: insert-end-device
|
|
35
|
+
parameters:
|
|
36
|
+
expect_rejection: true
|
|
37
|
+
checks:
|
|
38
|
+
- type: end-device
|
|
39
|
+
parameters:
|
|
40
|
+
matches_client: true
|
|
41
|
+
|
|
42
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
Description: Incorrect Connection Point Registration
|
|
2
|
+
Category: Registration
|
|
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 (or rerun S-ALL-02 / S-ALL-03).
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- DeviceCapability
|
|
23
|
+
- Time
|
|
24
|
+
- MirrorUsagePointList
|
|
25
|
+
- EndDevice
|
|
26
|
+
- DER
|
|
27
|
+
checks:
|
|
28
|
+
- type: end-device # This will be the check that will block UNTIL there is an existing EndDevice registration
|
|
29
|
+
parameters:
|
|
30
|
+
matches_client: true
|
|
31
|
+
|
|
32
|
+
- id: SEND BAD CONNECTION POINT ID
|
|
33
|
+
action:
|
|
34
|
+
type: upsert-connection-point
|
|
35
|
+
parameters:
|
|
36
|
+
connectionPointId: NOTAVALIDID
|
|
37
|
+
expect_rejection: true
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
Description: Connection Point Registration
|
|
2
|
+
Category: Registration
|
|
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 (or rerun S-ALL-02 / S-ALL-03).
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- DeviceCapability
|
|
23
|
+
- Time
|
|
24
|
+
- MirrorUsagePointList
|
|
25
|
+
- EndDevice
|
|
26
|
+
- DER
|
|
27
|
+
checks:
|
|
28
|
+
- type: end-device # This will be the check that will block UNTIL there is an existing EndDevice registration
|
|
29
|
+
parameters:
|
|
30
|
+
matches_client: true
|
|
31
|
+
- type: discovered
|
|
32
|
+
parameters:
|
|
33
|
+
resources:
|
|
34
|
+
- EndDevice
|
|
35
|
+
links:
|
|
36
|
+
- ConnectionPoint
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
- id: SEND CONNECTION POINT ID
|
|
40
|
+
action:
|
|
41
|
+
type: upsert-connection-point
|
|
42
|
+
parameters:
|
|
43
|
+
connectionPointId: "1234567890" # A valid NMI (in the testing range)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
Description: Client Registration and PIN Validation
|
|
2
|
+
Category: Registration
|
|
3
|
+
Classes:
|
|
4
|
+
- A
|
|
5
|
+
|
|
6
|
+
TargetVersions:
|
|
7
|
+
- v1.2
|
|
8
|
+
|
|
9
|
+
Preconditions:
|
|
10
|
+
required_clients:
|
|
11
|
+
- id: client
|
|
12
|
+
|
|
13
|
+
Steps:
|
|
14
|
+
- id: MATCH PIN
|
|
15
|
+
repeat_until_pass: true
|
|
16
|
+
instructions:
|
|
17
|
+
- Create an EndDevice (with RegistrationLink) registration for client (or rerun S-ALL-02 / S-ALL-03).
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- Registration
|
|
23
|
+
checks:
|
|
24
|
+
- type: end-device # This will be the check that will block UNTIL there is an existing EndDevice registration
|
|
25
|
+
parameters:
|
|
26
|
+
matches_client: true
|
|
27
|
+
matches_pin: true
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
Description: S-OPT-05 Update Telemetry Post Rates
|
|
2
|
+
Category: Monitoring
|
|
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
|
+
- The utility server shall be configured to change all default MirrorUsagePoint post-rates for the test client from 60s to 300s.
|
|
18
|
+
action:
|
|
19
|
+
type: discovery
|
|
20
|
+
parameters:
|
|
21
|
+
resources:
|
|
22
|
+
- EndDevice
|
|
23
|
+
- DER
|
|
24
|
+
- MirrorUsagePoint
|
|
25
|
+
checks:
|
|
26
|
+
- type: end-device
|
|
27
|
+
parameters:
|
|
28
|
+
matches_client: true
|
|
29
|
+
- type: discovered
|
|
30
|
+
- type: mirror-usage-point
|
|
31
|
+
parameters:
|
|
32
|
+
matches: True
|
|
33
|
+
post_rate_seconds: 300
|