1
0
mirror of https://github.com/fafhrd91/actix-net synced 2024-12-03 19:42:13 +01:00

split -server and -tls msrv and raise to 1.52 (#398)

This commit is contained in:
Rob Ede 2021-10-19 14:53:42 +01:00 committed by GitHub
parent 00775884f8
commit ca77d8d835
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 107 additions and 34 deletions

View File

@ -5,18 +5,21 @@ ci-doctest = "test --workspace --all-features --doc --no-fail-fast -- --nocaptur
# just check the library (without dev deps) # just check the library (without dev deps)
ci-check-min = "hack --workspace check --no-default-features" ci-check-min = "hack --workspace check --no-default-features"
ci-check-lib = "hack --workspace --feature-powerset --exclude-features io-uring check" ci-check-lib = "hack --workspace --feature-powerset --exclude-features=io-uring check"
ci-check-lib-linux = "hack --workspace --feature-powerset check" ci-check-lib-linux = "hack --workspace --feature-powerset check"
# check everything # check everything
ci-check = "hack --workspace --feature-powerset --exclude-features io-uring check --tests --examples" ci-check = "hack --workspace --feature-powerset --exclude-features=io-uring check --tests --examples"
ci-check-linux = "hack --workspace --feature-powerset check --tests --examples" ci-check-linux = "hack --workspace --feature-powerset check --tests --examples"
# tests avoiding io-uring feature # tests avoiding io-uring feature
ci-test = "hack test --workspace --exclude=actix-rt --exclude=actix-server --all-features --lib --tests --no-fail-fast -- --nocapture" ci-test = "hack test --workspace --exclude=actix-rt --exclude=actix-server --all-features --lib --tests --no-fail-fast -- --nocapture"
ci-test-rt = " hack --feature-powerset --exclude-features io-uring test --package=actix-rt --lib --tests --no-fail-fast -- --nocapture" ci-test-rt = " hack --feature-powerset --exclude-features=io-uring test --package=actix-rt --lib --tests --no-fail-fast -- --nocapture"
ci-test-server = "hack --feature-powerset --exclude-features io-uring test --package=actix-server --lib --tests --no-fail-fast -- --nocapture" ci-test-server = "hack --feature-powerset --exclude-features=io-uring test --package=actix-server --lib --tests --no-fail-fast -- --nocapture"
# test with io-uring feature # test with io-uring feature
ci-test-rt-linux = " hack --feature-powerset test --package=actix-rt --lib --tests --no-fail-fast -- --nocapture" ci-test-rt-linux = " hack --feature-powerset test --package=actix-rt --lib --tests --no-fail-fast -- --nocapture"
ci-test-server-linux = "hack --feature-powerset test --package=actix-server --lib --tests --no-fail-fast -- --nocapture" ci-test-server-linux = "hack --feature-powerset test --package=actix-server --lib --tests --no-fail-fast -- --nocapture"
# test lower msrv
ci-test-lower-msrv = "hack --workspace --feature-powerset test --lib --tests --no-fail-fast -- --nocapture"

View File

@ -18,7 +18,7 @@ jobs:
- { name: Windows (MinGW), os: windows-latest, triple: x86_64-pc-windows-gnu } - { name: Windows (MinGW), os: windows-latest, triple: x86_64-pc-windows-gnu }
- { name: Windows (32-bit), os: windows-latest, triple: i686-pc-windows-msvc } - { name: Windows (32-bit), os: windows-latest, triple: i686-pc-windows-msvc }
version: version:
- 1.46.0 # MSRV - 1.52.0 # MSRV for -server and -tls
- stable - stable
- nightly - nightly
@ -64,8 +64,7 @@ jobs:
# - name: Generate Cargo.lock # - name: Generate Cargo.lock
# uses: actions-rs/cargo@v1 # uses: actions-rs/cargo@v1
# with: # with: { command: generate-lockfile }
# command: generate-lockfile
# - name: Cache Dependencies # - name: Cache Dependencies
# uses: Swatinem/rust-cache@v1.2.0 # uses: Swatinem/rust-cache@v1.2.0
@ -117,27 +116,67 @@ jobs:
cargo ci-test-rt-linux cargo ci-test-rt-linux
cargo ci-test-server-linux cargo ci-test-server-linux
- name: Generate coverage file - name: Clear the cargo caches
if: >
matrix.target.os == 'ubuntu-latest'
&& matrix.version == 'stable'
&& github.ref == 'refs/heads/master'
run: | run: |
cargo install cargo-tarpaulin cargo install cargo-cache --version 0.6.2 --no-default-features --features ci-autoclean
cargo tarpaulin --out Xml --verbose cargo-cache
- name: Upload to Codecov
if: > build_and_test_lower_msrv:
matrix.target.os == 'ubuntu-latest' name: Linux / 1.46 (lower MSRV)
&& matrix.version == 'stable' runs-on: ubuntu-latest
&& github.ref == 'refs/heads/master' steps:
uses: codecov/codecov-action@v1 - uses: actions/checkout@v2
with: { file: cobertura.xml }
- name: Install 1.46.0 # MSRV for all but -server and -tls
uses: actions-rs/toolchain@v1
with:
toolchain: 1.46.0-x86_64-unknown-linux-gnu
profile: minimal
override: true
- name: Install cargo-hack
uses: actions-rs/cargo@v1
with:
command: install
args: cargo-hack
- name: tests
run: cargo ci-test-lower-msrv
- name: Clear the cargo caches - name: Clear the cargo caches
run: | run: |
cargo install cargo-cache --version 0.6.2 --no-default-features --features ci-autoclean cargo install cargo-cache --version 0.6.2 --no-default-features --features ci-autoclean
cargo-cache cargo-cache
coverage:
name: coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install Rust (nightly)
uses: actions-rs/toolchain@v1
with:
toolchain: stable-x86_64-unknown-linux-gnu
profile: minimal
override: true
- name: Generate Cargo.lock
uses: actions-rs/cargo@v1
with: { command: generate-lockfile }
- name: Cache Dependencies
uses: Swatinem/rust-cache@v1.3.0
- name: Generate coverage file
if: github.ref == 'refs/heads/master'
run: |
cargo install cargo-tarpaulin
cargo tarpaulin --out Xml --verbose
- name: Upload to Codecov
if: github.ref == 'refs/heads/master'
uses: codecov/codecov-action@v1
with: { file: cobertura.xml }
rustdoc: rustdoc:
name: rustdoc name: rustdoc
runs-on: ubuntu-latest runs-on: ubuntu-latest

View File

@ -178,7 +178,7 @@ impl<T, U> Framed<T, U> {
U: Decoder, U: Decoder,
{ {
loop { loop {
let mut this = self.as_mut().project(); let this = self.as_mut().project();
// Repeatedly call `decode` or `decode_eof` as long as it is "readable". Readable is // Repeatedly call `decode` or `decode_eof` as long as it is "readable". Readable is
// defined as not having returned `None`. If the upstream has returned EOF, and the // defined as not having returned `None`. If the upstream has returned EOF, and the
// decoder is no longer readable, it can be assumed that the decoder will never become // decoder is no longer readable, it can be assumed that the decoder will never become
@ -186,7 +186,7 @@ impl<T, U> Framed<T, U> {
if this.flags.contains(Flags::READABLE) { if this.flags.contains(Flags::READABLE) {
if this.flags.contains(Flags::EOF) { if this.flags.contains(Flags::EOF) {
match this.codec.decode_eof(&mut this.read_buf) { match this.codec.decode_eof(this.read_buf) {
Ok(Some(frame)) => return Poll::Ready(Some(Ok(frame))), Ok(Some(frame)) => return Poll::Ready(Some(Ok(frame))),
Ok(None) => return Poll::Ready(None), Ok(None) => return Poll::Ready(None),
Err(e) => return Poll::Ready(Some(Err(e))), Err(e) => return Poll::Ready(Some(Err(e))),
@ -195,7 +195,7 @@ impl<T, U> Framed<T, U> {
log::trace!("attempting to decode a frame"); log::trace!("attempting to decode a frame");
match this.codec.decode(&mut this.read_buf) { match this.codec.decode(this.read_buf) {
Ok(Some(frame)) => { Ok(Some(frame)) => {
log::trace!("frame decoded from buffer"); log::trace!("frame decoded from buffer");
return Poll::Ready(Some(Ok(frame))); return Poll::Ready(Some(Ok(frame)));

View File

@ -22,4 +22,5 @@ syn = { version = "^1", features = ["full"] }
actix-rt = "2.0.0" actix-rt = "2.0.0"
futures-util = { version = "0.3.7", default-features = false } futures-util = { version = "0.3.7", default-features = false }
rustversion = "1"
trybuild = "1" trybuild = "1"

View File

@ -198,5 +198,5 @@ pub fn test(args: TokenStream, item: TokenStream) -> TokenStream {
fn input_and_compile_error(mut item: TokenStream, err: syn::Error) -> TokenStream { fn input_and_compile_error(mut item: TokenStream, err: syn::Error) -> TokenStream {
let compile_err = TokenStream::from(err.to_compile_error()); let compile_err = TokenStream::from(err.to_compile_error());
item.extend(compile_err); item.extend(compile_err);
return item; item
} }

View File

@ -1,3 +1,4 @@
#[rustversion::stable(1.46)] // MSRV
#[test] #[test]
fn compile_macros() { fn compile_macros() {
let t = trybuild::TestCases::new(); let t = trybuild::TestCases::new();

View File

@ -155,6 +155,7 @@ impl System {
pub struct SystemRunner { pub struct SystemRunner {
rt: Runtime, rt: Runtime,
stop_rx: oneshot::Receiver<i32>, stop_rx: oneshot::Receiver<i32>,
#[allow(dead_code)]
system: System, system: System,
} }

View File

@ -81,14 +81,9 @@ struct Accept {
} }
/// Array of u128 with every bit as marker for a worker handle's availability. /// Array of u128 with every bit as marker for a worker handle's availability.
#[derive(Debug, Default)]
struct Availability([u128; 4]); struct Availability([u128; 4]);
impl Default for Availability {
fn default() -> Self {
Self([0; 4])
}
}
impl Availability { impl Availability {
/// Check if any worker handle is available /// Check if any worker handle is available
#[inline(always)] #[inline(always)]

View File

@ -181,6 +181,7 @@ impl WorkerHandleAccept {
/// Held by [ServerBuilder](crate::builder::ServerBuilder). /// Held by [ServerBuilder](crate::builder::ServerBuilder).
#[derive(Debug)] #[derive(Debug)]
pub(crate) struct WorkerHandleServer { pub(crate) struct WorkerHandleServer {
#[allow(dead_code)]
idx: usize, idx: usize,
tx: UnboundedSender<Stop>, tx: UnboundedSender<Stop>,
} }

View File

@ -0,0 +1,33 @@
use std::{future::Future, sync::mpsc, time::Duration};
async fn oracle<F, Fut>(f: F) -> (u32, u32)
where
F: FnOnce() -> Fut + Clone + Send + 'static,
Fut: Future<Output = u32> + 'static,
{
let f1 = actix_rt::spawn(f.clone()());
let f2 = actix_rt::spawn(f());
(f1.await.unwrap(), f2.await.unwrap())
}
#[actix_rt::main]
async fn main() {
let (tx, rx) = mpsc::channel();
let (r1, r2) = oracle({
let tx = tx.clone();
|| async move {
tx.send(()).unwrap();
4 * 4
}
})
.await;
assert_eq!(r1, r2);
tx.send(()).unwrap();
rx.recv_timeout(Duration::from_millis(100)).unwrap();
rx.recv_timeout(Duration::from_millis(100)).unwrap();
}

View File

@ -52,9 +52,9 @@ pub fn fn_factory<F, Cfg, Srv, Req, Fut, Err>(
f: F, f: F,
) -> FnServiceNoConfig<F, Cfg, Srv, Req, Fut, Err> ) -> FnServiceNoConfig<F, Cfg, Srv, Req, Fut, Err>
where where
Srv: Service<Req>,
F: Fn() -> Fut, F: Fn() -> Fut,
Fut: Future<Output = Result<Srv, Err>>, Fut: Future<Output = Result<Srv, Err>>,
Srv: Service<Req>,
{ {
FnServiceNoConfig::new(f) FnServiceNoConfig::new(f)
} }

View File

@ -4,9 +4,7 @@ version = "3.0.0-beta.5"
authors = ["Nikolay Kim <fafhrd91@gmail.com>"] authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
description = "TLS acceptor and connector services for Actix ecosystem" description = "TLS acceptor and connector services for Actix ecosystem"
keywords = ["network", "tls", "ssl", "async", "transport"] keywords = ["network", "tls", "ssl", "async", "transport"]
homepage = "https://actix.rs"
repository = "https://github.com/actix/actix-net.git" repository = "https://github.com/actix/actix-net.git"
documentation = "https://docs.rs/actix-tls"
categories = ["network-programming", "asynchronous"] categories = ["network-programming", "asynchronous"]
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
edition = "2018" edition = "2018"

1
clippy.toml Normal file
View File

@ -0,0 +1 @@
msrv = "1.48"