mirror of
https://github.com/chatmail/core.git
synced 2026-04-17 21:46:35 +03:00
test: Fix panic in receive_emails benchmark (#6306)
The benchmark function (e.g. `recv_all_emails()`) is executed multiple times on the same context. During the second iteration, all the emails were already in the database, so, receiving them again failed. This PR fixes that by passing in a second `iteration` counter that is different for every invocation of the benchmark function.
This commit is contained in:
@@ -12,18 +12,18 @@ use deltachat::{
|
|||||||
};
|
};
|
||||||
use tempfile::tempdir;
|
use tempfile::tempdir;
|
||||||
|
|
||||||
async fn recv_all_emails(context: Context) -> Context {
|
async fn recv_all_emails(context: Context, iteration: u32) -> Context {
|
||||||
for i in 0..100 {
|
for i in 0..100 {
|
||||||
let imf_raw = format!(
|
let imf_raw = format!(
|
||||||
"Subject: Benchmark
|
"Subject: Benchmark
|
||||||
Message-ID: Mr.OssSYnOFkhR.{i}@testrun.org
|
Message-ID: Mr.{iteration}.{i}@testrun.org
|
||||||
Date: Sat, 07 Dec 2019 19:00:27 +0000
|
Date: Sat, 07 Dec 2019 19:00:27 +0000
|
||||||
To: alice@example.com
|
To: alice@example.com
|
||||||
From: sender@testrun.org
|
From: sender@testrun.org
|
||||||
Chat-Version: 1.0
|
Chat-Version: 1.0
|
||||||
Chat-Disposition-Notification-To: sender@testrun.org
|
Chat-Disposition-Notification-To: sender@testrun.org
|
||||||
Chat-User-Avatar: 0
|
Chat-User-Avatar: 0
|
||||||
In-Reply-To: Mr.OssSYnOFkhR.{i_dec}@testrun.org
|
In-Reply-To: Mr.{iteration}.{i_dec}@testrun.org
|
||||||
MIME-Version: 1.0
|
MIME-Version: 1.0
|
||||||
|
|
||||||
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no
|
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no
|
||||||
@@ -41,11 +41,11 @@ Hello {i}",
|
|||||||
|
|
||||||
/// Receive 100 emails that remove charlie@example.com and add
|
/// Receive 100 emails that remove charlie@example.com and add
|
||||||
/// him back
|
/// him back
|
||||||
async fn recv_groupmembership_emails(context: Context) -> Context {
|
async fn recv_groupmembership_emails(context: Context, iteration: u32) -> Context {
|
||||||
for i in 0..50 {
|
for i in 0..50 {
|
||||||
let imf_raw = format!(
|
let imf_raw = format!(
|
||||||
"Subject: Benchmark
|
"Subject: Benchmark
|
||||||
Message-ID: Gr.OssSYnOFkhR.{i}@testrun.org
|
Message-ID: Gr.{iteration}.ADD.{i}@testrun.org
|
||||||
Date: Sat, 07 Dec 2019 19:00:27 +0000
|
Date: Sat, 07 Dec 2019 19:00:27 +0000
|
||||||
To: alice@example.com, b@example.com, c@example.com, d@example.com, e@example.com, f@example.com
|
To: alice@example.com, b@example.com, c@example.com, d@example.com, e@example.com, f@example.com
|
||||||
From: sender@testrun.org
|
From: sender@testrun.org
|
||||||
@@ -53,13 +53,12 @@ Chat-Version: 1.0
|
|||||||
Chat-Disposition-Notification-To: sender@testrun.org
|
Chat-Disposition-Notification-To: sender@testrun.org
|
||||||
Chat-User-Avatar: 0
|
Chat-User-Avatar: 0
|
||||||
Chat-Group-Member-Added: charlie@example.com
|
Chat-Group-Member-Added: charlie@example.com
|
||||||
In-Reply-To: Gr.OssSYnOFkhR.{i_dec}@testrun.org
|
In-Reply-To: Gr.{iteration}.REMOVE.{i_dec}@testrun.org
|
||||||
MIME-Version: 1.0
|
MIME-Version: 1.0
|
||||||
|
|
||||||
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no
|
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no
|
||||||
|
|
||||||
Hello {i}",
|
Hello {i}",
|
||||||
i = i,
|
|
||||||
i_dec = i - 1,
|
i_dec = i - 1,
|
||||||
);
|
);
|
||||||
receive_imf(&context, black_box(imf_raw.as_bytes()), false)
|
receive_imf(&context, black_box(imf_raw.as_bytes()), false)
|
||||||
@@ -68,7 +67,7 @@ Hello {i}",
|
|||||||
|
|
||||||
let imf_raw = format!(
|
let imf_raw = format!(
|
||||||
"Subject: Benchmark
|
"Subject: Benchmark
|
||||||
Message-ID: Gr.OssSYnOFkhR.{i}@testrun.org
|
Message-ID: Gr.{iteration}.REMOVE.{i}@testrun.org
|
||||||
Date: Sat, 07 Dec 2019 19:00:27 +0000
|
Date: Sat, 07 Dec 2019 19:00:27 +0000
|
||||||
To: alice@example.com, b@example.com, c@example.com, d@example.com, e@example.com, f@example.com
|
To: alice@example.com, b@example.com, c@example.com, d@example.com, e@example.com, f@example.com
|
||||||
From: sender@testrun.org
|
From: sender@testrun.org
|
||||||
@@ -76,14 +75,12 @@ Chat-Version: 1.0
|
|||||||
Chat-Disposition-Notification-To: sender@testrun.org
|
Chat-Disposition-Notification-To: sender@testrun.org
|
||||||
Chat-User-Avatar: 0
|
Chat-User-Avatar: 0
|
||||||
Chat-Group-Member-Removed: charlie@example.com
|
Chat-Group-Member-Removed: charlie@example.com
|
||||||
In-Reply-To: Gr.OssSYnOFkhR.{i_dec}@testrun.org
|
In-Reply-To: Gr.{iteration}.ADD.{i}@testrun.org
|
||||||
MIME-Version: 1.0
|
MIME-Version: 1.0
|
||||||
|
|
||||||
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no
|
Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no
|
||||||
|
|
||||||
Hello {i}",
|
Hello {i}"
|
||||||
i = i,
|
|
||||||
i_dec = i - 1,
|
|
||||||
);
|
);
|
||||||
receive_imf(&context, black_box(imf_raw.as_bytes()), false)
|
receive_imf(&context, black_box(imf_raw.as_bytes()), false)
|
||||||
.await
|
.await
|
||||||
@@ -129,11 +126,13 @@ fn criterion_benchmark(c: &mut Criterion) {
|
|||||||
group.bench_function("Receive 100 simple text msgs", |b| {
|
group.bench_function("Receive 100 simple text msgs", |b| {
|
||||||
let rt = tokio::runtime::Runtime::new().unwrap();
|
let rt = tokio::runtime::Runtime::new().unwrap();
|
||||||
let context = rt.block_on(create_context());
|
let context = rt.block_on(create_context());
|
||||||
|
let mut i = 0;
|
||||||
|
|
||||||
b.to_async(&rt).iter(|| {
|
b.to_async(&rt).iter(|| {
|
||||||
let ctx = context.clone();
|
let ctx = context.clone();
|
||||||
|
i += 1;
|
||||||
async move {
|
async move {
|
||||||
recv_all_emails(black_box(ctx)).await;
|
recv_all_emails(black_box(ctx), i).await;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -142,11 +141,13 @@ fn criterion_benchmark(c: &mut Criterion) {
|
|||||||
|b| {
|
|b| {
|
||||||
let rt = tokio::runtime::Runtime::new().unwrap();
|
let rt = tokio::runtime::Runtime::new().unwrap();
|
||||||
let context = rt.block_on(create_context());
|
let context = rt.block_on(create_context());
|
||||||
|
let mut i = 0;
|
||||||
|
|
||||||
b.to_async(&rt).iter(|| {
|
b.to_async(&rt).iter(|| {
|
||||||
let ctx = context.clone();
|
let ctx = context.clone();
|
||||||
|
i += 1;
|
||||||
async move {
|
async move {
|
||||||
recv_groupmembership_emails(black_box(ctx)).await;
|
recv_groupmembership_emails(black_box(ctx), i).await;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user