chrome-for-testing-manager 0.11.0

Programmatic management of chrome-for-testing installations.
Documentation
//! Verifies that multiple `WebDriver` sessions can run concurrently against a single shared
//! [`Chromedriver`].

use assertr::prelude::*;
use chrome_for_testing_manager::{Chromedriver, ChromedriverRunConfig};
use rootcause::Report;
use std::sync::Arc;
use tokio::task::JoinSet;

mod common;

#[tokio::test(flavor = "multi_thread")]
async fn multiple_sessions() -> Result<(), Report> {
    tracing_subscriber::fmt().try_init().ok();

    let chromedriver = Arc::new(Chromedriver::run(ChromedriverRunConfig::default()).await?);

    let mut tests = JoinSet::new();
    for _ in 0..5 {
        let chromedriver = Arc::clone(&chromedriver);
        tests.spawn(async move {
            chromedriver
                .session()
                .run(common::wikipedia::test_wikipedia)
                .await
        });
    }

    let results = tests.join_all().await;
    for result in results {
        assert_that!(result).is_ok();
    }

    let _exit_status = Arc::try_unwrap(chromedriver)
        .expect("no more clones of chromedriver to be alive")
        .terminate()
        .await?;

    Ok(())
}