Merge pull request #73827 from tfc/mosquitto-test-python

Mosquitto test python
This commit is contained in:
Florian Klink 2019-11-21 20:13:11 +01:00 committed by GitHub
commit 0f2635b7d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 35 deletions

View file

@ -749,7 +749,7 @@ def run_tests() -> None:
if tests is not None:
with log.nested("running the VM test script"):
try:
exec(tests)
exec(tests, globals())
except Exception as e:
eprint("error: {}".format(str(e)))
sys.exit(1)

View file

@ -1,21 +1,10 @@
import ./make-test.nix ({ pkgs, ... }:
import ./make-test-python.nix ({ pkgs, ... }:
let
port = 1888;
username = "mqtt";
password = "VERY_secret";
topic = "test/foo";
cmd = bin: pkgs.lib.concatStringsSep " " [
"${pkgs.mosquitto}/bin/mosquitto_${bin}"
"-V mqttv311"
"-h server"
"-p ${toString port}"
"-u ${username}"
"-P '${password}'"
"-t ${topic}"
];
in {
name = "mosquitto";
meta = with pkgs.stdenv.lib; {
@ -49,40 +38,53 @@ in {
testScript = let
file = "/tmp/msg";
sub = args:
"(${cmd "sub"} -C 1 ${args} | tee ${file} &)";
in ''
startAll;
$server->waitForUnit("mosquitto.service");
def mosquitto_cmd(binary):
return (
"${pkgs.mosquitto}/bin/mosquitto_{} "
"-V mqttv311 "
"-h server "
"-p ${toString port} "
"-u ${username} "
"-P '${password}' "
"-t ${topic}"
).format(binary)
$server->fail("test -f ${file}");
$client1->fail("test -f ${file}");
$client2->fail("test -f ${file}");
def publish(args):
return "{} {}".format(mosquitto_cmd("pub"), args)
def subscribe(args):
return "({} -C 1 {} | tee ${file} &)".format(mosquitto_cmd("sub"), args)
start_all()
server.wait_for_unit("mosquitto.service")
for machine in server, client1, client2:
machine.fail("test -f ${file}")
# QoS = 0, so only one subscribers should get it
$server->execute("${sub "-q 0"}");
server.execute(subscribe("-q 0"))
# we need to give the subscribers some time to connect
$client2->execute("sleep 5");
$client2->succeed("${cmd "pub"} -m FOO -q 0");
$server->waitUntilSucceeds("grep -q FOO ${file}");
$server->execute("rm ${file}");
client2.execute("sleep 5")
client2.succeed(publish("-m FOO -q 0"))
server.wait_until_succeeds("grep -q FOO ${file}")
server.execute("rm ${file}")
# QoS = 1, so both subscribers should get it
$server->execute("${sub "-q 1"}");
$client1->execute("${sub "-q 1"}");
server.execute(subscribe("-q 1"))
client1.execute(subscribe("-q 1"))
# we need to give the subscribers some time to connect
$client2->execute("sleep 5");
$client2->succeed("${cmd "pub"} -m BAR -q 1");
client2.execute("sleep 5")
client2.succeed(publish("-m BAR -q 1"))
$server->waitUntilSucceeds("grep -q BAR ${file}");
$server->execute("rm ${file}");
$client1->waitUntilSucceeds("grep -q BAR ${file}");
$client1->execute("rm ${file}");
for machine in server, client1:
machine.wait_until_succeeds("grep -q BAR ${file}")
machine.execute("rm ${file}")
'';
})