summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAngus Gratton <angus@redyak.com.au>2024-11-13 11:20:03 +1100
committerAngus Gratton <gus@projectgus.com>2024-11-28 15:39:06 +1100
commit7647c828de4ffb9877163909017bbe909e79aacb (patch)
treef8eb1c814ed4a45d09780454529d89e31709ed0a /tests
parent78d017fc4e70bf21b7c53f193550d220f8959e38 (diff)
tests/multi_espnow: Add channel setting test, add some docs.
Test currently passes. It was added so it can be used to check for regressions when fixing channel selection for AP mode in a follow-up commit. Also add some docs about how channel setting is observed to work for ESP-NOW. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
Diffstat (limited to 'tests')
-rw-r--r--tests/multi_espnow/70_channel.py89
-rw-r--r--tests/multi_espnow/70_channel.py.exp13
2 files changed, 102 insertions, 0 deletions
diff --git a/tests/multi_espnow/70_channel.py b/tests/multi_espnow/70_channel.py
new file mode 100644
index 000000000..f3e8b947b
--- /dev/null
+++ b/tests/multi_espnow/70_channel.py
@@ -0,0 +1,89 @@
+# Test that ESP-NOW picks up the channel configuration for STA
+# mode on ESP32.
+#
+# Note that setting the channel on a peer in ESP-NOW on modern ESP-IDF only
+# checks it against the configured channel, it doesn't ever change the radio
+# channel
+import sys
+import time
+
+try:
+ import network
+ import espnow
+except ImportError:
+ print("SKIP")
+ raise SystemExit
+
+# ESP8266 doesn't support config('channel') on the STA interface,
+# and the channel parameter to add_peer doesn't appear to set the
+# channel either.
+if sys.platform == "esp8266":
+ print("SKIP")
+ raise SystemExit
+
+
+timeout_ms = 1000
+default_pmk = b"MicroPyth0nRules"
+
+CHANNEL = 3
+WRONG_CHANNEL = 8
+
+
+def init_sta():
+ sta = network.WLAN(network.WLAN.IF_STA)
+ e = espnow.ESPNow()
+ e.active(True)
+ sta.active(True)
+ sta.disconnect() # Force AP disconnect for any saved config, important so the channel doesn't change
+ sta.config(channel=CHANNEL)
+ e.set_pmk(default_pmk)
+ return sta, e
+
+
+# Receiver
+def instance0():
+ sta, e = init_sta()
+ multitest.globals(PEER=sta.config("mac"))
+ multitest.next()
+ print(sta.config("channel"))
+ while True:
+ peer, msg = e.recv(timeout_ms)
+ if peer is None:
+ print("Timeout")
+ break
+ print(msg)
+ e.active(False)
+
+
+# Sender
+def instance1():
+ sta, e = init_sta()
+ multitest.next()
+ peer = PEER
+
+ # both instances set channel via sta.config(), above
+ msg = b"sent to right channel 1"
+ e.add_peer(peer, channel=CHANNEL)
+ for _ in range(3):
+ e.send(peer, msg)
+ e.del_peer(peer)
+ print(sta.config("channel"))
+
+ sta.config(channel=WRONG_CHANNEL)
+ msg = b"sent to wrong channel"
+ e.add_peer(peer, channel=WRONG_CHANNEL)
+ for _ in range(3):
+ e.send(peer, msg)
+ e.del_peer(peer)
+ print(sta.config("channel"))
+
+ # switching back to the correct channel should also work
+ sta.config(channel=CHANNEL)
+ msg = b"sent to right channel 2"
+ e.add_peer(peer, channel=CHANNEL)
+ for _ in range(3):
+ e.send(peer, msg)
+ e.del_peer(peer)
+ print(sta.config("channel"))
+
+ e.active(False)
diff --git a/tests/multi_espnow/70_channel.py.exp b/tests/multi_espnow/70_channel.py.exp
new file mode 100644
index 000000000..d85539660
--- /dev/null
+++ b/tests/multi_espnow/70_channel.py.exp
@@ -0,0 +1,13 @@
+--- instance0 ---
+3
+b'sent to right channel 1'
+b'sent to right channel 1'
+b'sent to right channel 1'
+b'sent to right channel 2'
+b'sent to right channel 2'
+b'sent to right channel 2'
+Timeout
+--- instance1 ---
+3
+8
+3