1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-01 10:52:19 +01:00

[test] Add integration test for light effect memory corruption fix (#10417)

This commit is contained in:
J. Nick Koston
2025-08-24 22:58:46 +02:00
committed by Jesse Hills
parent c542db8bfe
commit aebd21958a
2 changed files with 72 additions and 5 deletions

View File

@@ -56,10 +56,29 @@ light:
warm_white_color_temperature: 2000 K
constant_brightness: true
effects:
# Use default parameters:
- random:
name: "Random Effect"
# Customize parameters - use longer names to potentially trigger buffer issues
- random:
name: "My Very Slow Random Effect With Long Name"
transition_length: 30ms
update_interval: 30ms
- random:
name: "My Fast Random Effect That Changes Quickly"
transition_length: 4ms
update_interval: 5ms
- random:
name: "Random Effect With Medium Length Name Here"
transition_length: 100ms
update_interval: 200ms
- random:
name: "Another Random Effect With Different Parameters"
transition_length: 2ms
update_interval: 3ms
- random:
name: "Yet Another Random Effect To Test Memory"
transition_length: 15ms
update_interval: 20ms
- strobe:
name: "Strobe Effect"
- pulse:
@@ -73,6 +92,17 @@ light:
red: test_red
green: test_green
blue: test_blue
effects:
# Same random effects to test for cross-contamination
- random:
- random:
name: "RGB Slow Random"
transition_length: 20ms
update_interval: 25ms
- random:
name: "RGB Fast Random"
transition_length: 2ms
update_interval: 3ms
- platform: binary
name: "Test Binary Light"

View File

@@ -108,14 +108,51 @@ async def test_light_calls(
# Wait for flash to end
state = await wait_for_state_change(rgbcw_light.key)
# Test 13: effect only
# Test 13: effect only - test all random effects
# First ensure light is on
client.light_command(key=rgbcw_light.key, state=True)
state = await wait_for_state_change(rgbcw_light.key)
# Now set effect
client.light_command(key=rgbcw_light.key, effect="Random Effect")
# Test 13a: Default random effect (no name, gets default name "Random")
client.light_command(key=rgbcw_light.key, effect="Random")
state = await wait_for_state_change(rgbcw_light.key)
assert state.effect == "Random Effect"
assert state.effect == "Random"
# Test 13b: Slow random effect with long name
client.light_command(
key=rgbcw_light.key, effect="My Very Slow Random Effect With Long Name"
)
state = await wait_for_state_change(rgbcw_light.key)
assert state.effect == "My Very Slow Random Effect With Long Name"
# Test 13c: Fast random effect with long name
client.light_command(
key=rgbcw_light.key, effect="My Fast Random Effect That Changes Quickly"
)
state = await wait_for_state_change(rgbcw_light.key)
assert state.effect == "My Fast Random Effect That Changes Quickly"
# Test 13d: Random effect with medium length name
client.light_command(
key=rgbcw_light.key, effect="Random Effect With Medium Length Name Here"
)
state = await wait_for_state_change(rgbcw_light.key)
assert state.effect == "Random Effect With Medium Length Name Here"
# Test 13e: Another random effect
client.light_command(
key=rgbcw_light.key,
effect="Another Random Effect With Different Parameters",
)
state = await wait_for_state_change(rgbcw_light.key)
assert state.effect == "Another Random Effect With Different Parameters"
# Test 13f: Yet another random effect
client.light_command(
key=rgbcw_light.key, effect="Yet Another Random Effect To Test Memory"
)
state = await wait_for_state_change(rgbcw_light.key)
assert state.effect == "Yet Another Random Effect To Test Memory"
# Test 14: stop effect
client.light_command(key=rgbcw_light.key, effect="None")