39
39
invoke_call_count = 0
40
40
event_call_count = 0
41
41
42
+
42
43
def dynamic_invoke_return (* args , ** argv ):
43
44
global invoke_call_count
44
45
invoke_call_count += 1
@@ -49,54 +50,60 @@ def dynamic_invoke_return(*args, **argv):
49
50
discriminator = 2222 , iterations = 10000 , salt = base64 .b64encode (bytes ('SaltyMcSalterson' , 'utf-8' )))
50
51
51
52
print (f'invoke call { invoke_call_count } ' )
52
- if invoke_call_count == 1 : # Commission node with no prior request, return failure - step 5
53
+ if invoke_call_count == 1 : # Commission node with no prior request, return failure - step 5
53
54
raise InteractionModelError (status = Status .Failure )
54
- elif invoke_call_count == 2 : # Commission node over pase - return unsupported access - step 7
55
+ elif invoke_call_count == 2 : # Commission node over pase - return unsupported access - step 7
55
56
raise InteractionModelError (status = Status .UnsupportedAccess )
56
- elif invoke_call_count == 3 : # request commissioning approval over pase - return unsupported access - step 8
57
+ elif invoke_call_count == 3 : # request commissioning approval over pase - return unsupported access - step 8
57
58
raise InteractionModelError (status = Status .UnsupportedAccess )
58
- elif invoke_call_count == 4 : # good RevokeCommissioning over CASE with bad vid - step 9
59
+ elif invoke_call_count == 4 : # good RevokeCommissioning over CASE with bad vid - step 9
59
60
return None
60
- elif invoke_call_count == 5 : # good RequestCommissioningApproval over CASE with bad vid - step 10
61
+ elif invoke_call_count == 5 : # good RequestCommissioningApproval over CASE with bad vid - step 10
61
62
return None
62
- elif invoke_call_count == 6 : # CommissionNode with bad request id - step 14
63
+ elif invoke_call_count == 6 : # CommissionNode with bad request id - step 14
63
64
raise InteractionModelError (status = Status .Failure )
64
- elif invoke_call_count == 7 : # CommissionNode with bad timeout (low) - step 15
65
+ elif invoke_call_count == 7 : # CommissionNode with bad timeout (low) - step 15
65
66
raise InteractionModelError (status = Status .Failure )
66
- elif invoke_call_count == 8 : # CommissionNode with bad timeout (high) - step 16
67
+ elif invoke_call_count == 8 : # CommissionNode with bad timeout (high) - step 16
67
68
raise InteractionModelError (status = Status .Failure )
68
- elif invoke_call_count == 9 : # CommissionNode - step 17
69
+ elif invoke_call_count == 9 : # CommissionNode - step 17
69
70
# passcode 20202024
70
71
return reverse_open
71
- elif invoke_call_count == 10 : # RequestCommissioningApproval with good vid - step 22
72
+ elif invoke_call_count == 10 : # RequestCommissioningApproval with good vid - step 22
72
73
return None
73
- elif invoke_call_count == 11 : # CommissionNode - step 25
74
+ elif invoke_call_count == 11 : # CommissionNode - step 25
74
75
# passcode 20202024
75
76
return reverse_open
76
77
else :
77
78
raise InteractionModelError (Status .Failure )
78
79
80
+
79
81
def dynamic_event_return (* args , ** argv ):
80
82
global event_call_count
81
83
event_call_count += 1
82
84
83
- if event_call_count == 1 : # reading events, start empty - no events
85
+ if event_call_count == 1 : # reading events, start empty - no events
84
86
return []
85
- elif event_call_count == 2 : # read event with filter - expect empty
87
+ elif event_call_count == 2 : # read event with filter - expect empty
86
88
return []
87
- elif event_call_count == 3 : # returned event
88
- header = Attribute .EventHeader (EndpointId = 0 , ClusterId = Clusters .CommissionerControl .id , EventId = Clusters .CommissionerControl .Events .CommissioningRequestResult .event_id , EventNumber = 1 )
89
- data = Clusters .CommissionerControl .Events .CommissioningRequestResult (requestId = 0x1234567887654321 , clientNodeId = 112233 , statusCode = 0 )
89
+ elif event_call_count == 3 : # returned event
90
+ header = Attribute .EventHeader (EndpointId = 0 , ClusterId = Clusters .CommissionerControl .id ,
91
+ EventId = Clusters .CommissionerControl .Events .CommissioningRequestResult .event_id , EventNumber = 1 )
92
+ data = Clusters .CommissionerControl .Events .CommissioningRequestResult (
93
+ requestId = 0x1234567887654321 , clientNodeId = 112233 , statusCode = 0 )
90
94
result = Attribute .EventReadResult (Header = header , Status = Status .Success , Data = data )
91
95
return [result ]
92
- elif event_call_count == 4 : # returned event with new request
93
- header = Attribute .EventHeader (EndpointId = 0 , ClusterId = Clusters .CommissionerControl .id , EventId = Clusters .CommissionerControl .Events .CommissioningRequestResult .event_id , EventNumber = 1 )
94
- data = Clusters .CommissionerControl .Events .CommissioningRequestResult (requestId = 0x1234567812345678 , clientNodeId = 112233 , statusCode = 0 )
96
+ elif event_call_count == 4 : # returned event with new request
97
+ header = Attribute .EventHeader (EndpointId = 0 , ClusterId = Clusters .CommissionerControl .id ,
98
+ EventId = Clusters .CommissionerControl .Events .CommissioningRequestResult .event_id , EventNumber = 1 )
99
+ data = Clusters .CommissionerControl .Events .CommissioningRequestResult (
100
+ requestId = 0x1234567812345678 , clientNodeId = 112233 , statusCode = 0 )
95
101
result = Attribute .EventReadResult (Header = header , Status = Status .Success , Data = data )
96
102
return [result ]
97
103
else :
98
104
raise InteractionModelError (Status .Failure )
99
105
106
+
100
107
def wildcard () -> Attribute .AsyncReadTransaction .ReadResponse :
101
108
cc = Clusters .CommissionerControl
102
109
ei = Clusters .EcosystemInformation
@@ -105,22 +112,27 @@ def wildcard() -> Attribute.AsyncReadTransaction.ReadResponse:
105
112
106
113
# EP1 is aggregator device type with a commissioner control cluster
107
114
# children - EP2 type bridged node endpoint, ecosystem information, bridged device basic information. Should also have and admin commissioning, but I don't need it for this test.
108
- desc_ep1 = {desc .Attributes .PartsList : [2 ], desc .Attributes .ServerList : [cc .id ], desc .Attributes .DeviceTypeList : [desc .Structs .DeviceTypeStruct (deviceType = 0x000E , revision = 2 )]}
109
- desc_ep2 = {desc .Attributes .ServerList : [bdbi .id , ei .id ], desc .Attributes .DeviceTypeList : [desc .Structs .DeviceTypeStruct (deviceType = 0x0013 , revision = 3 )]}
115
+ desc_ep1 = {desc .Attributes .PartsList : [2 ], desc .Attributes .ServerList : [
116
+ cc .id ], desc .Attributes .DeviceTypeList : [desc .Structs .DeviceTypeStruct (deviceType = 0x000E , revision = 2 )]}
117
+ desc_ep2 = {desc .Attributes .ServerList : [bdbi .id , ei .id ], desc .Attributes .DeviceTypeList : [
118
+ desc .Structs .DeviceTypeStruct (deviceType = 0x0013 , revision = 3 )]}
110
119
111
120
# I'm not filling anything in here, because I don't care. I just care that the cluster exists.
112
- ei_attrs = {ei .Attributes .AttributeList :[ei .Attributes .DeviceDirectory .attribute_id , ei .Attributes .LocationDirectory .attribute_id ], ei .Attributes .DeviceDirectory :[], ei .Attributes .LocationDirectory :[]}
121
+ ei_attrs = {ei .Attributes .AttributeList : [ei .Attributes .DeviceDirectory .attribute_id ,
122
+ ei .Attributes .LocationDirectory .attribute_id ], ei .Attributes .DeviceDirectory : [], ei .Attributes .LocationDirectory : []}
113
123
114
124
# This cluster just needs to exist, so I'm just going to throw on the mandatory items for now.
115
- bdbi_attrs = {bdbi .Attributes .AttributeList :[bdbi .Attributes .Reachable .attribute_id , bdbi .Attributes .UniqueID .attribute_id ], bdbi .Attributes .Reachable :True , bdbi .Attributes .UniqueID :'something' }
125
+ bdbi_attrs = {bdbi .Attributes .AttributeList : [bdbi .Attributes .Reachable .attribute_id ,
126
+ bdbi .Attributes .UniqueID .attribute_id ], bdbi .Attributes .Reachable : True , bdbi .Attributes .UniqueID : 'something' }
116
127
117
- cc_attrs = {cc .Attributes .AttributeList :[cc .Attributes .SupportedDeviceCategories ], cc .Attributes .AcceptedCommandList :[cc .Commands .RequestCommissioningApproval , cc .Commands .CommissionNode ],
118
- cc .Attributes .GeneratedCommandList :[cc .Commands .RequestCommissioningApproval ], cc .Attributes .SupportedDeviceCategories :1 }
128
+ cc_attrs = {cc .Attributes .AttributeList : [cc .Attributes .SupportedDeviceCategories ], cc .Attributes .AcceptedCommandList : [cc .Commands .RequestCommissioningApproval , cc .Commands .CommissionNode ],
129
+ cc .Attributes .GeneratedCommandList : [cc .Commands .RequestCommissioningApproval ], cc .Attributes .SupportedDeviceCategories : 1 }
119
130
120
131
resp = Attribute .AsyncReadTransaction .ReadResponse ({}, [], {})
121
- resp .attributes = {1 : {desc : desc_ep1 , cc :cc_attrs }, 2 :{desc :desc_ep2 , ei :ei_attrs , bdbi :bdbi_attrs }}
132
+ resp .attributes = {1 : {desc : desc_ep1 , cc : cc_attrs }, 2 : {desc : desc_ep2 , ei : ei_attrs , bdbi : bdbi_attrs }}
122
133
return resp
123
134
135
+
124
136
class MyMock (MockTestRunner ):
125
137
# TODO consolidate with above
126
138
def run_test_with_mock (self , dynamic_invoke_return : typing .Callable , dynamic_event_return : typing .Callable , read_cache : Attribute .AsyncReadTransaction .ReadResponse , hooks = None ):
@@ -135,17 +147,19 @@ def run_test_with_mock(self, dynamic_invoke_return: typing.Callable, dynamic_eve
135
147
136
148
return run_tests_no_exit (self .test_class , self .config , hooks , self .default_controller , self .stack )
137
149
150
+
138
151
def main ():
139
- root = os .path .abspath (os .path .join (pathlib .Path (__file__ ).resolve ().parent , '..' ,'..' ,'..' ))
152
+ root = os .path .abspath (os .path .join (pathlib .Path (__file__ ).resolve ().parent , '..' , '..' , '..' ))
140
153
print (f'root = { root } ' )
141
154
paa_path = get_default_paa_trust_store (root )
142
155
print (f'paa = { paa_path } ' )
143
156
144
- pics = {"PICS_SDK_CI_ONLY" : True }
157
+ pics = {"PICS_SDK_CI_ONLY" : True }
145
158
test_runner = MyMock ('TC_CCTRL_2_2' , 'TC_CCTRL_2_2' , 'test_TC_CCTRL_2_2' , 1 , paa_trust_store_path = paa_path , pics = pics )
146
159
147
160
test_runner .run_test_with_mock (dynamic_invoke_return , dynamic_event_return , wildcard ())
148
161
test_runner .Shutdown ()
149
162
163
+
150
164
if __name__ == "__main__" :
151
165
sys .exit (main ())
0 commit comments