Skip to content

CHAD-14927: Driver fixes for lifecycle changes #2081

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -74,6 +74,7 @@ local CLUSTER_SUBSCRIBE_LIST ={
}

local function test_init()
test.set_rpc_version(0)
local subscribe_request = CLUSTER_SUBSCRIBE_LIST[1]:subscribe(mock_device)
for i, clus in ipairs(CLUSTER_SUBSCRIBE_LIST) do
if i > 1 then subscribe_request:merge(clus:subscribe(mock_device)) end
Original file line number Diff line number Diff line change
@@ -74,13 +74,15 @@ local CLUSTER_SUBSCRIBE_LIST ={
}

local function test_init()
test.disable_startup_messages()
local subscribe_request = CLUSTER_SUBSCRIBE_LIST[1]:subscribe(mock_device)
for i, clus in ipairs(CLUSTER_SUBSCRIBE_LIST) do
if i > 1 then subscribe_request:merge(clus:subscribe(mock_device)) end
end
test.socket.matter:__expect_send({mock_device.id, subscribe_request})
test.mock_device.add_test_device(mock_device)
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" })
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" })
mock_device:expect_metadata_update({ profile = "4-button-battery" })
local device_info_copy = utils.deep_copy(mock_device.raw_st_data)
device_info_copy.profile.id = "4-buttons-battery"
Original file line number Diff line number Diff line change
@@ -67,13 +67,15 @@ local mock_device_no_battery_record = {
local mock_device_no_battery = test.mock_device.build_test_matter_device(mock_device_no_battery_record)

local function test_init()
test.disable_startup_messages()
local subscribe_request = clusters.DoorLock.attributes.LockState:subscribe(mock_device)
subscribe_request:merge(clusters.PowerSource.attributes.BatPercentRemaining:subscribe(mock_device))
subscribe_request:merge(clusters.DoorLock.events.DoorLockAlarm:subscribe(mock_device))
subscribe_request:merge(clusters.DoorLock.events.LockOperation:subscribe(mock_device))
subscribe_request:merge(clusters.DoorLock.events.LockUserChange:subscribe(mock_device))
test.socket["matter"]:__expect_send({mock_device.id, subscribe_request})
test.mock_device.add_test_device(mock_device)
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" })
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
mock_device:expect_metadata_update({ provisioning_state = "PROVISIONED" })
local read_attribute_list = clusters.PowerSource.attributes.AttributeList:read()
@@ -82,13 +84,15 @@ end
test.set_test_init_function(test_init)

local function test_init_no_battery()
test.disable_startup_messages()
local subscribe_request = clusters.DoorLock.attributes.LockState:subscribe(mock_device_no_battery)
subscribe_request:merge(clusters.PowerSource.attributes.BatPercentRemaining:subscribe(mock_device))
subscribe_request:merge(clusters.DoorLock.events.DoorLockAlarm:subscribe(mock_device_no_battery))
subscribe_request:merge(clusters.DoorLock.events.LockOperation:subscribe(mock_device_no_battery))
subscribe_request:merge(clusters.DoorLock.events.LockUserChange:subscribe(mock_device_no_battery))
test.socket["matter"]:__expect_send({mock_device_no_battery.id, subscribe_request})
test.mock_device.add_test_device(mock_device_no_battery)
test.socket.device_lifecycle:__queue_receive({ mock_device_no_battery.id, "init" })
test.socket.device_lifecycle:__queue_receive({ mock_device_no_battery.id, "doConfigure" })
mock_device_no_battery:expect_metadata_update({ profile = "base-lock-nobattery" })
mock_device_no_battery:expect_metadata_update({ provisioning_state = "PROVISIONED" })
Original file line number Diff line number Diff line change
@@ -56,6 +56,7 @@ local cluster_subscribe_list_humidity_battery = {
}

local function test_init()
test.disable_startup_messages()
local subscribe_request_humidity_battery = cluster_subscribe_list_humidity_battery[1]:subscribe(mock_device_humidity_battery)
for i, cluster in ipairs(cluster_subscribe_list_humidity_battery) do
if i > 1 then
@@ -67,6 +68,7 @@ local function test_init()
test.mock_device.add_test_device(mock_device_humidity_battery)

test.socket.device_lifecycle:__queue_receive({ mock_device_humidity_battery.id, "added" })
test.socket.device_lifecycle:__queue_receive({ mock_device_humidity_battery.id, "init" })
local read_attribute_list = clusters.PowerSource.attributes.AttributeList:read()
test.socket.matter:__expect_send({mock_device_humidity_battery.id, read_attribute_list})
test.socket.device_lifecycle:__queue_receive({ mock_device_humidity_battery.id, "doConfigure" })
Original file line number Diff line number Diff line change
@@ -125,6 +125,7 @@ local cluster_subscribe_list_temp_humidity = {
}

local function test_init_humidity_battery()
test.disable_startup_messages()
local subscribe_request_humidity_battery = cluster_subscribe_list_humidity_battery[1]:subscribe(mock_device_humidity_battery)
for i, cluster in ipairs(cluster_subscribe_list_humidity_battery) do
if i > 1 then
@@ -136,13 +137,15 @@ local function test_init_humidity_battery()
test.mock_device.add_test_device(mock_device_humidity_battery)

test.socket.device_lifecycle:__queue_receive({ mock_device_humidity_battery.id, "added" })
test.socket.device_lifecycle:__queue_receive({ mock_device_humidity_battery.id, "init" })
test.socket.device_lifecycle:__queue_receive({ mock_device_humidity_battery.id, "doConfigure" })
mock_device_humidity_battery:expect_metadata_update({ provisioning_state = "PROVISIONED" })
local read_attribute_list = clusters.PowerSource.attributes.AttributeList:read()
test.socket.matter:__expect_send({mock_device_humidity_battery.id, read_attribute_list})
end

local function test_init_humidity_no_battery()
test.disable_startup_messages()
local subscribe_request_humidity_no_battery = cluster_subscribe_list_humidity_no_battery[1]:subscribe(mock_device_humidity_no_battery)
for i, cluster in ipairs(cluster_subscribe_list_humidity_no_battery) do
if i > 1 then
@@ -154,12 +157,14 @@ local function test_init_humidity_no_battery()
test.mock_device.add_test_device(mock_device_humidity_no_battery)

test.socket.device_lifecycle:__queue_receive({ mock_device_humidity_no_battery.id, "added" })
test.socket.device_lifecycle:__queue_receive({ mock_device_humidity_no_battery.id, "init" })
test.socket.device_lifecycle:__queue_receive({ mock_device_humidity_no_battery.id, "doConfigure" })
mock_device_humidity_no_battery:expect_metadata_update({ profile = "humidity" })
mock_device_humidity_no_battery:expect_metadata_update({ provisioning_state = "PROVISIONED" })
end

local function test_init_temp_humidity()
test.disable_startup_messages()
local subscribe_request_temp_humidity = cluster_subscribe_list_temp_humidity[1]:subscribe(mock_device_temp_humidity)
for i, cluster in ipairs(cluster_subscribe_list_temp_humidity) do
if i > 1 then
@@ -171,6 +176,7 @@ local function test_init_temp_humidity()
test.mock_device.add_test_device(mock_device_temp_humidity)

test.socket.device_lifecycle:__queue_receive({ mock_device_temp_humidity.id, "added" })
test.socket.device_lifecycle:__queue_receive({ mock_device_temp_humidity.id, "init" })
test.socket.device_lifecycle:__queue_receive({ mock_device_temp_humidity.id, "doConfigure" })
mock_device_temp_humidity:expect_metadata_update({ profile = "temperature-humidity" })
mock_device_temp_humidity:expect_metadata_update({ provisioning_state = "PROVISIONED" })
Original file line number Diff line number Diff line change
@@ -117,6 +117,7 @@ local function configure_buttons()
end

local function test_init()
test.disable_startup_messages()
local subscribe_request = CLUSTER_SUBSCRIBE_LIST[1]:subscribe(mock_device)
for i, clus in ipairs(CLUSTER_SUBSCRIBE_LIST) do
if i > 1 then subscribe_request:merge(clus:subscribe(mock_device)) end
@@ -127,6 +128,7 @@ local function test_init()
test.socket.matter:__expect_send({mock_device.id, subscribe_request})
test.mock_device.add_test_device(mock_device)
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" })
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" })
test.socket.matter:__expect_send({mock_device.id, subscribe_request})
local device_info_copy = utils.deep_copy(mock_device.raw_st_data)
device_info_copy.profile.id = "5-buttons-battery"
Original file line number Diff line number Diff line change
@@ -83,6 +83,7 @@ local device_desc = {
}

local test_init_common = function(device)
test.disable_startup_messages()
local cluster_subscribe_list = {
clusters.Thermostat.attributes.SystemMode,
clusters.Thermostat.attributes.ControlSequenceOfOperation,
@@ -109,6 +110,7 @@ local test_init_common = function(device)
end
test.socket.matter:__expect_send({ device.id, subscribe_request })
test.socket.device_lifecycle:__queue_receive({ device.id, "added" })
test.socket.device_lifecycle:__queue_receive({ device.id, "init" })
local read_request_on_added = {
clusters.Thermostat.attributes.ControlSequenceOfOperation,
clusters.FanControl.attributes.FanModeSequence,
@@ -181,6 +183,11 @@ test.register_message_test(
clusters.Thermostat.server.attributes.OccupiedHeatingSetpoint:build_test_report_data(mock_device, THERMOSTAT_ONE_EP, 40*100)
}
},
{
channel = "capability",
direction = "send",
message = mock_device:generate_test_message("thermostatOne", capabilities.thermostatHeatingSetpoint.heatingSetpointRange({unit="C", value={maximum=40.0, minimum=5.0, step=0.1}}))
},
{
channel = "capability",
direction = "send",
@@ -194,6 +201,11 @@ test.register_message_test(
clusters.Thermostat.server.attributes.OccupiedHeatingSetpoint:build_test_report_data(mock_device, THERMOSTAT_TWO_EP, 23*100)
}
},
{
channel = "capability",
direction = "send",
message = mock_device:generate_test_message("thermostatTwo", capabilities.thermostatHeatingSetpoint.heatingSetpointRange({unit="C", value={maximum=40.0, minimum=5.0, step=0.1}}))
},
{
channel = "capability",
direction = "send",
@@ -213,6 +225,11 @@ test.register_message_test(
clusters.Thermostat.server.attributes.OccupiedCoolingSetpoint:build_test_report_data(mock_device, THERMOSTAT_ONE_EP, 39*100)
}
},
{
channel = "capability",
direction = "send",
message = mock_device:generate_test_message("thermostatOne", capabilities.thermostatCoolingSetpoint.coolingSetpointRange({unit="C", value={maximum=40.0, minimum=5.0, step=0.1}}))
},
{
channel = "capability",
direction = "send",
@@ -226,6 +243,11 @@ test.register_message_test(
clusters.Thermostat.server.attributes.OccupiedCoolingSetpoint:build_test_report_data(mock_device, THERMOSTAT_TWO_EP, 19*100)
}
},
{
channel = "capability",
direction = "send",
message = mock_device:generate_test_message("thermostatTwo", capabilities.thermostatCoolingSetpoint.coolingSetpointRange({unit="C", value={maximum=40.0, minimum=5.0, step=0.1}}))
},
{
channel = "capability",
direction = "send",
Original file line number Diff line number Diff line change
@@ -70,15 +70,7 @@ local cluster_subscribe = {
}

local function test_init()
local subscribe_request= cluster_subscribe[1]:subscribe(mock_device)
for i, cluster in ipairs(cluster_subscribe) do
if i > 1 then
subscribe_request:merge(cluster:subscribe(mock_device))
end
end

test.socket.matter:__expect_send({mock_device.id, subscribe_request})
test.mock_device.add_test_device(mock_device)
test.disable_startup_messages()

test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" })
local read_req = clusters.Thermostat.attributes.ControlSequenceOfOperation:read()
@@ -89,6 +81,18 @@ local function test_init()
read_req:merge(clusters.Thermostat.attributes.AttributeList:read())
read_req:merge(clusters.PowerSource.attributes.AttributeList:read())
test.socket.matter:__expect_send({mock_device.id, read_req})

test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" })
local subscribe_request= cluster_subscribe[1]:subscribe(mock_device)
for i, cluster in ipairs(cluster_subscribe) do
if i > 1 then
subscribe_request:merge(cluster:subscribe(mock_device))
end
end

test.socket.matter:__expect_send({mock_device.id, subscribe_request})
test.mock_device.add_test_device(mock_device)

test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
mock_device:expect_metadata_update({ provisioning_state = "PROVISIONED" })
end
Original file line number Diff line number Diff line change
@@ -219,6 +219,11 @@ test.register_message_test(
clusters.Thermostat.server.attributes.OccupiedHeatingSetpoint:build_test_report_data(mock_device, 1, 40*100)
}
},
{
channel = "capability",
Copy link
Contributor

@ctowns ctowns Apr 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just for clarity - is this (among others) just included now that the RPC is defaulting to 9999, so these RPC dependent changes are now included? @nickolas-deboom

direction = "send",
message = mock_device:generate_test_message("main", capabilities.thermostatHeatingSetpoint.heatingSetpointRange({unit="C", value={maximum=40.0, minimum=5.0, step=0.1}}))
},
{
channel = "capability",
direction = "send",
@@ -238,6 +243,11 @@ test.register_message_test(
clusters.Thermostat.server.attributes.OccupiedCoolingSetpoint:build_test_report_data(mock_device, 1, 40*100)
}
},
{
channel = "capability",
direction = "send",
message = mock_device:generate_test_message("main", capabilities.thermostatCoolingSetpoint.coolingSetpointRange({unit="C", value={maximum=40.0, minimum=5.0, step=0.1}}))
},
{
channel = "capability",
direction = "send",
Original file line number Diff line number Diff line change
@@ -157,6 +157,12 @@ test.register_message_test(
clusters.Thermostat.server.attributes.OccupiedHeatingSetpoint:build_test_report_data(mock_device, 3, 40 * 100)
}
},
{
channel = "capability",
direction = "send",
message = mock_device:generate_test_message("main",
capabilities.thermostatHeatingSetpoint.heatingSetpointRange({unit="C", value={maximum=40.0, minimum=5.0, step=0.1}}))
},
{
channel = "capability",
direction = "send",
@@ -177,6 +183,12 @@ test.register_message_test(
clusters.Thermostat.server.attributes.OccupiedCoolingSetpoint:build_test_report_data(mock_device, 3, 40 * 100)
}
},
{
channel = "capability",
direction = "send",
message = mock_device:generate_test_message("main",
capabilities.thermostatCoolingSetpoint.coolingSetpointRange({unit="C", value={maximum=40.0, minimum=5.0, step=0.1}}))
},
{
channel = "capability",
direction = "send",
Original file line number Diff line number Diff line change
@@ -140,6 +140,11 @@ test.register_message_test(
clusters.Thermostat.server.attributes.OccupiedHeatingSetpoint:build_test_report_data(mock_device, 1, 70*100)
}
},
{
channel = "capability",
direction = "send",
message = mock_device:generate_test_message("main", capabilities.thermostatHeatingSetpoint.heatingSetpointRange({unit="C", value={maximum=80.0, minimum=30.0, step=0.1}}))
},
{
channel = "capability",
direction = "send",
Original file line number Diff line number Diff line change
@@ -130,34 +130,40 @@ local CLUSTER_SUBSCRIBE_LIST_NO_BATTERY = {
}

local function test_init()
test.disable_startup_messages()
local subscribe_request = CLUSTER_SUBSCRIBE_LIST[1]:subscribe(mock_device)
for i, clus in ipairs(CLUSTER_SUBSCRIBE_LIST) do
if i > 1 then subscribe_request:merge(clus:subscribe(mock_device)) end
end
test.socket.matter:__expect_send({mock_device.id, subscribe_request})
test.mock_device.add_test_device(mock_device)
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" })
end

local function test_init_switch_to_battery()
test.disable_startup_messages()
local subscribe_request = CLUSTER_SUBSCRIBE_LIST_NO_BATTERY[1]:subscribe(mock_device_switch_to_battery)
for i, clus in ipairs(CLUSTER_SUBSCRIBE_LIST_NO_BATTERY) do
if i > 1 then subscribe_request:merge(clus:subscribe(mock_device_switch_to_battery)) end
end
test.socket.matter:__expect_send({mock_device_switch_to_battery.id, subscribe_request})
test.mock_device.add_test_device(mock_device_switch_to_battery)
test.socket.device_lifecycle:__queue_receive({ mock_device_switch_to_battery.id, "init" })
test.socket.device_lifecycle:__queue_receive({ mock_device_switch_to_battery.id, "doConfigure" })
mock_device_switch_to_battery:expect_metadata_update({ provisioning_state = "PROVISIONED" })
local read_attribute_list = clusters.PowerSource.attributes.AttributeList:read()
test.socket.matter:__expect_send({mock_device_switch_to_battery.id, read_attribute_list})
end

local function test_init_mains_powered()
test.disable_startup_messages()
local subscribe_request = CLUSTER_SUBSCRIBE_LIST_NO_BATTERY[1]:subscribe(mock_device_mains_powered)
for i, clus in ipairs(CLUSTER_SUBSCRIBE_LIST_NO_BATTERY) do
if i > 1 then subscribe_request:merge(clus:subscribe(mock_device_mains_powered)) end
end
test.socket.matter:__expect_send({mock_device_mains_powered.id, subscribe_request})
test.mock_device.add_test_device(mock_device_mains_powered)
test.socket.device_lifecycle:__queue_receive({ mock_device_mains_powered.id, "init" })
test.socket.device_lifecycle:__queue_receive({ mock_device_mains_powered.id, "doConfigure" })
mock_device_mains_powered:expect_metadata_update({ profile = "window-covering" })
mock_device_mains_powered:expect_metadata_update({ provisioning_state = "PROVISIONED" })