nodemcu-firmware/tests/expectnmcu/net.tcl

56 lines
1.5 KiB
Tcl

namespace eval expectnmcu::net {
}
package require expectnmcu::core
# Wait for `wifi.sta.getip()` to return something that looks like an address,
# indicating that the device under test is probably online.
proc ::expectnmcu::net::waitwifista { dev {timeout 10} } {
for {set i 0} {${i} < ${timeout}} {incr i} {
send -i ${dev} "=wifi.sta.getip()\n"
expect {
-i ${dev} -re "\n(\[^\n\t\]+)\t\[^\t\]+\t\[^\t\]+\[\r\n\]+> " {
# That looks like an address report to me
return ${expect_out(1,string)}
}
-i ${dev} -ex "nil\[\r\n\]+> " {
# must not be connected yet
sleep 1
}
-i ${dev} -re ${::expectnmcu::core::panicre} { return -code error "Panic!" }
timeout { }
}
}
return -code error "WIFI STA: no IP address"
}
proc ::expectnmcu::net::guessmyip { victimip } {
# Guess our IP address by using the victim's
spawn "ip" "route" "get" ${victimip}
expect {
-re "src (\[0-9.\]+) " {
close
return ${expect_out(1,string)}
}
}
close
return -code error "Cannot find source IP"
}
# Open a socat stream with some verbosity and wait for it to become
# ready before returning.
proc ::expectnmcu::net::mksocat { socat_remote } {
spawn -noecho "socat" "-dd" "STDIO,cfmakeraw" ${socat_remote}
set timeout 10
expect {
-i ${spawn_id} -ex "listening on" { return ${spawn_id} }
-i ${spawn_id} -ex "starting data transfer loop" { return ${spawn_id} }
timeout { return -code error "Timeout opening local socat" }
}
}
package provide expectnmcu::net 1.0