Skip to content

Commit 66b8f46

Browse files
committed
fix: add tests for PKU-related AV
1 parent e5a31d9 commit 66b8f46

File tree

3 files changed

+118
-0
lines changed

3 files changed

+118
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
Deno.serve(() => {
2+
// NOTE(Nyannyacha): This should be hot enough to V8 decides JIT compilation.
3+
4+
const before = performance.now();
5+
const num = mySlowFunction(11);
6+
const after = performance.now();
7+
8+
console.log(`time: ${after - before}ms`);
9+
10+
return new Response(
11+
`meow: ${num} (${after - before})`,
12+
{
13+
status: 200
14+
}
15+
);
16+
});
17+
18+
function mySlowFunction(baseNumber) {
19+
let result = 0;
20+
for (var i = Math.pow(baseNumber, 7); i >= 0; i--) {
21+
result += Math.atan(i) * Math.tan(i);
22+
};
23+
return result;
24+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#[cfg(target_os = "linux")]
2+
#[path = "../src/utils/integration_test_helper.rs"]
3+
mod integration_test_helper;
4+
5+
#[cfg(target_os = "linux")]
6+
#[tokio::test]
7+
async fn test_not_trigger_pku_sigsegv_due_to_jit_compilation_non_cli() {
8+
use std::collections::HashMap;
9+
10+
use base::rt_worker::worker_ctx::{create_user_worker_pool, create_worker, TerminationToken};
11+
use http::{Request, Response};
12+
use hyper::Body;
13+
use integration_test_helper::create_conn_watch;
14+
15+
use sb_workers::context::{
16+
MainWorkerRuntimeOpts, WorkerContextInitOpts, WorkerRequestMsg, WorkerRuntimeOpts,
17+
};
18+
use tokio::sync::oneshot;
19+
20+
let pool_termination_token = TerminationToken::new();
21+
let main_termination_token = TerminationToken::new();
22+
23+
// create a user worker pool
24+
let user_worker_msgs_tx = create_user_worker_pool(
25+
integration_test_helper::test_user_worker_pool_policy(),
26+
None,
27+
Some(pool_termination_token.clone()),
28+
)
29+
.await
30+
.unwrap();
31+
32+
let opts = WorkerContextInitOpts {
33+
service_path: "./test_cases/slow_resp".into(),
34+
no_module_cache: false,
35+
import_map_path: None,
36+
env_vars: HashMap::new(),
37+
events_rx: None,
38+
timing: None,
39+
maybe_eszip: None,
40+
maybe_entrypoint: None,
41+
maybe_module_code: None,
42+
conf: WorkerRuntimeOpts::MainWorker(MainWorkerRuntimeOpts {
43+
worker_pool_tx: user_worker_msgs_tx,
44+
}),
45+
};
46+
47+
let worker_req_tx = create_worker((opts, main_termination_token.clone()))
48+
.await
49+
.unwrap();
50+
51+
let (res_tx, res_rx) = oneshot::channel::<Result<Response<Body>, hyper::Error>>();
52+
53+
let req = Request::builder()
54+
.uri("/slow_resp")
55+
.method("GET")
56+
.body(Body::empty())
57+
.unwrap();
58+
59+
let (conn_tx, conn_rx) = create_conn_watch();
60+
let msg = WorkerRequestMsg {
61+
req,
62+
res_tx,
63+
conn_watch: Some(conn_rx),
64+
};
65+
66+
let _ = worker_req_tx.send(msg);
67+
68+
let res = res_rx.await.unwrap().unwrap();
69+
assert!(res.status().as_u16() == 200);
70+
71+
let body_bytes = hyper::body::to_bytes(res.into_body()).await.unwrap();
72+
73+
assert!(body_bytes.starts_with(b"meow: "));
74+
75+
drop(conn_tx);
76+
pool_termination_token.cancel_and_wait().await;
77+
main_termination_token.cancel_and_wait().await;
78+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
use base::commands::start_server;
2+
use base::integration_test;
3+
use base::server::ServerCodes;
4+
use tokio::select;
5+
use tokio::sync::mpsc;
6+
7+
#[cfg(target_os = "linux")]
8+
#[tokio::test]
9+
async fn test_not_trigger_pku_sigsegv_due_to_jit_compilation_cli() {
10+
integration_test!("./test_cases/main", 8999, "slow_resp", |resp: Result<
11+
reqwest::Response,
12+
reqwest::Error,
13+
>| async {
14+
assert!(resp.unwrap().text().await.unwrap().starts_with("meow: "));
15+
});
16+
}

0 commit comments

Comments
 (0)