Skip to content

Commit b0dfda6

Browse files
authored
Merge pull request #1100 from nebocco/actix-web
replace surf with reqwest
2 parents 85d0aba + 8f9a70e commit b0dfda6

13 files changed

+736
-475
lines changed

atcoder-problems-backend/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

atcoder-problems-backend/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ atcoder-client = { path = "./atcoder-client" }
2626
# Web framework
2727
tide = "0.16"
2828
cookie = "0.14"
29-
surf = "2.3"
29+
reqwest = { version = "0.11", features = ["json"] }
3030

3131
async-trait = "0.1"
3232

atcoder-problems-backend/src/server/auth.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,26 @@ impl Authentication for GitHubAuthentication {
4747
client_secret: self.client_secret.to_owned(),
4848
code: code.to_owned(),
4949
};
50-
let response: TokenResponse = surf::post("https://github.com/login/oauth/access_token")
50+
let client = reqwest::Client::new();
51+
let response: TokenResponse = client
52+
.post("https://github.com/login/oauth/access_token")
5153
.header("Accept", "application/json")
52-
.body(surf::Body::from_json(&request)?)
53-
.recv_json()
54+
.json(&request)
55+
.send()
56+
.await?
57+
.json()
5458
.await?;
5559
Ok(response.access_token)
5660
}
5761
async fn get_user_id(&self, access_token: &str) -> Result<GitHubUserResponse> {
5862
let token_header = format!("token {}", access_token);
59-
let response: GitHubUserResponse = surf::get("https://api.github.com/user")
63+
let client = reqwest::Client::new();
64+
let response: GitHubUserResponse = client
65+
.get("https://api.github.com/user")
6066
.header("Authorization", token_header)
61-
.recv_json()
67+
.send()
68+
.await?
69+
.json()
6270
.await?;
6371
Ok(response)
6472
}

