spawn app for each integration test
Some checks failed
Cargo / build (push) Failing after 2m55s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 8s

also adds missing dep to flake
This commit is contained in:
2025-07-18 09:04:37 +01:00
parent a54648d11b
commit 9a2caf0921
4 changed files with 62 additions and 11 deletions

View File

@ -0,0 +1,41 @@
name: Cargo
run-name: ${{ gitea.actor }} is verifying cargo build and tests
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Install latest stable
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
components: rustfmt, clippy
- name: Build Project
uses: actions-rs/cargo@v1
with:
command: build
args: --release
- name: Run Clippy
uses: actions-rs/cargo@v1
with:
command: clippy
args: -Dwarnings -Wclippy::correctness -Wclippy::complexity -Wclippy::perf -Aclippy::missing_errors_doc -Aclippy::missing_panics_doc
- name: Run Unit Tests
uses: actions-rs/cargo@v1
with:
command: test
args: --lib --bins
- name: Run Integration Tests
uses: actions-rs/cargo@v1
with:
command: test
args: --tests '*'

View File

@ -31,6 +31,7 @@
nodejs
pnpm
just
openssl
];
};

16
tests/common/mod.rs Normal file
View File

@ -0,0 +1,16 @@
use std::net::TcpListener;
pub fn spawn_app() -> String {
let listener = TcpListener::bind("127.0.0.1:0").expect("Failed to bind random port");
let _ = listener.set_nonblocking(true);
// We retrieve the port assigned to us by the OS
let port = listener.local_addr().unwrap().port();
let server = nuchat::run(
tokio::net::TcpListener::from_std(listener)
.expect("Failed to convert from_std to tokio listener"),
)
.expect("Failed to bind address");
tokio::spawn(server.into_future());
// We return the application address to the caller!
format!("http://127.0.0.1:{port}")
}

View File

@ -1,18 +1,11 @@
mod common;
use common::spawn_app;
use reqwest::StatusCode;
#[tokio::test]
async fn test_healthcheck() -> reqwest::Result<()> {
let response = reqwest::get("http://localhost:7000/healthcheck").await?;
assert_eq!(response.status(), StatusCode::OK);
assert_eq!(response.text().await?, r#"{"healthy":true}"#);
Ok(())
}
#[tokio::test]
async fn test_healthcheck2() -> reqwest::Result<()> {
let response = reqwest::get("http://localhost:7000/healthcheck").await?;
let address = spawn_app();
let response = reqwest::get(format!("{address}/api/healthcheck")).await?;
assert_eq!(response.status(), StatusCode::OK);
assert_eq!(response.text().await?, r#"{"healthy":true}"#);