Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
138 commits
Select commit Hold shift + click to select a range
3627943
feat(hiroz): join the rmw_zenoh cpu buffer group
YuanYuYuan Oct 15, 2026
f383e1c
feat(hiroz): log the buffer group key at join
YuanYuYuan Oct 15, 2026
220ce8b
test(hiroz-tests): add buffer group interop cells
YuanYuYuan Oct 15, 2026
9c87da5
docs(interop): document the cpu buffer group
YuanYuYuan Oct 15, 2026
900939c
test(hiroz-tests): gate linux cells by target os
YuanYuYuan Oct 16, 2026
3ca38fd
test(hiroz-tests): use r1_assert in group log test
YuanYuYuan Oct 16, 2026
497bab8
test(hiroz-tests): map interop doc claims to tests
YuanYuYuan Oct 16, 2026
fcdead8
docs(interop): state rmw-zenoh-rs and python rules
YuanYuYuan Oct 16, 2026
4cd95a1
test(hiroz-tests): skip table rule row in report
YuanYuYuan Oct 16, 2026
6a8df02
test(hiroz-tests): use r1_assert in join asserts
YuanYuYuan Oct 16, 2026
f10571e
test(hiroz-tests): add the t1 mode detector stub
YuanYuYuan Oct 16, 2026
ab98d9b
test(hiroz-tests): match publisher, capture key
YuanYuYuan Oct 16, 2026
4b2f6c4
test(hiroz-tests): read mode and count by sequence
YuanYuYuan Oct 16, 2026
2184dd3
test(hiroz-tests): record namespaced group key
YuanYuYuan Oct 16, 2026
25957da
test(hiroz-tests): drop the constant empty check
YuanYuYuan Oct 16, 2026
5093d0f
test(hiroz-tests): load t1 harness alone
YuanYuYuan Oct 16, 2026
b05c665
test(hiroz-tests): use r1_assert in no-schema join
YuanYuYuan Oct 16, 2026
11e6aa2
test(hiroz-tests): allow unused items of common
YuanYuYuan Oct 16, 2026
cab8ee7
test(hiroz-tests): match BufferGroup by wildcard
YuanYuYuan Oct 16, 2026
11694cc
feat(hiroz): mark BufferGroup non_exhaustive
YuanYuYuan Oct 16, 2026
c8b483a
test(hiroz-tests): call the rmw guard in T1 cells
YuanYuYuan Oct 16, 2026
07e6c1b
test(hiroz-tests): check the rmw is buffer-aware
YuanYuYuan Oct 16, 2026
cd975c1
test(hiroz-tests): count four arms by seq in t1
YuanYuYuan Oct 16, 2026
e75073b
test(hiroz-tests): anchor mode with released sub
YuanYuYuan Oct 16, 2026
813ce93
test(hiroz-tests): add old parser, feedback cells
YuanYuYuan Oct 16, 2026
1d42858
test(hiroz-tests): use r1_assert in mutant tests
YuanYuYuan Oct 16, 2026
1ae1875
test(hiroz-tests): add joined subscriber drop test
YuanYuYuan Oct 16, 2026
df81563
chore(deps): sync Cargo.lock with the manifests
YuanYuYuan Oct 16, 2026
4d0498a
test(hiroz-tests): add the joined cache drop test
YuanYuYuan Oct 16, 2026
9215af7
test(hiroz-tests): add other group isolation test
YuanYuYuan Oct 16, 2026
5ef3b02
test(hiroz-tests): expect union key in join log
YuanYuYuan Oct 16, 2026
65f7a91
feat(hiroz): serve group key from one subscription
YuanYuYuan Oct 16, 2026
07957c9
test(hiroz-tests): add the mixed matched set cell
YuanYuYuan Oct 16, 2026
949eac6
test(hiroz-tests): pin once-only mixed delivery
YuanYuYuan Oct 16, 2026
1919013
docs(interop): state the mixed set key rule
YuanYuYuan Oct 16, 2026
90d27c4
fix(hiroz-tests): read humble base key in cells
YuanYuYuan Oct 16, 2026
e046ba7
test(hiroz-tests): gate buffer cells on rmw
YuanYuYuan Oct 16, 2026
a784ea8
ci(hiroz-tests): fail lyrical on skipped cells
YuanYuYuan Oct 16, 2026
e0d4261
docs(hiroz): state the once-log set bound
YuanYuYuan Oct 16, 2026
1a1b9b1
docs(interop): disclose the Auto default change
YuanYuYuan Oct 16, 2026
035fe4a
docs(hiroz-tests): reword comments, soften claim
YuanYuYuan Oct 16, 2026
4d30bc2
test(hiroz-tests): follow the distro in group keys
YuanYuYuan Oct 16, 2026
9202229
test(hiroz-tests): size the deny-rule queue to samples
YuanYuYuan Oct 16, 2026
81ad4ab
ci: run the buffer skip check test
YuanYuYuan Oct 16, 2026
81c20ff
test(hiroz-tests): deny the wide key of a topic
YuanYuYuan Oct 16, 2026
aea4b67
test(hiroz-tests): print keys of the mixed sets
YuanYuYuan Oct 16, 2026
d59f317
ci: fail a skipped buffer cell with one env var
YuanYuYuan Oct 16, 2026
6a547d7
test(hiroz-tests): drop the docs claims table
YuanYuYuan Oct 16, 2026
80c044e
test(hiroz-tests): trim the buffer group tests
YuanYuYuan Oct 16, 2026
b3f806f
docs(interop): shorten the buffer group section
YuanYuYuan Oct 16, 2026
20f18d4
docs(hiroz): shorten two buffer group comments
YuanYuYuan Oct 16, 2026
36a51fa
docs(interop): name the per-subscriber buffer key
YuanYuYuan Oct 16, 2026
1414b7e
test(hiroz-tests): expect the right key in the log text
YuanYuYuan Oct 17, 2026
bd25ede
fix(hiroz): name the key to allow in the join log
YuanYuYuan Oct 17, 2026
476d9af
feat(hiroz): add with_buffer_group to the cache builder
YuanYuYuan Oct 17, 2026
658168c
test(hiroz-tests): drop a redundant deny test, fix comments
YuanYuYuan Oct 17, 2026
cda6402
chore(deps): keep one hiroz-tests lock line
YuanYuYuan Oct 17, 2026
e541480
docs(interop): correct the Python and cost notes
YuanYuYuan Oct 17, 2026
c3f93dc
test(hiroz-tests): join dynamic and cache arms in interop
YuanYuYuan Oct 17, 2026
5f51e0e
test(hiroz-tests): measure allow-only acl on joined subs
YuanYuYuan Oct 17, 2026
84e4f3b
docs(hiroz-tests): state the allow-only acl result
YuanYuYuan Oct 17, 2026
4c28bc4
docs(interop): state join and acl scope as measured
YuanYuYuan Oct 17, 2026
d0ea804
fix(hiroz-tests): borrow the slice in the acl test
YuanYuYuan Oct 17, 2026
9437424
test(hiroz-tests): restore group join checks
YuanYuYuan Oct 19, 2026
03dc3a3
docs(interop): mark each buffer claim as tested
YuanYuYuan Oct 19, 2026
e88f771
test(hiroz-tests): check the match at the token
YuanYuYuan Oct 19, 2026
408c9fe
test(hiroz-tests): drop the order tolerance, add control
YuanYuYuan Oct 19, 2026
9984a3a
docs(interop): state what the markers prove
YuanYuYuan Oct 19, 2026
3cd5960
test(hiroz-tests): check twin joins, widen wait
YuanYuYuan Oct 19, 2026
968d0fb
fix(hiroz): make the buffer group opt-in
YuanYuYuan Oct 20, 2026
cf37ee9
test(hiroz-tests): bound the join log memory
YuanYuYuan Oct 20, 2026
f0a92bf
fix(hiroz): bound the join log memory
YuanYuYuan Oct 20, 2026
e6eefe4
docs(hiroz): fix the deny rule and teardown text
YuanYuYuan Oct 20, 2026
aa9b5ee
style(hiroz): indent the join log text
YuanYuYuan Oct 20, 2026
24488f6
test(hiroz-tests): name each sample of the plain topic
YuanYuYuan Oct 20, 2026
b793f89
test(hiroz-tests): isolate the join log cap test
YuanYuYuan Oct 20, 2026
7f03cf1
feat(hiroz): join the buffer group by default
YuanYuYuan Oct 20, 2026
7f0fee5
test(hiroz-tests): cover two buffer group gaps
YuanYuYuan Oct 20, 2026
5d49434
docs(hiroz): mark the new tested claims
YuanYuYuan Oct 20, 2026
498245b
refactor(hiroz): own the group token directly
YuanYuYuan Oct 20, 2026
0bdb5c5
refactor(hiroz): move the handler into its branch
YuanYuYuan Oct 20, 2026
4a84533
refactor(hiroz): define the cache group setter once
YuanYuYuan Oct 20, 2026
8b32bca
refactor(hiroz): own the join log state
YuanYuYuan Oct 20, 2026
fad21e6
test(hiroz-tests): a failed token logs no join
YuanYuYuan Oct 20, 2026
7a72c8d
fix(hiroz): log the join after the token
YuanYuYuan Oct 20, 2026
7be4d04
docs(hiroz): document the buffer group on the API
YuanYuYuan Oct 20, 2026
da67d4d
test(hiroz-tests): drop the interop page marker gate
YuanYuYuan Oct 20, 2026
db40513
test(hiroz-tests): drop two redundant deny-rule tests
YuanYuYuan Oct 20, 2026
13ec72c
test(hiroz-tests): drop two duplicate join fixtures
YuanYuYuan Oct 20, 2026
271209d
test(hiroz-tests): fold a custom QoS token case
YuanYuYuan Oct 20, 2026
f9dfc07
test(hiroz-tests): one typed lifecycle test
YuanYuYuan Oct 20, 2026
a71331f
docs(hiroz): say the token drops before the subscription
YuanYuYuan Oct 20, 2026
7ad9db5
test(hiroz-tests): match the group key in the join line
YuanYuYuan Oct 20, 2026
0ac050b
fix(hiroz): keep the log cap out of the c header
YuanYuYuan Oct 20, 2026
bd67ce2
test(hiroz-tests): expect a debug line per join
YuanYuYuan Oct 20, 2026
5dd6ff7
refactor(hiroz): log the join at debug level
YuanYuYuan Oct 20, 2026
8326e18
docs(hiroz): log the join at debug level
YuanYuYuan Oct 20, 2026
41f38ba
test(hiroz): capture only the hiroz target
YuanYuYuan Oct 20, 2026
1cbf8e6
test(hiroz): drop the inline join-log test
YuanYuYuan Oct 20, 2026
d28f09c
test(hiroz-tests): drop the decoder ceiling test
YuanYuYuan Oct 20, 2026
01674e0
test(hiroz-tests): table-drive the join policy
YuanYuYuan Oct 20, 2026
fa7da45
test(hiroz-tests): merge the access-control tests
YuanYuYuan Oct 20, 2026
c65c8c6
test(hiroz-tests): run one mixed matched set
YuanYuYuan Oct 20, 2026
39dd2f4
docs(hiroz): name the merged join tests
YuanYuYuan Oct 20, 2026
17f640d
test(hiroz-tests): settle the counter before a drop
YuanYuYuan Oct 20, 2026
0c60957
test(hiroz-tests): tag the sample of each phase
YuanYuYuan Oct 20, 2026
886539d
test(hiroz-tests): check a joined cache on both keys
YuanYuYuan Oct 20, 2026
a877c4a
docs(hiroz): correct the buffer guide and a comment
YuanYuYuan Oct 20, 2026
c9a9fc8
refactor(hiroz): join with two exact subscriptions
YuanYuYuan Oct 21, 2026
d50036d
test(hiroz-tests): follow the exact-key join
YuanYuYuan Oct 21, 2026
e6da56e
docs(hiroz): name the fields that join the group
YuanYuYuan Oct 21, 2026
f185bc9
test(hiroz-tests): pin the exact-key join
YuanYuYuan Oct 21, 2026
59f1d67
fix(hiroz): name the pair of raw subscriptions
YuanYuYuan Oct 21, 2026
5b3e85d
test(hiroz-tests): name what the token count pins
YuanYuYuan Oct 21, 2026
fdf4176
docs(hiroz): state why the group join is built so
YuanYuYuan Oct 21, 2026
c2dfbaa
refactor(hiroz): replace the join plan with two functions
YuanYuYuan Oct 21, 2026
04652aa
style(hiroz): keep the import layout of cache.rs
YuanYuYuan Oct 21, 2026
eed8374
test(hiroz-tests): drop three overlapping join tests
YuanYuYuan Oct 21, 2026
aad911a
docs(hiroz): shorten with_buffer_group rustdoc
YuanYuYuan Oct 21, 2026
0fe8d84
refactor(hiroz): name the raw subscription pair
YuanYuYuan Oct 21, 2026
2407ca7
docs(hiroz): remove wide-key wording
YuanYuYuan Oct 21, 2026
4179ebf
test(hiroz-tests): load schemas only where embedded
YuanYuYuan Oct 21, 2026
90d3840
docs(hiroz): state the history and lost-event limits
YuanYuYuan Oct 21, 2026
e5061f6
merge: bring main into the exact-key join
YuanYuYuan Oct 21, 2026
0748a3a
refactor(hiroz): log a join once, keep field order
YuanYuYuan Oct 21, 2026
b58e737
docs(hiroz): cut history from buffer group docs
YuanYuYuan Oct 21, 2026
03a1289
docs(hiroz): shorten the buffer group guide
YuanYuYuan Oct 21, 2026
853188e
test(hiroz-tests): drop rows that have a twin
YuanYuYuan Oct 21, 2026
23adac8
test(hiroz-tests): fold duplicate fixtures
YuanYuYuan Oct 21, 2026
436f97d
test(hiroz-tests): merge the access-control tests
YuanYuYuan Oct 21, 2026
1ee6c5f
test(hiroz-tests): shrink the sibling key test
YuanYuYuan Oct 21, 2026
308baaa
refactor(hiroz): log a join with key fields
YuanYuYuan Oct 21, 2026
69ec40c
test(hiroz): test join rules without a router
YuanYuYuan Oct 21, 2026
d6e8fbe
test(hiroz-tests): share one client session helper
YuanYuYuan Oct 21, 2026
ef07adf
test(hiroz-tests): trim the released-publisher tests
YuanYuYuan Oct 21, 2026
24b244c
test(hiroz-tests): drop the legacy starvation assertions
YuanYuYuan Oct 21, 2026
4b86408
test(hiroz-tests): fix stale test names in comments
YuanYuYuan Oct 21, 2026
8737b8f
docs(hiroz): correct the group-key access advice
YuanYuYuan Oct 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,9 @@ jobs:

