Skip to content

Commit

Permalink
add support for macos + CI
Browse files Browse the repository at this point in the history
  • Loading branch information
leshow committed Apr 24, 2023
1 parent 722de32 commit f4c0742
Show file tree
Hide file tree
Showing 5 changed files with 393 additions and 139 deletions.
129 changes: 129 additions & 0 deletions .github/workflows/actions.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
# Based on https://github.com/actions-rs/meta/blob/master/recipes/msrv.md

on: [push, pull_request]

name: Actions

jobs:
check:
name: Check
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- stable
- beta
- nightly
steps:
- name: Checkout sources
uses: actions/checkout@v2

- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.rust }}
override: true

- name: Run cargo check
uses: actions-rs/cargo@v1
with:
command: check
args: --all-features

check-mac:
name: Check MacOS
runs-on: macos-latest
strategy:
matrix:
rust:
- stable
steps:
- name: Checkout sources
uses: actions/checkout@v2

- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.rust }}
override: true

- name: Run cargo check
uses: actions-rs/cargo@v1
with:
command: check
args: --all-features

test:
name: Test Suite
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- stable
steps:
- name: Checkout sources
uses: actions/checkout@v2

- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.rust }}
override: true

- name: Run cargo test
uses: actions-rs/cargo@v1
with:
command: test
args: --all-features

fmt:
name: Rustfmt
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- stable
steps:
- name: Checkout sources
uses: actions/checkout@v2

- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.rust }}
override: true

- name: Install rustfmt
run: rustup component add rustfmt

- name: Run cargo fmt
uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check

clippy:
name: Clippy
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- stable
steps:
- name: Checkout sources
uses: actions/checkout@v2

- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.rust }}
override: true

- name: Install clippy
run: rustup component add clippy

- name: Run cargo clippy
uses: actions-rs/cargo@v1
with:
command: clippy
args: -- -D warnings
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,6 @@ bytes = "1.1.0"
futures-core = "0.3.0"
futures-sink = "0.3.0"
pin-project-lite = "0.2.0"

# [dev-dependencies]
# nix = "0.26"
29 changes: 25 additions & 4 deletions src/cmsg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -206,23 +206,44 @@ pub trait AsPtr<T> {
}
}

impl<T, const N: usize> AsPtr<T> for &[T; N] {
fn as_ptr(&self) -> *const T {
self.as_slice().as_ptr()
}

fn len(&self) -> usize {
N
}
}

impl<T, const N: usize> AsPtr<T> for [T; N] {
fn as_ptr(&self) -> *const T {
self.as_slice().as_ptr()
}

fn len(&self) -> usize {
N
}
}

impl<T> AsPtr<T> for Vec<T> {
fn as_ptr(&self) -> *const T {
self.as_ptr()
<Vec<T>>::as_ptr(self)
}
fn len(&self) -> usize {
self.len()
<Vec<T>>::len(self)
}
}

impl<T> AsPtr<T> for [T] {
fn as_ptr(&self) -> *const T {
self.as_ptr()
<[T]>::as_ptr(self)
}
fn len(&self) -> usize {
self.len()
<[T]>::len(self)
}
}

impl AsPtr<u8> for BytesMut {
fn as_ptr(&self) -> *const u8 {
<[u8]>::as_ptr(self.as_ref())
Expand Down
59 changes: 59 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,3 +113,62 @@ fn log_sendmsg_error<B: AsPtr<u8>>(
err, transmit.dst, transmit.src, transmit.ecn, transmit.contents.len(), transmit.segment_size);
}
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_create() {
let s = sync::UdpSocket::bind("0.0.0.0:9909");
assert!(s.is_ok());
}
#[test]
fn test_send_recv() {
let saddr = "0.0.0.0:9901".parse().unwrap();
let a = sync::UdpSocket::bind(saddr).unwrap();
let b = sync::UdpSocket::bind("0.0.0.0:0").unwrap();
let buf = b"hello world";
b.send_to(&buf[..], saddr).unwrap();
// recv
let mut r = [0; 1024];
a.recv_from(&mut r).unwrap();
assert_eq!(buf[..], r[..11]);
}
#[test]
fn test_send_recv_msg() {
let saddr = "0.0.0.0:9901".parse().unwrap();
let a = sync::UdpSocket::bind(saddr).unwrap();
let b = sync::UdpSocket::bind("0.0.0.0:0").unwrap();
let send_addr = b.local_addr().unwrap().ip();
let buf = b"hello world";
// let src = Source::Interface(1);
let tr = Transmit::new(saddr, *buf);
b.send_msg(&UdpState::new(), tr).unwrap();
// recv
let mut r = [0; 1024];
let meta = a.recv_msg(&mut r).unwrap();
assert_eq!(buf[..], r[..11]);
// dst addr and b addr matches!
assert_eq!(meta.dst_local_ip, Some(send_addr));
}
// #[test]
// fn test_send_recv_msg_if() {
// let addrs: Vec<_> = nix::ifaddrs::getifaddrs().unwrap().collect();
// dbg!(addrs);
// let saddr = "0.0.0.0:9901".parse().unwrap();
// let a = sync::UdpSocket::bind(saddr).unwrap();
// let b = sync::UdpSocket::bind("0.0.0.0:0").unwrap();
// let send_addr = b.local_addr().unwrap().ip();
// let buf = b"hello world";
// // let src = Source::Interface(1);
// let tr = Transmit::new(saddr, *buf);
// b.send_msg(&UdpState::new(), tr).unwrap();
// // recv
// let mut r = [0; 1024];
// let meta = a.recv_msg(&mut r).unwrap();
// assert_eq!(buf[..], r[..11]);
// // dst addr and b addr matches!
// assert_eq!(meta.dst_local_ip, Some(send_addr));
// }
}
Loading

0 comments on commit f4c0742

Please sign in to comment.