diff --git a/TestConcoreHpp.cpp b/TestConcoreHpp.cpp index 6b6ad2c..f7311af 100644 --- a/TestConcoreHpp.cpp +++ b/TestConcoreHpp.cpp @@ -333,7 +333,7 @@ static void test_load_params_semicolon_format() { static void test_tryparam_comma_in_value() { setup_dirs(); - write_file("in/1/concore.params", "{'channels': [1, 2], 'gain': '0.5'}"); + write_file("in1/concore.params", "{'channels': [1, 2], 'gain': '0.5'}"); Concore c; c.delay = 0; @@ -342,7 +342,7 @@ static void test_tryparam_comma_in_value() { check("tryparam preserves list with comma", c.tryparam("channels", "") == "[1, 2]"); check("tryparam preserves subsequent key", c.tryparam("gain", "") == "0.5"); - rm("in/1/concore.params"); + rm("in1/concore.params"); } // ------------- main ------------------------------------------------------- diff --git a/concore.jl b/concore.jl index af47901..1d6f5d3 100644 --- a/concore.jl +++ b/concore.jl @@ -274,10 +274,11 @@ function _zmq_read(port_name::AbstractString, initstr::AbstractString)::Vector{F port = get(zmq_ports, String(port_name), nothing) port === nothing && error("ZMQ port '$port_name' not registered") - global simtime + global s, simtime _apply_write() try msg = _zmq_recv(port.socket) + s = _cap_s(s, msg) vals = safe_parse_list(msg) simtime = max(simtime, vals[1]) return vals[2:end] diff --git a/concoredocker.jl b/concoredocker.jl index e2c03c1..39d087a 100644 --- a/concoredocker.jl +++ b/concoredocker.jl @@ -275,10 +275,11 @@ function _zmq_read(port_name::AbstractString, initstr::AbstractString)::Vector{F port = get(zmq_ports, String(port_name), nothing) port === nothing && error("ZMQ port '$port_name' not registered") - global simtime + global s, simtime _apply_write() try msg = _zmq_recv(port.socket) + s = _cap_s(s, msg) vals = safe_parse_list(msg) simtime = max(simtime, vals[1]) return vals[2:end] diff --git a/tests/julia/test_concoredocker.jl b/tests/julia/test_concoredocker.jl index fbb2724..147380a 100644 --- a/tests/julia/test_concoredocker.jl +++ b/tests/julia/test_concoredocker.jl @@ -82,4 +82,26 @@ const DockerConcore = DockerRuntime.Concore end end + if DockerConcore.HAS_ZMQ + @testset "ZMQ read updates unchanged" begin + using Sockets + + reset_docker_state!() + server = Sockets.listen(Sockets.localhost, 0) + tcp_port = Sockets.getsockname(server)[2] + close(server) + address = "tcp://127.0.0.1:$tcp_port" + + DockerConcore.init_zmq_port("out", "bind", address, "PAIR") + DockerConcore.init_zmq_port("in", "connect", address, "PAIR") + sleep(0.1) + + DockerConcore.concore_write("out", "signal", [10.0]) + @test DockerConcore.unchanged() + @test DockerConcore.concore_read("in", "signal", "[0.0, 0.0]") == [10.0] + @test !DockerConcore.unchanged() + DockerConcore.terminate_zmq() + end + end + end \ No newline at end of file diff --git a/tests/julia/test_zmq.jl b/tests/julia/test_zmq.jl index ba9fe3d..0b3ac85 100644 --- a/tests/julia/test_zmq.jl +++ b/tests/julia/test_zmq.jl @@ -97,6 +97,24 @@ @test Concore.simtime == 4.0 reset_zmq_state!() end + + @testset "ZMQ read updates unchanged" begin + reset_zmq_state!() + server = Sockets.listen(Sockets.localhost, 0) + tcp_port = Sockets.getsockname(server)[2] + close(server) + address = "tcp://127.0.0.1:$tcp_port" + + Concore.init_zmq_port("out", "bind", address, "PAIR") + Concore.init_zmq_port("in", "connect", address, "PAIR") + sleep(0.1) + + Concore.concore_write("out", "signal", [10.0]) + @test Concore.unchanged() + @test Concore.concore_read("in", "signal", "[0.0, 0.0]") == [10.0] + @test !Concore.unchanged() + reset_zmq_state!() + end else @testset "live ZMQ skipped" begin @test_skip "ZMQ.jl not installed"