atcoder-problems-backend/src/utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pub fn init_log_config() -> Result<()> {
2929
.level(LevelFilter::Info)
3030
.level_for("sqlx", LevelFilter::Warn)
3131
.level_for("tide", LevelFilter::Warn)
32-
.level_for("surf", LevelFilter::Warn)
32+
.level_for("reqwest", LevelFilter::Warn)
3333
.chain(std::io::stdout())
3434
.apply()?;
3535
Ok(())

atcoder-problems-backend/tests/test_server_e2e_ac_ranking.rs

Lines changed: 44 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
use async_std::future::ready;
2-
use async_std::prelude::*;
3-
use async_std::task;
41
use async_trait::async_trait;
52
use atcoder_problems_backend::server::{run_server, Authentication, GitHubUserResponse};
63
use rand::Rng;
74
use serde_json::{json, Value};
85
use sql_client::PgPool;
96
use tide::Result;
7+
use tokio::task;
108

119
pub mod utils;
1210

@@ -42,7 +40,7 @@ async fn setup() -> u16 {
4240
rng.gen::<u16>() % 30000 + 30000
4341
}
4442

45-
#[async_std::test]
43+
#[tokio::test]
4644
async fn test_ac_ranking() {
4745
let port = setup().await;
4846
let server = task::spawn(async move {
@@ -51,10 +49,12 @@ async fn test_ac_ranking() {
5149
.unwrap();
5250
run_server(pg_pool, MockAuth, port).await.unwrap();
5351
});
54-
task::sleep(std::time::Duration::from_millis(1000)).await;
52+
tokio::time::sleep(std::time::Duration::from_millis(1000)).await;
5553

56-
let response = surf::get(url("/atcoder-api/v3/ac_ranking?from=0&to=10", port))
57-
.recv_json::<Value>()
54+
let response = reqwest::get(url("/atcoder-api/v3/ac_ranking?from=0&to=10", port))
55+
.await
56+
.unwrap()
57+
.json::<Value>()
5858
.await
5959
.unwrap();
6060
assert_eq!(
@@ -66,8 +66,10 @@ async fn test_ac_ranking() {
6666
])
6767
);
6868

69-
let response = surf::get(url("/atcoder-api/v3/ac_ranking?from=1&to=3", port))
70-
.recv_json::<Value>()
69+
let response = reqwest::get(url("/atcoder-api/v3/ac_ranking?from=1&to=3", port))
70+
.await
71+
.unwrap()
72+
.json::<Value>()
7173
.await
7274
.unwrap();
7375
assert_eq!(
@@ -78,65 +80,80 @@ async fn test_ac_ranking() {
7880
])
7981
);
8082

81-
let response = surf::get(url("/atcoder-api/v3/ac_ranking?from=10&to=0", port))
82-
.recv_json::<Value>()
83+
let response = reqwest::get(url("/atcoder-api/v3/ac_ranking?from=10&to=0", port))
84+
.await
85+
.unwrap()
86+
.json::<Value>()
8387
.await
8488
.unwrap();
8589
assert_eq!(response.as_array().unwrap().len(), 0);
8690

87-
let response = surf::get(url("/atcoder-api/v3/ac_ranking?from=0&to=2000", port))
91+
let response = reqwest::get(url("/atcoder-api/v3/ac_ranking?from=0&to=2000", port))
8892
.await
8993
.unwrap();
9094
assert_eq!(response.status(), 400);
9195

92-
let response = surf::get(url("/atcoder-api/v3/ac_ranking?from=-1&to=10", port))
96+
let response = reqwest::get(url("/atcoder-api/v3/ac_ranking?from=-1&to=10", port))
9397
.await
9498
.unwrap();
9599
assert_eq!(response.status(), 400);
96100

97-
let response = surf::get(url("/atcoder-api/v3/user/ac_rank?user=u1", port))
98-
.recv_json::<Value>()
101+
let response = reqwest::get(url("/atcoder-api/v3/user/ac_rank?user=u1", port))
102+
.await
103+
.unwrap()
104+
.json::<Value>()
99105
.await
100106
.unwrap();
101107
assert_eq!(response, json!({"count": 1, "rank": 1}));
102108

103-
let response = surf::get(url("/atcoder-api/v3/user/ac_rank?user=u2", port))
104-
.recv_json::<Value>()
109+
let response = reqwest::get(url("/atcoder-api/v3/user/ac_rank?user=u2", port))
110+
.await
111+
.unwrap()
112+
.json::<Value>()
105113
.await
106114
.unwrap();
107115
assert_eq!(response, json!({"count": 2, "rank": 0}));
108116

109-
let response = surf::get(url("/atcoder-api/v3/user/ac_rank?user=u3", port))
110-
.recv_json::<Value>()
117+
let response = reqwest::get(url("/atcoder-api/v3/user/ac_rank?user=u3", port))
118+
.await
119+
.unwrap()
120+
.json::<Value>()
111121
.await
112122
.unwrap();
113123
assert_eq!(response, json!({"count": 1, "rank": 1}));
114124

115-
let response = surf::get(url("/atcoder-api/v3/user/ac_rank?user=U1", port))
116-
.recv_json::<Value>()
125+
let response = reqwest::get(url("/atcoder-api/v3/user/ac_rank?user=U1", port))
126+
.await
127+
.unwrap()
128+
.json::<Value>()
117129
.await
118130
.unwrap();
119131
assert_eq!(response, json!({"count": 1, "rank": 1}));
120132

121-
let response = surf::get(url("/atcoder-api/v3/user/ac_rank?user=U2", port))
122-
.recv_json::<Value>()
133+
let response = reqwest::get(url("/atcoder-api/v3/user/ac_rank?user=U2", port))
134+
.await
135+
.unwrap()
136+
.json::<Value>()
123137
.await
124138
.unwrap();
125139
assert_eq!(response, json!({"count": 2, "rank": 0}));
126140

127-
let response = surf::get(url("/atcoder-api/v3/user/ac_rank?user=U3", port))
128-
.recv_json::<Value>()
141+
let response = reqwest::get(url("/atcoder-api/v3/user/ac_rank?user=U3", port))
142+
.await
143+
.unwrap()
144+
.json::<Value>()
129145
.await
130146
.unwrap();
131147
assert_eq!(response, json!({"count": 1, "rank": 1}));
132148

133-
let response = surf::get(url(
149+
let response = reqwest::get(url(
134150
"/atcoder-api/v3/user/ac_rank?user=does_not_exist",
135151
port,
136152
))
137153
.await
138154
.unwrap();
139155
assert_eq!(response.status(), 404);
140156

141-
server.race(ready(())).await;
157+
server.abort();
158+
server.await.unwrap_err();
142159
}

atcoder-problems-backend/tests/test_server_e2e_language_count.rs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
use async_std::future::ready;
2-
use async_std::prelude::*;
3-
use async_std::task;
41
use async_trait::async_trait;
52
use atcoder_problems_backend::server::{run_server, Authentication, GitHubUserResponse};
63
use rand::Rng;
74
use serde_json::{json, Value};
85
use sql_client::PgPool;
96
use tide::Result;
7+
use tokio::task;
108

119
pub mod utils;
1210

@@ -59,7 +57,7 @@ async fn setup() -> (u16, PgPool) {
5957
(rng.gen::<u16>() % 30000 + 30000, conn)
6058
}
6159

62-
#[async_std::test]
60+
#[tokio::test]
6361
async fn test_language_count() {
6462
let (port, conn) = setup().await;
6563
let server = task::spawn(async move {
@@ -68,21 +66,26 @@ async fn test_language_count() {
6866
.unwrap();
6967
run_server(pg_pool, MockAuth, port).await.unwrap();
7068
});
71-
task::sleep(std::time::Duration::from_millis(1000)).await;
69+
tokio::time::sleep(std::time::Duration::from_millis(1000)).await;
7270

7371
insert_data_set1(&conn).await;
74-
let response = surf::get(url("/atcoder-api/v3/language_list", port))
75-
.recv_json::<Value>()
72+
let response = reqwest::get(url("/atcoder-api/v3/language_list", port))
73+
.await
74+
.unwrap()
75+
.json::<Value>()
7676
.await
7777
.unwrap();
7878
assert_eq!(response, json!(["lang1", "lang2", "lang3"]));
7979

8080
insert_data_set2(&conn).await;
81-
let response = surf::get(url("/atcoder-api/v3/language_list", port))
82-
.recv_json::<Value>()
81+
let response = reqwest::get(url("/atcoder-api/v3/language_list", port))
82+
.await
83+
.unwrap()
84+
.json::<Value>()
8385
.await
8486
.unwrap();
8587
assert_eq!(response, json!(["lang1", "lang2", "lang3", "lang4"]));
8688

87-
server.race(ready(())).await;
89+
server.abort();
90+
server.await.unwrap_err();
8891
}

0 commit comments

Comments
 (0)