- name: Run interop tests
shell: bash
env:
# Only the lyrical image has a buffer-aware rmw_zenoh_cpp: a skipped buffer test fails there.
HIROZ_REQUIRE_BUFFER_RMW: ${{ matrix.distro == 'lyrical' && '1' || '' }}
run: |
source /opt/ros/${{ matrix.distro }}/setup.bash
export RMW_IMPLEMENTATION=rmw_zenoh_cpp
Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

75 changes: 75 additions & 0 deletions crates/hiroz-codegen/tests/schema_buffer_fields.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
//! The message schema that the Rust generator writes for the sequence kinds a buffer rule reads.
//!
//! A subscriber joins rmw_zenoh's CPU buffer group when its message schema has an unbounded
//! sequence of `Uint8`. So the generator decides which ROS field kinds count. These tests parse a
//! small `.msg` text and read the schema tokens of each field.

use std::{collections::HashSet, path::Path};

use hiroz_codegen::{
generator::rust::{GenerationContext, generate_message_impl_with_cdr},
parser::msg::parse_msg_string,
resolver::Resolver,
};

/// The generated code of `source`, with all white space removed.
fn generated(source: &str) -> String {
let parsed = parse_msg_string(source, "test_msgs", Path::new("Kinds.msg")).expect("parse");
let resolved = Resolver::new(false)
.resolve_messages(vec![parsed])
.expect("resolve")
.remove(0);
let ctx = GenerationContext::new(None, HashSet::from(["test_msgs".to_string()]));
generate_message_impl_with_cdr(&resolved, &ctx, &HashSet::new())
.expect("generate")
.to_string()
.split_whitespace()
.collect()
}

