spawn app for each integration test
also adds missing dep to flake
This commit is contained in:
41
.gitea/workflows/cargo.yaml
Normal file
41
.gitea/workflows/cargo.yaml
Normal 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 '*'
|
||||||
16
tests/common/mod.rs
Normal file
16
tests/common/mod.rs
Normal 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}")
|
||||||
|
}
|
||||||
@ -1,18 +1,11 @@
|
|||||||
|
mod common;
|
||||||
|
use common::spawn_app;
|
||||||
use reqwest::StatusCode;
|
use reqwest::StatusCode;
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_healthcheck() -> reqwest::Result<()> {
|
async fn test_healthcheck() -> 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}"#);
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn test_healthcheck2() -> reqwest::Result<()> {
|
|
||||||
let response = reqwest::get("http://localhost:7000/healthcheck").await?;
|
|
||||||
|
|
||||||
assert_eq!(response.status(), StatusCode::OK);
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
assert_eq!(response.text().await?, r#"{"healthy":true}"#);
|
assert_eq!(response.text().await?, r#"{"healthy":true}"#);
|
||||||
|
|||||||
Reference in New Issue
Block a user