@@ -16,6 +16,7 @@ local test = require "integration_test"
16
16
local capabilities = require " st.capabilities"
17
17
local clusters = require " st.matter.clusters"
18
18
local t_utils = require " integration_test.utils"
19
+ local uint32 = require " st.matter.data_types.Uint32"
19
20
local version = require " version"
20
21
21
22
if version .api < 11 then
@@ -44,6 +45,7 @@ local mock_device = test.mock_device.build_test_matter_device({
44
45
clusters = {
45
46
{ cluster_id = clusters .ElectricalEnergyMeasurement .ID , cluster_type = " SERVER" , feature_map = 14 , },
46
47
{ cluster_id = clusters .ElectricalPowerMeasurement .ID , cluster_type = " SERVER" , feature_map = 0 , },
48
+ { cluster_id = clusters .PowerTopology .ID , cluster_type = " SERVER" , feature_map = 4 , }, -- SET_TOPOLOGY
47
49
},
48
50
device_types = {
49
51
{ device_type_id = 0x0510 , device_type_revision = 1 }, -- Electrical Sensor
@@ -56,9 +58,29 @@ local mock_device = test.mock_device.build_test_matter_device({
56
58
{cluster_id = clusters .LevelControl .ID , cluster_type = " SERVER" , feature_map = 2 }
57
59
},
58
60
device_types = {
59
- { device_type_id = 0x010A , device_type_revision = 1 } -- OnOff Plug
61
+ { device_type_id = 0x010B , device_type_revision = 1 }, -- OnOff Dimmable Plug
60
62
}
61
- }
63
+ },
64
+ {
65
+ endpoint_id = 3 ,
66
+ clusters = {
67
+ { cluster_id = clusters .ElectricalEnergyMeasurement .ID , cluster_type = " SERVER" , feature_map = 14 , },
68
+ { cluster_id = clusters .PowerTopology .ID , cluster_type = " SERVER" , feature_map = 4 , }, -- SET_TOPOLOGY
69
+ },
70
+ device_types = {
71
+ { device_type_id = 0x0510 , device_type_revision = 1 }, -- Electrical Sensor
72
+ }
73
+ },
74
+ {
75
+ endpoint_id = 4 ,
76
+ clusters = {
77
+ { cluster_id = clusters .OnOff .ID , cluster_type = " SERVER" , cluster_revision = 1 , feature_map = 0 , },
78
+ { cluster_id = clusters .LevelControl .ID , cluster_type = " SERVER" , feature_map = 2 },
79
+ },
80
+ device_types = {
81
+ { device_type_id = 0x010B , device_type_revision = 1 }, -- OnOff Dimmable Plug }
82
+ }
83
+ },
62
84
},
63
85
})
64
86
@@ -82,16 +104,20 @@ local mock_device_periodic = test.mock_device.build_test_matter_device({
82
104
{
83
105
endpoint_id = 1 ,
84
106
clusters = {
107
+ { cluster_id = clusters .OnOff .ID , cluster_type = " SERVER" , cluster_revision = 1 , feature_map = 0 , },
85
108
{ cluster_id = clusters .ElectricalEnergyMeasurement .ID , cluster_type = " SERVER" , feature_map = 10 , },
109
+ { cluster_id = clusters .PowerTopology .ID , cluster_type = " SERVER" , feature_map = 4 , } -- SET_TOPOLOGY
86
110
},
87
111
device_types = {
88
- { device_type_id = 0x0510 , device_type_revision = 1 } -- Electrical Sensor
112
+ { device_type_id = 0x010A , device_type_revision = 1 }, -- OnOff Plug
113
+ { device_type_id = 0x0510 , device_type_revision = 1 }, -- Electrical Sensor
89
114
}
90
115
},
91
116
},
92
117
})
93
118
94
119
local subscribed_attributes_periodic = {
120
+ clusters .OnOff .attributes .OnOff ,
95
121
clusters .ElectricalEnergyMeasurement .attributes .PeriodicEnergyImported ,
96
122
clusters .ElectricalEnergyMeasurement .attributes .CumulativeEnergyImported ,
97
123
}
@@ -653,19 +679,52 @@ test.register_coroutine_test(
653
679
test .register_coroutine_test (
654
680
" Test profile change on init for Electrical Sensor device type" ,
655
681
function ()
682
+ test .socket .device_lifecycle :__queue_receive ({ mock_device .id , " added" })
683
+ local read_req = clusters .PowerTopology .attributes .AvailableEndpoints :read (mock_device .id , 1 )
684
+ read_req :merge (clusters .PowerTopology .attributes .AvailableEndpoints :read (mock_device .id , 3 ))
685
+ test .socket .matter :__expect_send ({ mock_device .id , read_req })
686
+ local subscribe_request = subscribed_attributes [1 ]:subscribe (mock_device )
687
+ for i , cluster in ipairs (subscribed_attributes ) do
688
+ if i > 1 then
689
+ subscribe_request :merge (cluster :subscribe (mock_device ))
690
+ end
691
+ end
692
+ test .socket .matter :__expect_send ({ mock_device .id , subscribe_request })
656
693
test .socket .device_lifecycle :__queue_receive ({ mock_device .id , " doConfigure" })
657
- mock_device :expect_metadata_update ({ profile = " plug-level-power-energy-powerConsumption" })
658
694
mock_device :expect_metadata_update ({ provisioning_state = " PROVISIONED" })
695
+ test .wait_for_events ()
696
+ test .socket .matter :__queue_receive ({ mock_device .id , clusters .PowerTopology .attributes .AvailableEndpoints :build_test_report_data (mock_device , 1 , {uint32 (2 )})})
697
+ test .socket .matter :__queue_receive ({ mock_device .id , clusters .PowerTopology .attributes .AvailableEndpoints :build_test_report_data (mock_device , 3 , {uint32 (4 )})})
698
+ mock_device :expect_metadata_update ({ profile = " plug-level-power-energy-powerConsumption" })
699
+ mock_device :expect_device_create ({
700
+ type = " EDGE_CHILD" ,
701
+ label = " nil 2" ,
702
+ profile = " plug-level-energy-powerConsumption" ,
703
+ parent_device_id = mock_device .id ,
704
+ parent_assigned_child_key = string.format (" %d" , 4 )
705
+ })
659
706
end ,
660
707
{ test_init = test_init }
661
708
)
662
709
663
710
test .register_coroutine_test (
664
711
" Test profile change on init for only Periodic Electrical Sensor device type" ,
665
712
function ()
713
+ test .socket .device_lifecycle :__queue_receive ({ mock_device_periodic .id , " added" })
714
+ local read_req = clusters .PowerTopology .attributes .AvailableEndpoints :read (mock_device_periodic .id , 1 )
715
+ test .socket .matter :__expect_send ({ mock_device_periodic .id , read_req })
716
+ local subscribe_request = subscribed_attributes_periodic [1 ]:subscribe (mock_device_periodic )
717
+ for i , cluster in ipairs (subscribed_attributes_periodic ) do
718
+ if i > 1 then
719
+ subscribe_request :merge (cluster :subscribe (mock_device_periodic ))
720
+ end
721
+ end
722
+ test .socket .matter :__expect_send ({ mock_device_periodic .id , subscribe_request })
666
723
test .socket .device_lifecycle :__queue_receive ({ mock_device_periodic .id , " doConfigure" })
667
- mock_device_periodic :expect_metadata_update ({ profile = " plug-energy-powerConsumption" })
668
724
mock_device_periodic :expect_metadata_update ({ provisioning_state = " PROVISIONED" })
725
+ test .wait_for_events ()
726
+ test .socket .matter :__queue_receive ({ mock_device_periodic .id , clusters .PowerTopology .attributes .AvailableEndpoints :build_test_report_data (mock_device_periodic , 1 , {uint32 (1 )})})
727
+ mock_device_periodic :expect_metadata_update ({ profile = " plug-energy-powerConsumption" })
669
728
end ,
670
729
{ test_init = test_init_periodic }
671
730
)
0 commit comments