Merge remote-tracking branch 'origin/futures' into futures

This commit is contained in:
Martin Dahl 2021-07-24 17:19:55 +02:00
commit 9d125b0ee7
6 changed files with 119 additions and 0 deletions

31
.github/workflows/rust_and_ros2.yml vendored Normal file
View File

@ -0,0 +1,31 @@
name: testing_ros
on: [push, pull_request]
env:
CARGO_TERM_COLOR: always
jobs:
testing_rolling:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: docker build . --file ./tests/Dockerfile --tag r2r_test
- run: docker run r2r_test
testing_foxy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: docker build . --file ./tests/Dockerfile_foxy --tag r2r_test
- run: docker run r2r_test
testing_galactic:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: docker build . --file ./tests/Dockerfile_galactic --tag r2r_test
- run: docker run r2r_test

6
tests/Dockerfile Normal file
View File

@ -0,0 +1,6 @@
FROM kristoferb/spdesktop_ros2:rolling
COPY . /r2r
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN chmod +x /r2r/tests/test.sh
ENTRYPOINT [ "/r2r/tests/test.sh" ]

6
tests/Dockerfile_foxy Normal file
View File

@ -0,0 +1,6 @@
FROM kristoferb/spdesktop_ros2:foxy
COPY . /r2r
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN chmod +x /r2r/tests/test.sh
ENTRYPOINT [ "/r2r/tests/test.sh" ]

View File

@ -0,0 +1,6 @@
FROM kristoferb/spdesktop_ros2:galactic
COPY . /r2r
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN chmod +x /r2r/tests/test.sh
ENTRYPOINT [ "/r2r/tests/test.sh" ]

8
tests/test.sh Normal file
View File

@ -0,0 +1,8 @@
#!/bin/bash
source /opt/ros/rolling/setup.bash
source /opt/ros/foxy/setup.bash
source /opt/ros/galactic/setup.bash
cd /r2r/
/root/.cargo/bin/cargo test

62
tests/tokio_testing.rs Normal file
View File

@ -0,0 +1,62 @@
use futures::stream::StreamExt;
use tokio::task;
use std::sync::{Arc, Mutex};
use r2r;
#[tokio::test(flavor = "multi_thread")]
async fn tokio_testing() -> Result<(), Box<dyn std::error::Error>> {
let ctx = r2r::Context::create()?;
let mut node = r2r::Node::create(ctx, "testnode", "")?;
let mut s_the_no = node.subscribe::<r2r::std_msgs::msg::Int32>("/the_no")?;
let mut s_new_no = node.subscribe::<r2r::std_msgs::msg::Int32>("/new_no")?;
let p_the_no = node.create_publisher::<r2r::std_msgs::msg::Int32>("/the_no")?;
let p_new_no = node.create_publisher::<r2r::std_msgs::msg::Int32>("/new_no")?;
let state = Arc::new(Mutex::new(0));
task::spawn(async move {
(0..10).for_each(|i| {
p_the_no.publish(&r2r::std_msgs::msg::Int32{data: i}).unwrap();
});
});
task::spawn(async move {
loop {
match s_the_no.next().await {
Some(msg) => {
p_new_no.publish(&r2r::std_msgs::msg::Int32{data: msg.data + 10}).unwrap();
},
None => break,
}
}
});
let s = state.clone();
task::spawn(async move {
loop {
match s_new_no.next().await {
Some(msg) => {
let i = msg.data;
if i==19 {
*s.lock().unwrap() = 19;
}
},
None => break,
}
}
});
let handle = std::thread::spawn(move || {
for _ in 1..=30 {
node.spin_once(std::time::Duration::from_millis(100));
let x = state.lock().unwrap();
if *x == 19 {
break;
}
};
state.lock().unwrap().clone()
});
let x = handle.join().unwrap();
assert_eq!(x, 19);
Ok(())
}