15
15
local test = require " integration_test"
16
16
local capabilities = require " st.capabilities"
17
17
local t_utils = require " integration_test.utils"
18
+ local uint32 = require " st.matter.data_types.Uint32"
18
19
19
20
local clusters = require " st.matter.clusters"
20
21
@@ -42,6 +43,7 @@ local mock_device = test.mock_device.build_test_matter_device({
42
43
clusters = {
43
44
{ cluster_id = clusters .ElectricalEnergyMeasurement .ID , cluster_type = " SERVER" , feature_map = 14 , },
44
45
{ cluster_id = clusters .ElectricalPowerMeasurement .ID , cluster_type = " SERVER" , feature_map = 0 , },
46
+ { cluster_id = clusters .PowerTopology .ID , cluster_type = " SERVER" , feature_map = 4 , }, -- SET_TOPOLOGY
45
47
},
46
48
device_types = {
47
49
{ device_type_id = 0x0510 , device_type_revision = 1 }, -- Electrical Sensor
@@ -51,10 +53,30 @@ local mock_device = test.mock_device.build_test_matter_device({
51
53
endpoint_id = 2 ,
52
54
clusters = {
53
55
{ cluster_id = clusters .OnOff .ID , cluster_type = " SERVER" , cluster_revision = 1 , feature_map = 0 , },
54
- {cluster_id = clusters .LevelControl .ID , cluster_type = " SERVER" , feature_map = 2 }
56
+ { cluster_id = clusters .LevelControl .ID , cluster_type = " SERVER" , feature_map = 2 },
55
57
},
56
58
device_types = {
57
- { device_type_id = 0x010A , device_type_revision = 1 } -- OnOff Plug
59
+ { device_type_id = 0x010B , device_type_revision = 1 }, -- OnOff Dimmable Plug
60
+ }
61
+ },
62
+ {
63
+ endpoint_id = 3 ,
64
+ clusters = {
65
+ { cluster_id = clusters .ElectricalEnergyMeasurement .ID , cluster_type = " SERVER" , feature_map = 14 , },
66
+ { cluster_id = clusters .PowerTopology .ID , cluster_type = " SERVER" , feature_map = 4 , }, -- SET_TOPOLOGY
67
+ },
68
+ device_types = {
69
+ { device_type_id = 0x0510 , device_type_revision = 1 }, -- Electrical Sensor
70
+ }
71
+ },
72
+ {
73
+ endpoint_id = 4 ,
74
+ clusters = {
75
+ { cluster_id = clusters .OnOff .ID , cluster_type = " SERVER" , cluster_revision = 1 , feature_map = 0 , },
76
+ { cluster_id = clusters .LevelControl .ID , cluster_type = " SERVER" , feature_map = 2 },
77
+ },
78
+ device_types = {
79
+ { device_type_id = 0x010B , device_type_revision = 1 }, -- OnOff Dimmable Plug
58
80
}
59
81
},
60
82
},
@@ -80,16 +102,20 @@ local mock_device_periodic = test.mock_device.build_test_matter_device({
80
102
{
81
103
endpoint_id = 1 ,
82
104
clusters = {
105
+ { cluster_id = clusters .OnOff .ID , cluster_type = " SERVER" , cluster_revision = 1 , feature_map = 0 , },
83
106
{ cluster_id = clusters .ElectricalEnergyMeasurement .ID , cluster_type = " SERVER" , feature_map = 10 , },
107
+ { cluster_id = clusters .PowerTopology .ID , cluster_type = " SERVER" , feature_map = 4 , } -- SET_TOPOLOGY
84
108
},
85
109
device_types = {
86
- { device_type_id = 0x0510 , device_type_revision = 1 } -- Electrical Sensor
110
+ { device_type_id = 0x010A , device_type_revision = 1 }, -- OnOff Plug
111
+ { device_type_id = 0x0510 , device_type_revision = 1 }, -- Electrical Sensor
87
112
}
88
113
},
89
114
},
90
115
})
91
116
92
117
local subscribed_attributes_periodic = {
118
+ clusters .OnOff .attributes .OnOff ,
93
119
clusters .ElectricalEnergyMeasurement .attributes .PeriodicEnergyImported ,
94
120
clusters .ElectricalEnergyMeasurement .attributes .CumulativeEnergyImported ,
95
121
}
@@ -643,19 +669,52 @@ test.register_coroutine_test(
643
669
test .register_coroutine_test (
644
670
" Test profile change on init for Electrical Sensor device type" ,
645
671
function ()
672
+ test .socket .device_lifecycle :__queue_receive ({ mock_device .id , " added" })
673
+ local read_req = clusters .PowerTopology .attributes .AvailableEndpoints :read (mock_device .id , 1 )
674
+ read_req :merge (clusters .PowerTopology .attributes .AvailableEndpoints :read (mock_device .id , 3 ))
675
+ test .socket .matter :__expect_send ({ mock_device .id , read_req })
676
+ local subscribe_request = subscribed_attributes [1 ]:subscribe (mock_device )
677
+ for i , cluster in ipairs (subscribed_attributes ) do
678
+ if i > 1 then
679
+ subscribe_request :merge (cluster :subscribe (mock_device ))
680
+ end
681
+ end
682
+ test .socket .matter :__expect_send ({ mock_device .id , subscribe_request })
646
683
test .socket .device_lifecycle :__queue_receive ({ mock_device .id , " doConfigure" })
647
- mock_device :expect_metadata_update ({ profile = " plug-level-power-energy-powerConsumption" })
648
684
mock_device :expect_metadata_update ({ provisioning_state = " PROVISIONED" })
685
+ test .wait_for_events ()
686
+ test .socket .matter :__queue_receive ({ mock_device .id , clusters .PowerTopology .attributes .AvailableEndpoints :build_test_report_data (mock_device , 1 , {uint32 (2 )})})
687
+ test .socket .matter :__queue_receive ({ mock_device .id , clusters .PowerTopology .attributes .AvailableEndpoints :build_test_report_data (mock_device , 3 , {uint32 (4 )})})
688
+ mock_device :expect_metadata_update ({ profile = " plug-level-power-energy-powerConsumption" })
689
+ mock_device :expect_device_create ({
690
+ type = " EDGE_CHILD" ,
691
+ label = " nil 2" ,
692
+ profile = " plug-level-energy-powerConsumption" ,
693
+ parent_device_id = mock_device .id ,
694
+ parent_assigned_child_key = string.format (" %d" , 4 )
695
+ })
649
696
end ,
650
697
{ test_init = test_init }
651
698
)
652
699
653
700
test .register_coroutine_test (
654
701
" Test profile change on init for only Periodic Electrical Sensor device type" ,
655
702
function ()
703
+ test .socket .device_lifecycle :__queue_receive ({ mock_device_periodic .id , " added" })
704
+ local read_req = clusters .PowerTopology .attributes .AvailableEndpoints :read (mock_device_periodic .id , 1 )
705
+ test .socket .matter :__expect_send ({ mock_device_periodic .id , read_req })
706
+ local subscribe_request = subscribed_attributes_periodic [1 ]:subscribe (mock_device_periodic )
707
+ for i , cluster in ipairs (subscribed_attributes_periodic ) do
708
+ if i > 1 then
709
+ subscribe_request :merge (cluster :subscribe (mock_device_periodic ))
710
+ end
711
+ end
712
+ test .socket .matter :__expect_send ({ mock_device_periodic .id , subscribe_request })
656
713
test .socket .device_lifecycle :__queue_receive ({ mock_device_periodic .id , " doConfigure" })
657
- mock_device_periodic :expect_metadata_update ({ profile = " plug-energy-powerConsumption" })
658
714
mock_device_periodic :expect_metadata_update ({ provisioning_state = " PROVISIONED" })
715
+ test .wait_for_events ()
716
+ test .socket .matter :__queue_receive ({ mock_device_periodic .id , clusters .PowerTopology .attributes .AvailableEndpoints :build_test_report_data (mock_device_periodic , 1 , {uint32 (1 )})})
717
+ mock_device_periodic :expect_metadata_update ({ profile = " plug-energy-powerConsumption" })
659
718
end ,
660
719
{ test_init = test_init_periodic }
661
720
)
@@ -692,7 +751,7 @@ test.register_message_test(
692
751
direction = " receive" ,
693
752
message = {
694
753
mock_device .id ,
695
- clusters .LevelControl .server .commands .MoveToLevelWithOnOff :build_test_command_response (mock_device , 2 )
754
+ clusters .LevelControl .server .commands .MoveToLevelWithOnOff :build_test_command_response (mock_device , 1 )
696
755
}
697
756
},
698
757
{
0 commit comments