Skip to content

Commit

Permalink
test: add z_ping/z_pong examples (#205)
Browse files Browse the repository at this point in the history
  • Loading branch information
wyfo authored May 6, 2024
1 parent 77e3fd2 commit de13408
Show file tree
Hide file tree
Showing 2 changed files with 219 additions and 0 deletions.
130 changes: 130 additions & 0 deletions examples/z_ping.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
#
# Copyright (c) 2024 ZettaScale Technology
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# ZettaScale Zenoh Team, <zenoh@zettascale.tech>
#

import argparse
import json
import time

import zenoh

# --- Command line argument parsing --- --- --- --- --- ---
parser = argparse.ArgumentParser(prog="z_get", description="zenoh get example")
parser.add_argument(
"--mode",
"-m",
dest="mode",
choices=["peer", "client"],
type=str,
help="The zenoh session mode.",
)
parser.add_argument(
"--connect",
"-e",
dest="connect",
metavar="ENDPOINT",
action="append",
type=str,
help="Endpoints to connect to.",
)
parser.add_argument(
"--listen",
"-l",
dest="listen",
metavar="ENDPOINT",
action="append",
type=str,
help="Endpoints to listen on.",
)
parser.add_argument(
"--config",
"-c",
dest="config",
metavar="FILE",
type=str,
help="A configuration file.",
)
parser.add_argument(
"--warmup",
"-w",
dest="warmup",
metavar="WARMUP",
type=float,
default=1.0,
help="The number of seconds to warmup (float)",
)
parser.add_argument(
"--samples",
"-n",
dest="samples",
metavar="SAMPLES",
type=int,
default=100,
help="The number of round-trip to measure",
)
parser.add_argument(
"payload_size",
metavar="PAYLOAD_SIZE",
type=int,
help="Sets the size of the payload to publish.",
)

args = parser.parse_args()
conf = (
zenoh.Config.from_file(args.config) if args.config is not None else zenoh.Config()
)
if args.mode is not None:
conf.insert_json5("mode", json.dumps(args.mode))
if args.connect is not None:
conf.insert_json5("connect/endpoints", json.dumps(args.connect))
if args.listen is not None:
conf.insert_json5("listen/endpoints", json.dumps(args.listen))


# Zenoh code --- --- --- --- --- --- --- --- --- --- ---
def main():
# initiate logging
zenoh.init_logger()

print("Opening session...")
session = zenoh.open(conf)

sub = session.declare_subscriber("test/pong", zenoh.Queue())
pub = session.declare_publisher(
"test/ping",
congestion_control=zenoh.CongestionControl.BLOCK(),
)
data = bytes(i % 10 for i in range(0, args.payload_size))

print(f"Warming up for {args.warmup}...")
warmup_end = time.time() + args.warmup
while time.time() < warmup_end:
pub.put(data)
sub.receiver.get()

samples = []
for i in range(args.samples):
write_time = time.time()
pub.put(data)
sub.receiver.get()
samples.append(round((time.time() - write_time) * 1_000_000))

for i, rtt in enumerate(samples):
print(f"{args.payload_size} bytes: seq={i} rtt={rtt}µs lat={rtt / 2}µs")

pub.undeclare()
sub.undeclare()
session.close()


main()
89 changes: 89 additions & 0 deletions examples/z_pong.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
#
# Copyright (c) 2024 ZettaScale Technology
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# ZettaScale Zenoh Team, <zenoh@zettascale.tech>
#

import argparse
import json
import time

import zenoh

# --- Command line argument parsing --- --- --- --- --- ---
parser = argparse.ArgumentParser(prog="z_get", description="zenoh get example")
parser.add_argument(
"--mode",
"-m",
dest="mode",
choices=["peer", "client"],
type=str,
help="The zenoh session mode.",
)
parser.add_argument(
"--connect",
"-e",
dest="connect",
metavar="ENDPOINT",
action="append",
type=str,
help="Endpoints to connect to.",
)
parser.add_argument(
"--listen",
"-l",
dest="listen",
metavar="ENDPOINT",
action="append",
type=str,
help="Endpoints to listen on.",
)
parser.add_argument(
"--config",
"-c",
dest="config",
metavar="FILE",
type=str,
help="A configuration file.",
)

args = parser.parse_args()
conf = (
zenoh.Config.from_file(args.config) if args.config is not None else zenoh.Config()
)
if args.mode is not None:
conf.insert_json5("mode", json.dumps(args.mode))
if args.connect is not None:
conf.insert_json5("connect/endpoints", json.dumps(args.connect))
if args.listen is not None:
conf.insert_json5("listen/endpoints", json.dumps(args.listen))


# Zenoh code --- --- --- --- --- --- --- --- --- --- ---
def main():
# initiate logging
zenoh.init_logger()

print("Opening session...")
session = zenoh.open(conf)

pub = session.declare_publisher(
"test/pong",
congestion_control=zenoh.CongestionControl.BLOCK(),
)
sub = session.declare_subscriber("test/ping", lambda s: pub.put(s.payload))

print("Press CTRL-C to quit...")
while True:
time.sleep(1)


main()

0 comments on commit de13408

Please sign in to comment.