diff --git a/crates/lifecycle/src/core.rs b/crates/lifecycle/src/core.rs index ff7d15505..0fe52b9df 100644 --- a/crates/lifecycle/src/core.rs +++ b/crates/lifecycle/src/core.rs @@ -1199,7 +1199,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_zero_expiration_days() { // S3 compatibility: Expiration.Days must be a positive integer (>= 1). AWS and // the ceph s3-tests `test_lifecycle_expiration_days0` case reject Days == 0 with @@ -1233,7 +1232,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_negative_expiration_days() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1263,7 +1261,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_accepts_positive_expiration_days() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1290,7 +1287,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_accepts_one_day_boundary_values() { // Pin the exact >= 1 boundary: a value of 1 is the smallest legal positive // integer and must be accepted for every day-count field tightened for S3 @@ -1325,7 +1321,6 @@ mod tests { } #[tokio::test] - #[serial] async fn has_active_rules_accepts_zero_day_expiration() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1350,7 +1345,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_zero_noncurrent_expiration_days() { // S3 compatibility: NoncurrentVersionExpiration.NoncurrentDays must be a positive // integer (>= 1); AWS rejects 0 with InvalidArgument. @@ -1382,7 +1376,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_negative_noncurrent_expiration_days() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1412,7 +1405,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_accepts_abort_incomplete_multipart_upload_only_rule() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1438,7 +1430,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_zero_abort_incomplete_multipart_upload_days() { // S3 compatibility: AbortIncompleteMultipartUpload.DaysAfterInitiation must be a // positive integer (>= 1); AWS rejects 0 with InvalidArgument. @@ -1469,7 +1460,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_missing_abort_incomplete_multipart_upload_days() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1495,7 +1485,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_negative_abort_incomplete_multipart_upload_days() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1556,7 +1545,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_non_midnight_expiration_date() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1638,7 +1626,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_accepts_multiple_rules_without_ids() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1682,7 +1669,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_rule_id_too_long() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1709,7 +1695,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_duplicate_rule_ids() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1752,7 +1737,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_transition_without_storage_class() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1780,7 +1764,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_transition_without_date_or_days() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -1808,7 +1791,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_noncurrent_transition_without_days() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -2365,7 +2347,6 @@ mod tests { } #[tokio::test] - #[serial] async fn noncurrent_versions_expiration_limit_returns_configured_limits() { let lc = Arc::new(BucketLifecycleConfiguration { expiry_updated_at: None, @@ -2456,7 +2437,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_invalid_status_case_sensitive() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -2483,7 +2463,6 @@ mod tests { } #[tokio::test] - #[serial] async fn filter_rules_respects_filter_prefix() { let filter = LifecycleRuleFilter { prefix: Some("prefix".to_string()), @@ -2528,7 +2507,6 @@ mod tests { } #[tokio::test] - #[serial] async fn filter_rules_respects_filter_and_prefix() { let and = s3s::dto::LifecycleRuleAndOperator { prefix: Some("prefix".to_string()), @@ -2578,7 +2556,6 @@ mod tests { } #[tokio::test] - #[serial] async fn filter_rules_respects_filter_tag() { let filter = LifecycleRuleFilter { tag: Some(s3s::dto::Tag { @@ -2632,7 +2609,6 @@ mod tests { } #[tokio::test] - #[serial] async fn filter_rules_respects_filter_and_tags() { let filter = LifecycleRuleFilter { and: Some(s3s::dto::LifecycleRuleAndOperator { @@ -3086,7 +3062,6 @@ mod tests { // --- TASK-002 tests: Object Lock + ExpiredObjectDeleteMarker compatibility --- #[tokio::test] - #[serial] async fn validate_allows_expired_object_delete_marker_on_locked_bucket() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -3118,7 +3093,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_allows_expired_object_delete_marker_on_unlocked_bucket() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -3146,7 +3120,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_allows_non_delete_marker_expiration_on_locked_bucket() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -3179,7 +3152,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_del_marker_expiration_on_locked_bucket() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -3210,7 +3182,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_rejects_zero_day_del_marker_expiration_on_locked_bucket() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -3594,7 +3565,6 @@ mod tests { // --- TASK-007 tests: Legacy Prefix/Filter conflict --- #[tokio::test] - #[serial] async fn validate_rejects_prefix_and_filter_both_present() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -3623,7 +3593,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_allows_prefix_without_filter() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -3650,7 +3619,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_allows_filter_without_prefix() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -3680,7 +3648,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_allows_empty_prefix_with_filter() { // Empty prefix should be treated as "not set" let lc = BucketLifecycleConfiguration { @@ -3713,7 +3680,6 @@ mod tests { // --- TASK-004 tests: ExpiredObjectAllVersions --- #[tokio::test] - #[serial] async fn validate_rejects_expired_object_all_versions_on_locked_bucket() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, @@ -3745,7 +3711,6 @@ mod tests { } #[tokio::test] - #[serial] async fn validate_allows_expired_object_all_versions_on_unlocked_bucket() { let lc = BucketLifecycleConfiguration { expiry_updated_at: None, diff --git a/crates/scanner/src/scanner.rs b/crates/scanner/src/scanner.rs index 11023eaac..fe743a1c6 100644 --- a/crates/scanner/src/scanner.rs +++ b/crates/scanner/src/scanner.rs @@ -4574,7 +4574,6 @@ mod tests { } #[test] - #[serial] fn test_randomized_cycle_delay_keeps_configured_start_delay() { // 120s with ±10% jitter should stay clearly above the historic 30s cap. let delay = randomized_cycle_delay_for(Duration::from_secs(120)); @@ -4593,7 +4592,6 @@ mod tests { } #[test] - #[serial] fn test_initial_scanner_delay_uses_configured_start_delay() { let delay = initial_scanner_delay_for(Some(120)); assert!(delay >= Duration::from_secs(108)); @@ -4613,14 +4611,12 @@ mod tests { } #[test] - #[serial] fn test_initial_scanner_delay_skips_for_cold_usage_cache_with_buckets() { let delay = initial_scanner_delay_for_startup(Some(120), true, true, false); assert_eq!(delay, Duration::ZERO); } #[test] - #[serial] fn test_initial_scanner_delay_keeps_configured_delay_for_warm_usage_cache_no_replication() { let delay = initial_scanner_delay_for_startup(Some(120), false, true, false); assert!(delay >= Duration::from_secs(108)); @@ -4628,14 +4624,12 @@ mod tests { } #[test] - #[serial] fn test_initial_scanner_delay_skips_for_cold_usage_cache_without_buckets() { let delay = initial_scanner_delay_for_startup(Some(120), true, false, false); assert_eq!(delay, Duration::ZERO); } #[test] - #[serial] fn test_initial_scanner_delay_skips_for_active_replication_warm_cache() { // Warm cache + active replication rules → skip startup delay so that FAILED-status objects // from a crash are healed on the first cycle, not after a 27-33 min sleep. @@ -4644,7 +4638,6 @@ mod tests { } #[test] - #[serial] fn test_initial_scanner_delay_keeps_delay_for_replication_without_buckets() { // Active replication but no buckets → no objects to scan, keep normal delay. let delay = initial_scanner_delay_for_startup(Some(120), false, false, true); @@ -7399,7 +7392,6 @@ mod tests { } #[test] - #[serial] fn clean_idle_cap_allows_policy_max_when_bitrot_is_disabled() { let config = ScannerRuntimeConfig { bitrot_cycle: None, @@ -7515,7 +7507,6 @@ mod tests { } #[test] - #[serial] fn test_randomized_cycle_delay_handles_small_start_delay() { // 0 is treated as minimum 1 second before jitter, with lower bound preserved. let delay = randomized_cycle_delay_for(Duration::from_secs(0)); @@ -8174,7 +8165,6 @@ mod tests { } #[test] - #[serial] fn test_background_heal_info_for_scan_complete_marks_deep_idle() { let started_at = Utc::now(); let info = BackgroundHealInfo { @@ -8192,7 +8182,6 @@ mod tests { } #[test] - #[serial] fn test_background_heal_info_for_scan_complete_leaves_normal_scan_unchanged() { let info = BackgroundHealInfo { bitrot_start_time: Some(Utc::now()), @@ -8204,7 +8193,6 @@ mod tests { } #[test] - #[serial] fn test_background_heal_info_for_failed_scan_preserves_deep_mode() { let info = BackgroundHealInfo { bitrot_start_time: Some(Utc::now()),