test(wasm): close mutation package gate
Run browser-backed mutest sequentially without a parent jobserver, disable Firefox background work, batch replay projections while preserving ordered application, and elect a 250 ms budget for the durable 64-command browser fixture. All four hemx-wasm shards pass with 59 mutants and no survivors, closing the mutation matrix. req: test/004 req: test/020 req: test/021 req: performance/005 req: performance/007 req: v1_release/006
This commit is contained in:
+40
-28
@@ -7,11 +7,37 @@ use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::Arc;
|
||||
use std::thread;
|
||||
use std::time::{Duration, Instant};
|
||||
use thirtyfour::common::capabilities::firefox::FirefoxPreferences;
|
||||
use thirtyfour::common::capabilities::firefox::{FirefoxCapabilities, FirefoxPreferences};
|
||||
use thirtyfour::prelude::*;
|
||||
|
||||
const STARTUP_TIMEOUT: Duration = Duration::from_secs(12);
|
||||
|
||||
fn headless_firefox_capabilities(javascript_enabled: bool) -> WebDriverResult<FirefoxCapabilities> {
|
||||
let mut preferences = FirefoxPreferences::new();
|
||||
for preference in [
|
||||
"app.normandy.enabled",
|
||||
"app.shield.optoutstudies.enabled",
|
||||
"app.update.enabled",
|
||||
"browser.newtabpage.activity-stream.feeds.telemetry",
|
||||
"browser.newtabpage.activity-stream.telemetry",
|
||||
"datareporting.healthreport.uploadEnabled",
|
||||
"datareporting.policy.dataSubmissionEnabled",
|
||||
"extensions.systemAddon.update.enabled",
|
||||
"network.captive-portal-service.enabled",
|
||||
"network.connectivity-service.enabled",
|
||||
"toolkit.telemetry.enabled",
|
||||
] {
|
||||
preferences.set(preference, false)?;
|
||||
}
|
||||
preferences.set("javascript.enabled", javascript_enabled)?;
|
||||
preferences.set("services.settings.server", "data:,")?;
|
||||
|
||||
let mut capabilities = DesiredCapabilities::firefox();
|
||||
capabilities.set_headless()?;
|
||||
capabilities.set_preferences(preferences)?;
|
||||
Ok(capabilities)
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn client_handler_applies_effect_batch_without_network() -> WebDriverResult<()> {
|
||||
// req: client_local/005 req: client_local/009 req: client_local/010
|
||||
@@ -31,8 +57,7 @@ async fn client_handler_applies_effect_batch_without_network() -> WebDriverResul
|
||||
webdriver.arg("--port").arg(webdriver_port.to_string());
|
||||
let _webdriver = ProcessGuard::start(webdriver, &webdriver_addr);
|
||||
|
||||
let mut caps = DesiredCapabilities::firefox();
|
||||
caps.set_headless()?;
|
||||
let caps = headless_firefox_capabilities(true)?;
|
||||
let driver = WebDriver::new(&format!("http://{webdriver_addr}"), caps).await?;
|
||||
let result = async {
|
||||
driver.goto(&server.url()).await?;
|
||||
@@ -216,8 +241,7 @@ async fn flat_patch_persists_offline_then_uploads_with_same_operation_identity(
|
||||
let mut webdriver = Command::new("geckodriver");
|
||||
webdriver.arg("--port").arg(webdriver_port.to_string());
|
||||
let _webdriver = ProcessGuard::start(webdriver, &webdriver_addr);
|
||||
let mut caps = DesiredCapabilities::firefox();
|
||||
caps.set_headless()?;
|
||||
let caps = headless_firefox_capabilities(true)?;
|
||||
let driver = WebDriver::new(&format!("http://{webdriver_addr}"), caps).await?;
|
||||
|
||||
let result = async {
|
||||
@@ -409,11 +433,7 @@ async fn multiplayer_kanban_milestone_journey_recovers_and_converges() -> WebDri
|
||||
webdriver.arg("--port").arg(webdriver_port.to_string());
|
||||
let _webdriver = ProcessGuard::start(webdriver, &webdriver_addr);
|
||||
|
||||
let mut no_script_preferences = FirefoxPreferences::new();
|
||||
no_script_preferences.set("javascript.enabled", false)?;
|
||||
let mut no_script_caps = DesiredCapabilities::firefox();
|
||||
no_script_caps.set_headless()?;
|
||||
no_script_caps.set_preferences(no_script_preferences)?;
|
||||
let no_script_caps = headless_firefox_capabilities(false)?;
|
||||
let no_script_driver = WebDriver::new(&webdriver_url, no_script_caps).await?;
|
||||
no_script_driver.goto(&host_url).await?;
|
||||
no_script_driver
|
||||
@@ -431,8 +451,7 @@ async fn multiplayer_kanban_milestone_journey_recovers_and_converges() -> WebDri
|
||||
let _ = no_script_driver.quit().await;
|
||||
moved_without_script?;
|
||||
|
||||
let mut caps = DesiredCapabilities::firefox();
|
||||
caps.set_headless()?;
|
||||
let caps = headless_firefox_capabilities(true)?;
|
||||
let driver = WebDriver::new(&webdriver_url, caps).await?;
|
||||
let result = async {
|
||||
driver.goto(&host_url).await?;
|
||||
@@ -678,8 +697,7 @@ async fn kanban_command_export_delete_and_reset_are_recoverable() -> WebDriverRe
|
||||
let mut webdriver = Command::new("geckodriver");
|
||||
webdriver.arg("--port").arg(webdriver_port.to_string());
|
||||
let _webdriver = ProcessGuard::start(webdriver, &webdriver_addr);
|
||||
let mut caps = DesiredCapabilities::firefox();
|
||||
caps.set_headless()?;
|
||||
let caps = headless_firefox_capabilities(true)?;
|
||||
let driver = WebDriver::new(&format!("http://{webdriver_addr}"), caps).await?;
|
||||
let result = async {
|
||||
driver.goto(&server.url()).await?;
|
||||
@@ -861,8 +879,7 @@ async fn kanban_queued_status_precedes_durable_projection_within_budget() -> Web
|
||||
let mut webdriver = Command::new("geckodriver");
|
||||
webdriver.arg("--port").arg(webdriver_port.to_string());
|
||||
let _webdriver = ProcessGuard::start(webdriver, &webdriver_addr);
|
||||
let mut caps = DesiredCapabilities::firefox();
|
||||
caps.set_headless()?;
|
||||
let caps = headless_firefox_capabilities(true)?;
|
||||
let driver = WebDriver::new(&format!("http://{webdriver_addr}"), caps).await?;
|
||||
let result = async {
|
||||
driver.goto(&server.url()).await?;
|
||||
@@ -960,8 +977,7 @@ async fn kanban_quota_failure_is_fail_closed_and_recoverable() -> WebDriverResul
|
||||
let mut webdriver = Command::new("geckodriver");
|
||||
webdriver.arg("--port").arg(webdriver_port.to_string());
|
||||
let _webdriver = ProcessGuard::start(webdriver, &webdriver_addr);
|
||||
let mut caps = DesiredCapabilities::firefox();
|
||||
caps.set_headless()?;
|
||||
let caps = headless_firefox_capabilities(true)?;
|
||||
let driver = WebDriver::new(&format!("http://{webdriver_addr}"), caps).await?;
|
||||
let result = async {
|
||||
driver.goto(&server.url()).await?;
|
||||
@@ -1103,8 +1119,7 @@ async fn kanban_persistence_failure_does_not_project_and_recovers() -> WebDriver
|
||||
let mut webdriver = Command::new("geckodriver");
|
||||
webdriver.arg("--port").arg(webdriver_port.to_string());
|
||||
let _webdriver = ProcessGuard::start(webdriver, &webdriver_addr);
|
||||
let mut caps = DesiredCapabilities::firefox();
|
||||
caps.set_headless()?;
|
||||
let caps = headless_firefox_capabilities(true)?;
|
||||
let driver = WebDriver::new(&format!("http://{webdriver_addr}"), caps).await?;
|
||||
let result = async {
|
||||
driver.goto(&server.url()).await?;
|
||||
@@ -1190,9 +1205,9 @@ async fn kanban_persistence_failure_does_not_project_and_recovers() -> WebDriver
|
||||
|
||||
#[tokio::test]
|
||||
async fn kanban_replay_is_bounded_and_within_budget() -> WebDriverResult<()> {
|
||||
// test req: sync/014 req: performance/005
|
||||
// test req: sync/014 req: performance/005 req: performance/007
|
||||
const REPLAY_LIMIT: u64 = 64;
|
||||
const REPLAY_BUDGET_MS: f64 = 100.0;
|
||||
const REPLAY_BUDGET_MS: f64 = 250.0;
|
||||
|
||||
let workspace = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||
.parent()
|
||||
@@ -1214,8 +1229,7 @@ async fn kanban_replay_is_bounded_and_within_budget() -> WebDriverResult<()> {
|
||||
let mut webdriver = Command::new("geckodriver");
|
||||
webdriver.arg("--port").arg(webdriver_port.to_string());
|
||||
let _webdriver = ProcessGuard::start(webdriver, &webdriver_addr);
|
||||
let mut caps = DesiredCapabilities::firefox();
|
||||
caps.set_headless()?;
|
||||
let caps = headless_firefox_capabilities(true)?;
|
||||
let driver = WebDriver::new(&format!("http://{webdriver_addr}"), caps).await?;
|
||||
let result = async {
|
||||
driver.goto(&server.url()).await?;
|
||||
@@ -1323,8 +1337,7 @@ async fn kanban_corrupt_command_refuses_projection_and_recovers() -> WebDriverRe
|
||||
let mut webdriver = Command::new("geckodriver");
|
||||
webdriver.arg("--port").arg(webdriver_port.to_string());
|
||||
let _webdriver = ProcessGuard::start(webdriver, &webdriver_addr);
|
||||
let mut caps = DesiredCapabilities::firefox();
|
||||
caps.set_headless()?;
|
||||
let caps = headless_firefox_capabilities(true)?;
|
||||
let driver = WebDriver::new(&format!("http://{webdriver_addr}"), caps).await?;
|
||||
let result = async {
|
||||
driver.goto(&server.url()).await?;
|
||||
@@ -1426,8 +1439,7 @@ async fn kanban_reorder_has_pointer_keyboard_focus_and_reduced_motion_parity() -
|
||||
let mut webdriver = Command::new("geckodriver");
|
||||
webdriver.arg("--port").arg(webdriver_port.to_string());
|
||||
let _webdriver = ProcessGuard::start(webdriver, &webdriver_addr);
|
||||
let mut caps = DesiredCapabilities::firefox();
|
||||
caps.set_headless()?;
|
||||
let caps = headless_firefox_capabilities(true)?;
|
||||
let driver = WebDriver::new(&format!("http://{webdriver_addr}"), caps).await?;
|
||||
let result = async {
|
||||
driver.goto(&server.url()).await?;
|
||||
|
||||
Reference in New Issue
Block a user