/// The schema builder call for a field of the given kind, in the form of `generated`.
fn field(name: &str, field_type: &str) -> String {
format!(".field(\"{name}\",::hiroz::dynamic::FieldType::{field_type})")
}

fn sequence_of(inner: &str) -> String {
format!("Sequence(::std::boxed::Box::new(::hiroz::dynamic::FieldType::{inner}))")
}

/// An unbounded `uint8[]`, `char[]` and `byte[]` all become a sequence of `Uint8`, so the typed
/// join counts all three. An unbounded `int8[]` stays a sequence of `Int8`, and a bounded or fixed
/// `uint8` is not a sequence.
///
/// Control in the same test: the `uint8[]` field has the sequence form that the other rows are
/// compared against, so a generator that writes no schema at all cannot pass.
#[test]
fn byte_char_and_uint8_sequences_share_one_schema_kind() {
const NAME: &str = "byte_char_and_uint8_sequences_share_one_schema_kind";
let code = generated(
"uint8[] u\nchar[] c\nbyte[] b\nint8[] i\nuint8[<=4] bounded\nuint8[4] fixed\nfloat64[] f\n",
);
let uint8_sequence = sequence_of("Uint8");
let rows = [
("u", uint8_sequence.clone()),
("c", uint8_sequence.clone()),
("b", uint8_sequence.clone()),
("i", sequence_of("Int8")),
(
"bounded",
"BoundedSequence(::std::boxed::Box::new(::hiroz::dynamic::FieldType::Uint8),4usize)"
.to_string(),
),
(
"fixed",
"Array(::std::boxed::Box::new(::hiroz::dynamic::FieldType::Uint8),4usize)".to_string(),
),
("f", sequence_of("Float64")),
];
for (name, field_type) in rows {
let want = field(name, &field_type);
assert!(
code.contains(&want),
"{NAME}: no `{want}` in the generated schema of field {name}"
);
}
}
1 change: 1 addition & 0 deletions crates/hiroz-tests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ publish = false
hiroz = { path = "../hiroz", default-features = false, features = ["protobuf"] }
hiroz-msgs = { path = "../hiroz-msgs", default-features = false, optional = true }
hiroz-cdr = { path = "../hiroz-cdr" }
hiroz-protocol = { path = "../hiroz-protocol" } # key format types in buffer_cpu_group tests
hiroz-schema = { path = "../hiroz-schema" }
protobuf_demo = { path = "../hiroz/examples/protobuf_demo" }

Expand Down
Loading
Loading