diff options
author | Yigit Sever | 2022-04-16 18:05:37 +0300 |
---|---|---|
committer | Yigit Sever | 2022-04-16 18:05:37 +0300 |
commit | 43ad693490d3c2770bdcad7f59be50d6f1aa79dc (patch) | |
tree | bc4f75101941bf369a82ab62e756c91ecbbbfd44 /tests | |
parent | 96d34952c1fb2cf096b6c907feada60b0db27a8f (diff) | |
download | gradecoin-43ad693490d3c2770bdcad7f59be50d6f1aa79dc.tar.gz gradecoin-43ad693490d3c2770bdcad7f59be50d6f1aa79dc.tar.bz2 gradecoin-43ad693490d3c2770bdcad7f59be50d6f1aa79dc.zip |
temporarily remove tests
Diffstat (limited to 'tests')
-rw-r--r-- | tests/route_tests.rs | 435 | ||||
-rw-r--r-- | tests/schema_tests.rs | 310 |
2 files changed, 0 insertions, 745 deletions
diff --git a/tests/route_tests.rs b/tests/route_tests.rs deleted file mode 100644 index a449b0b..0000000 --- a/tests/route_tests.rs +++ /dev/null | |||
@@ -1,435 +0,0 @@ | |||
1 | #[cfg(test)] | ||
2 | mod tests { | ||
3 | use gradecoin::schema::{Block, Db, InitialAuthRequest, MetuId, Transaction, User}; | ||
4 | use pretty_assertions::assert_eq; | ||
5 | |||
6 | use gradecoin::routes::consensus_routes; | ||
7 | use warp::http::StatusCode; | ||
8 | |||
9 | /// Create a mock database to be used in tests | ||
10 | fn mocked_db() -> Db { | ||
11 | let db = Db::new(); | ||
12 | |||
13 | db.users.write().insert( | ||
14 | "fingerprint_of_some_guy".to_owned(), | ||
15 | User { | ||
16 | user_id: MetuId::new("e254275".to_owned(), "DtNX1qk4YF4saRH".to_owned()).unwrap(), | ||
17 | public_key: "-----BEGIN PUBLIC KEY----- | ||
18 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5yWTMeFqr2nvOC9oR5Wq | ||
19 | /nzcNlwCIaziojt7rJ4BBvuwkT0tERDz8AgvUsaewiB+Fz5OXTeb3WAB1FEXnBXG | ||
20 | ekrGzvC8jHQMKHyNoWzUlpQJ9UMtdQIWPOCuMyLpc+rNPL3428U8UpldjbTHHyq2 | ||
21 | /ef6abkdj+XWg/slYtrFeOf3ktc1l50R4k8VO8L6kQuh2+YIjXGPLShRaqnUQPtH | ||
22 | 8LFPX4bO9lJ9mAoMZFec6XVwumn/uqu9jyWQL6qh6gtwQHgN+A9wGvzVvltJ9h8s | ||
23 | shSHWWtBD0M19ilbXhKyBsHSSZkpx+TAvFhfQ8JURw7KqahUPVlCwJ5OIKccJ/6F | ||
24 | FQIDAQAB | ||
25 | -----END PUBLIC KEY-----" | ||
26 | .to_owned(), | ||
27 | balance: 30, | ||
28 | is_bot: false, | ||
29 | }, | ||
30 | ); | ||
31 | |||
32 | db.users.write().insert( | ||
33 | "fingerprint_of_foo".to_owned(), | ||
34 | User { | ||
35 | user_id: MetuId::new("e223715".to_owned(), "1H5QuOYI1b2r9ET".to_owned()).unwrap(), | ||
36 | public_key: "NOT_USED_FOR_THIS_USER".to_owned(), | ||
37 | balance: 0, | ||
38 | is_bot: false, | ||
39 | }, | ||
40 | ); | ||
41 | |||
42 | /* | ||
43 | -----BEGIN RSA PRIVATE KEY----- | ||
44 | MIIEpAIBAAKCAQEA5yWTMeFqr2nvOC9oR5Wq/nzcNlwCIaziojt7rJ4BBvuwkT0t | ||
45 | ERDz8AgvUsaewiB+Fz5OXTeb3WAB1FEXnBXGekrGzvC8jHQMKHyNoWzUlpQJ9UMt | ||
46 | dQIWPOCuMyLpc+rNPL3428U8UpldjbTHHyq2/ef6abkdj+XWg/slYtrFeOf3ktc1 | ||
47 | l50R4k8VO8L6kQuh2+YIjXGPLShRaqnUQPtH8LFPX4bO9lJ9mAoMZFec6XVwumn/ | ||
48 | uqu9jyWQL6qh6gtwQHgN+A9wGvzVvltJ9h8sshSHWWtBD0M19ilbXhKyBsHSSZkp | ||
49 | x+TAvFhfQ8JURw7KqahUPVlCwJ5OIKccJ/6FFQIDAQABAoIBADTZGnZlG4dPqSon | ||
50 | bKgxSA83bQHgt3wLkyWUhApLdeCq2wvZ+NvWDG/s7yT11IZ991ZJIJGfjTtoIALz | ||
51 | J3rAX8jGH/5gfDuArOb000z9HP3wivZQjawa9gqlNC7s5INkQ9iHdsaIqeoYtpMX | ||
52 | qg8uLPiQeWiCsoeb/Rff7ARWEKA7udoZ2uZcZFMHTKx+mBpk8IiepQAJPBRVwmXk | ||
53 | x/3LTaezi6Tkvp/k/gf4IeSICiRGFRmm2Vxciduj11/CrdTHPQLz/Rh5/IN8Bkry | ||
54 | xdQdQxxhwxF/ap6OJIJyguq7gximn2uK0jbHY3nRmrF8SsEtIT+Gd7I46L/goR8c | ||
55 | jQOQRmECgYEA9RJSOBUkZMLoUcC2LGJBZOAnJZ7WToCVdu3LrPceRYtQHwcznW4O | ||
56 | NAHF+blQRzqvbMi11ap8NVpkDDu0ki/Yi2VdSVjQmlaOcpAXjN6T5ZrKoz61xj4g | ||
57 | 2T2/K6d6ypkZRKPhKCC1iI419rq/APVEZHYCl7jZp4iD2izHiegZYccCgYEA8XRK | ||
58 | rfVuPiYsaB07eJrRKKjuoM1Jcr19jZyXY8sbALRcExaTX2CRaPA7binVeDBXayQ1 | ||
59 | I0+kA1nV1EI+ROegV+b6gs2YaUmMJzI1yLqMqGDgHFxFvhkDsZaI+/V+G9eOLEt4 | ||
60 | 5ic5tImfZITLE/GSC8b+C16gxMGUN4t9gHq2okMCgYAKyNedaDDFzl3y2wwpP9mo | ||
61 | 2sReP3Mm2Tm6lhRUdDt8y/impOZ8kw9E8p8HskP6HncBzoNR98KnhmbIswfrNvfM | ||
62 | ipVkWOg1IoH6QKUIqfLQM9OfA290Xd+ML89t2Fzq9XnLL3sFDQtwCvIM/YLSQ/jS | ||
63 | gu7yRkwttzA2NapCQ1h6mQKBgQClwBwn8Qyd01y2mCKkNzsP+2/cqTAbeSNAXFe8 | ||
64 | pMfDowx1+hBu7/7CF+/kPwmQuTa5kSB9PgWsWzYjwNm4OX1j+mbL9lEDLf7tRVWQ | ||
65 | lydJyz7tmRYzWj6j4V/l/u90M3QgyiqTbCf73GG0AkjaRwHn3dG1gl9A0lZqDvK3 | ||
66 | iQXouwKBgQCrx6SCnEkhLISSZpzdDehtWmyCQJIwcdlRQlAmFLVn+TJHTXR7xUm2 | ||
67 | VpTrPTfaYWx83OQUn/OZqY5gIQ+jlfwqnVg+PDQQ/P09/4xygRCLvjL6NCSvtkj1 | ||
68 | MRArEl4y68+jZLRu74TVG0lXi6ht6KhNHF6GiWKU9FHZ4B+btLicsg== | ||
69 | -----END RSA PRIVATE KEY----- | ||
70 | */ | ||
71 | |||
72 | db.pending_transactions.write().insert( | ||
73 | "fingerprint_of_foo".to_owned(), | ||
74 | Transaction { | ||
75 | source: "fingerprint_of_foo".to_owned(), | ||
76 | target: "fingerprint_of_foo".to_owned(), | ||
77 | amount: 2, | ||
78 | timestamp: chrono::NaiveDate::from_ymd(2021, 04, 13).and_hms(20, 55, 30), | ||
79 | }, | ||
80 | ); | ||
81 | |||
82 | *db.blockchain.write() = Block { | ||
83 | transaction_list: vec![ | ||
84 | "foo_public_key_signature".to_owned(), | ||
85 | "bar_public_key_signature".to_owned(), | ||
86 | "baz_public_key_signature".to_owned(), | ||
87 | ], | ||
88 | nonce: 6920405, | ||
89 | timestamp: chrono::NaiveDate::from_ymd(2021, 04, 13).and_hms(20, 55, 00), | ||
90 | hash: "0000009745f2f09c968c095af75e8ab87eba9be90a93e5df464f83ea7ec08537".to_owned(), | ||
91 | }; | ||
92 | |||
93 | db | ||
94 | } | ||
95 | |||
96 | /// Test simple GET request to /transaction, an endpoint that exists | ||
97 | /// https://tools.ietf.org/html/rfc7231#section-6.3.1 | ||
98 | /// We should get the only pending transaction available in the database as json | ||
99 | #[tokio::test] | ||
100 | async fn get_pending_transactions() { | ||
101 | let db = mocked_db(); | ||
102 | |||
103 | let reply = consensus_routes(db); | ||
104 | |||
105 | let res = warp::test::request() | ||
106 | .method("GET") | ||
107 | .path("/transaction") | ||
108 | .reply(&reply) | ||
109 | .await; | ||
110 | |||
111 | assert_eq!(res.status(), StatusCode::OK); | ||
112 | |||
113 | let expected_json_body = r#"{"fingerprint_of_foo":{"source":"fingerprint_of_foo","target":"fingerprint_of_foo","amount":2,"timestamp":"2021-04-13T20:55:30"}}"#; | ||
114 | |||
115 | assert_eq!(res.body(), expected_json_body); | ||
116 | } | ||
117 | |||
118 | /// Test simple GET request to /block, an enpoint that exists | ||
119 | /// | ||
120 | /// https://tools.ietf.org/html/rfc7231#section-6.3.1 | ||
121 | /// | ||
122 | /// Should return the single block available in the database as json | ||
123 | #[tokio::test] | ||
124 | async fn get_blockchain() { | ||
125 | let db = mocked_db(); | ||
126 | let filter = consensus_routes(db); | ||
127 | |||
128 | let res = warp::test::request() | ||
129 | .method("GET") | ||
130 | .path("/block") | ||
131 | .reply(&filter) | ||
132 | .await; | ||
133 | |||
134 | assert_eq!(res.status(), StatusCode::OK); | ||
135 | |||
136 | let expected_json_body = r#"{"transaction_list":["foo_public_key_signature","bar_public_key_signature","baz_public_key_signature"],"nonce":6920405,"timestamp":"2021-04-13T20:55:00","hash":"0000009745f2f09c968c095af75e8ab87eba9be90a93e5df464f83ea7ec08537"}"#; | ||
137 | assert_eq!(res.body(), expected_json_body); | ||
138 | } | ||
139 | |||
140 | /// Test a simple GET request to a nonexisting path | ||
141 | /// https://tools.ietf.org/html/rfc7231#section-6.5.4 | ||
142 | /// Should respond with 404 and stop | ||
143 | #[tokio::test] | ||
144 | async fn get_nonexisting_path_404() { | ||
145 | let db = mocked_db(); | ||
146 | let filter = consensus_routes(db); | ||
147 | |||
148 | let res = warp::test::request() | ||
149 | .method("GET") | ||
150 | .path("/this_path_does_not_exist") | ||
151 | .reply(&filter) | ||
152 | .await; | ||
153 | |||
154 | assert_eq!(res.status(), StatusCode::NOT_FOUND); | ||
155 | } | ||
156 | |||
157 | /// Test a POST request to /transaction, an endpoint that exists | ||
158 | /// | ||
159 | /// https://tools.ietf.org/html/rfc7231#section-6.3.2 | ||
160 | /// | ||
161 | /// Should accept the json request, create | ||
162 | /// the transaction and add it to pending transactions in the db | ||
163 | #[tokio::test] | ||
164 | async fn post_auth_json_201() { | ||
165 | let db = mocked_db(); | ||
166 | let filter = consensus_routes(db.clone()); | ||
167 | |||
168 | let res = warp::test::request() | ||
169 | .method("POST") | ||
170 | .json(&Transaction { | ||
171 | source: "fingerprint_of_some_guy".to_owned(), | ||
172 | target: "31415926535897932384626433832795028841971693993751058209749445923".to_owned(), | ||
173 | amount: 2, | ||
174 | timestamp: chrono::NaiveDate::from_ymd(2021, 04, 13).and_hms(20, 55, 30), | ||
175 | }) | ||
176 | .header("Authorization", "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aGEiOiJiODI4ZmYwNzM5NjFmMDA2YjU3ZmNkZWMwNmEwZTY1YSIsImV4cCI6MjAwMDAwMDAwMCwiaWF0IjoyNTE2MjM5MDIyfQ.Zwr2BPYzxvdAy8ZjCWSA3dp96KKVHjRDu9imHKCJ0NUeD5fM4D678B6pRZk9ev8PvbEI88MgYVW9akj_IsFwrsho7Tpsh7ym593ZOMwtSWSxxzxuKuGhAuKHDiQlXMFfv6kl8-eXIxa7xbV_0m81vAz6_vYQnVnlhjRQ26LogJRixWpUKV7-mPdRHhrK6dUxi9CwVuc9fdYhd6n2FMKT2AlAnk472fDa3G1oPsFLkp56eJ6_rKWrALHFWItfNvY4zFvwXXyNjMu-0EYJiaQIXFVNnipsy5Sy2HckdY3UiYS2lFUwHIczNrdrLM7NQhJQmbJLD6XRAMifH6bA1ZxH8A") | ||
177 | .path("/transaction") | ||
178 | .reply(&filter) | ||
179 | .await; | ||
180 | |||
181 | println!("{:?}", res.body()); | ||
182 | assert_eq!(res.status(), StatusCode::CREATED); | ||
183 | for i in db.pending_transactions.read().iter() { | ||
184 | println!("{:?}", i); | ||
185 | } | ||
186 | assert_eq!(db.pending_transactions.read().len(), 2); | ||
187 | } | ||
188 | |||
189 | /// Test a POST request to /transaction, an endpoint that exists with an incorrect JWT in the | ||
190 | /// Authorization header | ||
191 | /// | ||
192 | /// https://tools.ietf.org/html/rfc7231#section-6.3.2 | ||
193 | /// | ||
194 | /// Should reject the request | ||
195 | #[tokio::test] | ||
196 | async fn post_auth_json_400() { | ||
197 | let db = mocked_db(); | ||
198 | let filter = consensus_routes(db.clone()); | ||
199 | |||
200 | let res = warp::test::request() | ||
201 | .method("POST") | ||
202 | .json(&Transaction { | ||
203 | source: "some_fingerprint".to_owned(), | ||
204 | target: "some_other_fingerprint".to_owned(), | ||
205 | amount: 2, | ||
206 | timestamp: chrono::NaiveDate::from_ymd(2021, 04, 09).and_hms(14, 30, 00), | ||
207 | }) | ||
208 | .header( | ||
209 | "Authorization", | ||
210 | "Bearer aaaaaaaasdlkjaldkasljdaskjlaaaaaaaaaaaaaa", | ||
211 | ) | ||
212 | .path("/transaction") | ||
213 | .reply(&filter) | ||
214 | .await; | ||
215 | |||
216 | assert_eq!(res.status(), StatusCode::BAD_REQUEST); | ||
217 | assert_eq!(db.pending_transactions.read().len(), 1); | ||
218 | } | ||
219 | |||
220 | /// Test a POST request to /block, an endpoint that exists | ||
221 | /// | ||
222 | /// https://tools.ietf.org/html/rfc7231#section-6.3.2 | ||
223 | /// | ||
224 | /// Should accept the json request, create | ||
225 | /// the block | ||
226 | #[tokio::test] | ||
227 | async fn post_block_auth_201() { | ||
228 | let db = mocked_db(); | ||
229 | let filter = consensus_routes(db.clone()); | ||
230 | |||
231 | db.pending_transactions.write().insert( | ||
232 | "fingerprint_of_some_guy".to_owned(), | ||
233 | Transaction { | ||
234 | source: "fingerprint_of_some_guy".to_owned(), | ||
235 | target: "31415926535897932384626433832795028841971693993751058209749445923" | ||
236 | .to_owned(), | ||
237 | amount: 2, | ||
238 | timestamp: chrono::NaiveDate::from_ymd(2021, 04, 13).and_hms(20, 55, 30), | ||
239 | }, | ||
240 | ); | ||
241 | |||
242 | let res = warp::test::request() | ||
243 | .method("POST") | ||
244 | .json(&Block { | ||
245 | transaction_list: vec!["fingerprint_of_some_guy".to_owned()], | ||
246 | nonce: 3222170950, | ||
247 | timestamp: chrono::NaiveDate::from_ymd(2021, 04, 13).and_hms(23, 38, 00), | ||
248 | hash: "0000002149b72e0b348c32ac442a50ced4efbd1df7d48b377733d55dfe4f3577".to_owned(), | ||
249 | } ) | ||
250 | .header("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aGEiOiIwMDAwMDAyMTQ5YjcyZTBiMzQ4YzMyYWM0NDJhNTBjZWQ0ZWZiZDFkZjdkNDhiMzc3NzMzZDU1ZGZlNGYzNTc3IiwiZXhwIjoxMDAwMDAwMDAwMCwiaWF0IjoxNTE2MjM5MDAyMn0.2hZkIZiOJ9DpHwzL_rTCHGkTxs0S_-KD58a2bXuICogjrW6Z3o9LaJ95d8kpXSrAUCaFWN_-TNbk26LczDFSAhtTxpPh6ELXyLN82wAOCjsp8qLgXJQCnqNY7VFZdRUW0HDwHBLY2PVH40wprPkF7mLLonUPKcJUg9TLnmqHGriSECgv2-XZt2mD9XdTkofqIR-JRR3qoErb4G4xemMNYlWMuJK8I66Vj8kNytSt4wSCzkrWfmk5yyi7q1N3beo4nkP0DKzVstXZzWjn_qMZNZulfOdrNiKwHpwqX_bL66LB0rVpKcI5f6N6w5GZBKsdeUly7dCtKbxwYX3mV-7I_g") | ||
251 | .path("/block") | ||
252 | .reply(&filter) | ||
253 | .await; | ||
254 | |||
255 | println!("RESPONSE: {:?}", res.body()); | ||
256 | |||
257 | // should be reflectled on the db as well | ||
258 | assert_eq!( | ||
259 | db.blockchain.read().hash, | ||
260 | "0000002149b72e0b348c32ac442a50ced4efbd1df7d48b377733d55dfe4f3577".to_owned() | ||
261 | ); | ||
262 | assert_eq!(res.status(), StatusCode::CREATED); | ||
263 | } | ||
264 | |||
265 | /// Test a POST request to /block, an endpoint that exists | ||
266 | /// | ||
267 | /// https://tools.ietf.org/html/rfc7231#section-6.3.2 | ||
268 | /// | ||
269 | /// Should reject the block because there aren't enough zeroes in the hash | ||
270 | #[tokio::test] | ||
271 | async fn post_block_wrong_hash() { | ||
272 | let db = mocked_db(); | ||
273 | let filter = consensus_routes(db.clone()); | ||
274 | |||
275 | let res = warp::test::request() | ||
276 | .method("POST") | ||
277 | .header("Authorization", "Bearer foo.bar.baz") | ||
278 | .json(&Block { | ||
279 | transaction_list: vec!["foobarbaz".to_owned(), "dazsaz".to_owned()], | ||
280 | nonce: 1000, // not valid | ||
281 | timestamp: chrono::NaiveDate::from_ymd(2021, 04, 12).and_hms(05, 29, 30), | ||
282 | hash: "tnarstnarsuthnarsthlarjstk".to_owned(), | ||
283 | }) | ||
284 | .path("/block") | ||
285 | .reply(&filter) | ||
286 | .await; | ||
287 | |||
288 | assert_eq!(res.status(), StatusCode::BAD_REQUEST); | ||
289 | } | ||
290 | |||
291 | /// Test a POST request to /block, an endpoint that exists | ||
292 | /// | ||
293 | /// https://tools.ietf.org/html/rfc7231#section-6.3.2 | ||
294 | /// | ||
295 | /// Should reject the block because transaction list is empty | ||
296 | #[tokio::test] | ||
297 | async fn post_block_with_empty_transaction_list() { | ||
298 | let db = mocked_db(); | ||
299 | let filter = consensus_routes(db.clone()); | ||
300 | |||
301 | let res = warp::test::request() | ||
302 | .method("POST") | ||
303 | .header("Authorization", "Bearer foo.bar.baz") | ||
304 | .json(&Block { | ||
305 | transaction_list: vec![], | ||
306 | nonce: 1000, // not valid | ||
307 | timestamp: chrono::NaiveDate::from_ymd(2021, 04, 12).and_hms(05, 29, 30), | ||
308 | hash: "thisisnotavalidhash".to_owned(), | ||
309 | }) | ||
310 | .path("/block") | ||
311 | .reply(&filter) | ||
312 | .await; | ||
313 | |||
314 | assert_eq!(res.status(), StatusCode::BAD_REQUEST); | ||
315 | } | ||
316 | |||
317 | /// Test a POST request to /block, an endpoint that exists | ||
318 | /// | ||
319 | /// https://tools.ietf.org/html/rfc7231#section-6.3.2 | ||
320 | /// | ||
321 | /// Should reject the block because hash has enough zeroes but is not the actual hash of the | ||
322 | /// block | ||
323 | #[tokio::test] | ||
324 | async fn post_block_incorrect_hash() { | ||
325 | let db = mocked_db(); | ||
326 | let filter = consensus_routes(db.clone()); | ||
327 | |||
328 | let res = warp::test::request() | ||
329 | .method("POST") | ||
330 | .json(&Block { | ||
331 | transaction_list: vec![], | ||
332 | nonce: 12314, | ||
333 | timestamp: chrono::NaiveDate::from_ymd(2021, 04, 13).and_hms(20, 55, 00), | ||
334 | hash: "0000001111111111111111111111111111111111111111111111111111111111".to_owned(), | ||
335 | }) | ||
336 | .path("/block") | ||
337 | .reply(&filter) | ||
338 | .await; | ||
339 | |||
340 | println!("{:?}", res.body()); | ||
341 | assert_eq!(res.status(), StatusCode::BAD_REQUEST); | ||
342 | assert_eq!( | ||
343 | db.blockchain.read().hash, | ||
344 | "0000009745f2f09c968c095af75e8ab87eba9be90a93e5df464f83ea7ec08537" | ||
345 | ); | ||
346 | } | ||
347 | |||
348 | /// Test a POST request to /register, an endpoint that exists | ||
349 | /// | ||
350 | /// https://tools.ietf.org/html/rfc7231#section-6.3.2 | ||
351 | /// | ||
352 | /// Should accept the json request, create a new user and | ||
353 | /// add it to the user hashmap in the db | ||
354 | // #[tokio::test] | ||
355 | // async fn post_register_priviliged_user() { | ||
356 | // let db = mocked_db(); | ||
357 | // let filter = consensus_routes(db.clone()); | ||
358 | |||
359 | // let res = warp::test::request() | ||
360 | // .method("POST") | ||
361 | // .json(&priviliged_mocked_user()) | ||
362 | // .path("/register") | ||
363 | // .reply(&filter) | ||
364 | // .await; | ||
365 | |||
366 | // println!("{:?}", res.body()); | ||
367 | // assert_eq!(res.status(), StatusCode::CREATED); | ||
368 | // assert_eq!(db.users.read().len(), 2); | ||
369 | // } | ||
370 | |||
371 | /// Test a POST request to /transaction, an endpoint that exists | ||
372 | /// https://tools.ietf.org/html/rfc7231#section-6.3.2 | ||
373 | /// Should NOT accept the json request as the user is unpriviliged | ||
374 | // #[tokio::test] | ||
375 | // async fn post_register_unpriviliged_user() { | ||
376 | // let db = mocked_db(); | ||
377 | // let filter = consensus_routes(db.clone()); | ||
378 | |||
379 | // let res = warp::test::request() | ||
380 | // .method("POST") | ||
381 | // .json(&unpriviliged_mocked_user()) | ||
382 | // .path("/register") | ||
383 | // .reply(&filter) | ||
384 | // .await; | ||
385 | |||
386 | // println!("{:?}", res.body()); | ||
387 | // assert_eq!(res.status(), StatusCode::BAD_REQUEST); | ||
388 | // assert_eq!(db.users.read().len(), 1); | ||
389 | // } | ||
390 | |||
391 | /// Test a POST request to /transaction, an endpoint that exists with a longer than expected | ||
392 | /// payload | ||
393 | /// | ||
394 | /// https://tools.ietf.org/html/rfc7231#section-6.5.11 | ||
395 | /// | ||
396 | /// Should return 413 to user | ||
397 | #[tokio::test] | ||
398 | async fn post_too_long_content_413() { | ||
399 | let db = mocked_db(); | ||
400 | let filter = consensus_routes(db); | ||
401 | |||
402 | let res = warp::test::request() | ||
403 | .method("POST") | ||
404 | .header("content-length", 1024 * 36) | ||
405 | .path("/transaction") | ||
406 | .reply(&filter) | ||
407 | .await; | ||
408 | |||
409 | assert_eq!(res.status(), StatusCode::PAYLOAD_TOO_LARGE); | ||
410 | } | ||
411 | |||
412 | /// Test the User Authentication Process | ||
413 | #[tokio::test] | ||
414 | async fn user_authentication() { | ||
415 | let db = mocked_db(); | ||
416 | let filter = consensus_routes(db); | ||
417 | |||
418 | let res = warp::test::request() | ||
419 | .method("POST") | ||
420 | .json(&InitialAuthRequest { | ||
421 | c: "D9OKSp4XD+niltqhoiTEyz3pTxGm5ZKYVNFPofW40M6Km7wE7FgIpfTkurBZ6tQsG/rYPRsd6C/Qo+o3HrgOYC8BDprwpnYb7UnJdL2pe44ZMEsPAmDAdwTP9WozY0lr+bjEjtTM1mVQnIdfknychFek/FNi3l8MrapeFTxFaTMGxWuS1+wEuAkcz4AR4+jooaXVAEpKrPiSXqbywF9OQ41tk0kRiXn234dj40ndND+GlfMgghITuBJrJx6tzLppAZNIIGwUjQDt5Oib5dEGrPOe+rran1D26YNhZOtrfYEGyUSN+/58HbItQlLrgFhL6zRT7ojw/Eg4jYXndK0xNgYGyhAn5UI/qnI2NPpZU7Wd3sJKlWc7HfrjNnKVKlcrhHtYy3FXfN/hLg7SFmuSfXqqvVbNVT6pEDU6Y5NahOYaE/vkL0no7F7lz0UjAlgQCmn5yN7mKs3yLSnlx6hmsK/fVoqGBcOIbYY5gzYMlAQ3E+lq0p2MPEoWC8NYxStSeo9M8uLYT6Jl3hYVf8aLgd1l0HEiCyT+kWxvcR5hw42I7gqaoUcnr53Zm1mYK30/fvZ6lxsrb4FphldgQC5fx6nwEgjaLUeB4n0oZTSRLbrd9ZXCjUG4FNmM+sOklhIXyTYUj4VcBSwZuAvJZEFf2em68e7ySJs/ysz+TGu3eVeRc+voAvI9mGLxWnSEjWx64po7PO61uG6ikadHZH+wIw==".to_owned(), | ||
422 | iv: "bmV2ZXJtaW5kdGhlbmZ1aw==".to_owned(), | ||
423 | key: "Xd6/VSuFKqayNHspcFJSm+PAHNoTmcR4SsMijSyuyEh6PS5rdvO4W98AhxW4VBrRO1ljfEMeFq835NEDame511D2pim00Xv0HPIYSDW6pIJA1hy+Np/WyC7PCxvKy0hPzTmHMpFmM+aF43BknJdYlPUhY4cww/xScU6WxuKIsEQNORRhQds8CHOO0EGcOjHVvR2xqnOda1g/rI7mfNMATHj9ZRsB9GH6QG5WTUbo9/71cDAILF+28TG40jSKvY2KzO9vr668tgqoMV2vLnXQa1AD9ZWmdHHdjiXuiH3X0uXxHrfjH7HeXi/HOj/pgCX12jKsEsRwkBTGL4koObH6pQ==".to_owned(), | ||
424 | }) | ||
425 | .path("/register") | ||
426 | .reply(&filter) | ||
427 | .await; | ||
428 | |||
429 | println!("{:?}", res); | ||
430 | assert_eq!(res.status(), StatusCode::CREATED); | ||
431 | } | ||
432 | } | ||
433 | |||
434 | // TODO: POST block without correct transactions test <09-04-21, yigit> // | ||
435 | // TODO: POST transaction while that source has pending transaction test <09-04-21, yigit> // | ||
diff --git a/tests/schema_tests.rs b/tests/schema_tests.rs deleted file mode 100644 index 072cb2b..0000000 --- a/tests/schema_tests.rs +++ /dev/null | |||
@@ -1,310 +0,0 @@ | |||
1 | // #[cfg(test)] | ||
2 | // mod tests { | ||
3 | // use gradecoin::schema::*; | ||
4 | // use serde_test::{assert_tokens, Token}; | ||
5 | // use chrono::NaiveDate; | ||
6 | |||
7 | // #[test] | ||
8 | // fn claims_serialize_correctly() { | ||
9 | // let claims = Claims { | ||
10 | // tha: "hashed_string".to_owned(), | ||
11 | // iat: 0, | ||
12 | // exp: 100, | ||
13 | // }; | ||
14 | // assert_tokens( | ||
15 | // &claims, | ||
16 | // &[ | ||
17 | // Token::Struct{name: "Claims", len: 3}, | ||
18 | // Token::String("tha"), | ||
19 | // Token::String("hashed_string"), | ||
20 | // Token::String("iat"), | ||
21 | // Token::U64(0), | ||
22 | // Token::String("exp"), | ||
23 | // Token::U64(100), | ||
24 | // Token::StructEnd, | ||
25 | // ] | ||
26 | // ) | ||
27 | // } | ||
28 | |||
29 | // #[test] | ||
30 | // fn claims_deserialize_correctly() { | ||
31 | // let data = r#"{"tha":"hashed_string","iat":0,"exp":100}"#; | ||
32 | // let claims: Claims = serde_json::from_str(data).unwrap(); | ||
33 | // let expected_claims = Claims { | ||
34 | // tha: "hashed_string".to_owned(), | ||
35 | // iat: 0, | ||
36 | // exp: 100, | ||
37 | // }; | ||
38 | // assert_eq!(claims, expected_claims); | ||
39 | // } | ||
40 | |||
41 | // #[test] | ||
42 | // fn transaction_serialize_correctly() { | ||
43 | // let transaction = Transaction { | ||
44 | // by: "source".to_owned(), | ||
45 | // source: "source".to_owned(), | ||
46 | // target: "target".to_owned(), | ||
47 | // amount: 0, | ||
48 | // timestamp: NaiveDate::from_ymd(2021, 4, 2).and_hms(4, 2, 42), | ||
49 | // }; | ||
50 | |||
51 | // assert_tokens( | ||
52 | // &transaction, | ||
53 | // &[ | ||
54 | // Token::Struct{name: "Transaction", len: 5}, | ||
55 | // Token::String("by"), | ||
56 | // Token::String("source"), | ||
57 | // Token::String("source"), | ||
58 | // Token::String("source"), | ||
59 | // Token::String("target"), | ||
60 | // Token::String("target"), | ||
61 | // Token::String("amount"), | ||
62 | // Token::I32(0), | ||
63 | // Token::String("timestamp"), | ||
64 | // Token::String("2021-04-02T04:02:42"), | ||
65 | // Token::StructEnd, | ||
66 | // ] | ||
67 | // ) | ||
68 | // } | ||
69 | |||
70 | // #[test] | ||
71 | // fn transaction_deserialize_correctly() { | ||
72 | // let data = r#"{"by":"source","source":"source","target":"target","amount":0,"timestamp":"2021-04-02T04:02:42"}"#; | ||
73 | // let transaction: Transaction = serde_json::from_str(data).unwrap(); | ||
74 | // let expected_transaction = Transaction { | ||
75 | // by: "source".to_owned(), | ||
76 | // source: "source".to_owned(), | ||
77 | // target: "target".to_owned(), | ||
78 | // amount: 0, | ||
79 | // timestamp: NaiveDate::from_ymd(2021, 4, 2).and_hms(4, 2, 42), | ||
80 | // }; | ||
81 | |||
82 | // assert_eq!(transaction, expected_transaction); | ||
83 | // } | ||
84 | |||
85 | // #[test] | ||
86 | // fn block_serialize_correctly() { | ||
87 | // let block = Block { | ||
88 | // transaction_list: vec!["transaction1".to_owned()], | ||
89 | // nonce: 0, | ||
90 | // timestamp: NaiveDate::from_ymd(2021, 4, 2).and_hms(4, 2, 42), | ||
91 | // hash: "hash".to_owned() | ||
92 | // }; | ||
93 | |||
94 | // assert_tokens( | ||
95 | // &block, | ||
96 | // &[ | ||
97 | // Token::Struct{name: "Block", len: 4}, | ||
98 | // Token::String("transaction_list"), | ||
99 | // Token::Seq {len: Some(1)}, | ||
100 | // Token::String("transaction1"), | ||
101 | // Token::SeqEnd, | ||
102 | // Token::String("nonce"), | ||
103 | // Token::U32(0), | ||
104 | // Token::String("timestamp"), | ||
105 | // Token::String("2021-04-02T04:02:42"), | ||
106 | // Token::String("hash"), | ||
107 | // Token::String("hash"), | ||
108 | // Token::StructEnd, | ||
109 | // ] | ||
110 | // ) | ||
111 | // } | ||
112 | |||
113 | // #[test] | ||
114 | // fn block_deserialize_correctly() { | ||
115 | // let expected_block = Block { | ||
116 | // transaction_list: vec!["transaction1".to_owned()], | ||
117 | // nonce: 0, | ||
118 | // timestamp: NaiveDate::from_ymd(2021, 4, 2).and_hms(4, 2, 42), | ||
119 | // hash: "hash".to_owned() | ||
120 | // }; | ||
121 | // let data = r#"{"transaction_list":["transaction1"],"nonce":0,"timestamp":"2021-04-02T04:02:42","hash":"hash"}"#; | ||
122 | // let block: Block = serde_json::from_str(data).unwrap(); | ||
123 | |||
124 | // assert_eq!(block, expected_block); | ||
125 | |||
126 | // } | ||
127 | |||
128 | // #[test] | ||
129 | // fn block_serialize_when_vec_emptpy() { | ||
130 | // let block = Block { | ||
131 | // transaction_list: vec![], | ||
132 | // nonce: 0, | ||
133 | // timestamp: NaiveDate::from_ymd(2021, 4, 2).and_hms(4, 2, 42), | ||
134 | // hash: "hash".to_owned() | ||
135 | // }; | ||
136 | |||
137 | // let json = serde_json::to_string(&block).unwrap(); | ||
138 | // assert_eq!(json, r#"{"nonce":0,"timestamp":"2021-04-02T04:02:42","hash":"hash"}"#) | ||
139 | // } | ||
140 | |||
141 | // #[test] | ||
142 | // fn naked_block_serialize_correctly() { | ||
143 | // let naked_block = NakedBlock { | ||
144 | // transaction_list: vec!["transaction1".to_owned()], | ||
145 | // nonce: 0, | ||
146 | // timestamp: NaiveDate::from_ymd(2021, 4, 2).and_hms(4, 2, 42), | ||
147 | // }; | ||
148 | |||
149 | // assert_tokens( | ||
150 | // &naked_block, | ||
151 | // &[ | ||
152 | // Token::Struct{name: "NakedBlock", len: 3}, | ||
153 | // Token::String("transaction_list"), | ||
154 | // Token::Seq {len: Some(1)}, | ||
155 | // Token::String("transaction1"), | ||
156 | // Token::SeqEnd, | ||
157 | // Token::String("nonce"), | ||
158 | // Token::U32(0), | ||
159 | // Token::String("timestamp"), | ||
160 | // Token::String("2021-04-02T04:02:42"), | ||
161 | // Token::StructEnd, | ||
162 | // ] | ||
163 | // ) | ||
164 | // } | ||
165 | |||
166 | // #[test] | ||
167 | // fn naked_block_deserialize_correctly() { | ||
168 | // let expected_naked_block = NakedBlock { | ||
169 | // transaction_list: vec!["transaction1".to_owned()], | ||
170 | // nonce: 0, | ||
171 | // timestamp: NaiveDate::from_ymd(2021, 4, 2).and_hms(4, 2, 42), | ||
172 | // }; | ||
173 | // let data = r#"{"transaction_list":["transaction1"],"nonce":0,"timestamp":"2021-04-02T04:02:42"}"#; | ||
174 | // let naked_block: NakedBlock = serde_json::from_str(data).unwrap(); | ||
175 | |||
176 | // assert_eq!(naked_block, expected_naked_block); | ||
177 | |||
178 | // } | ||
179 | |||
180 | // #[test] | ||
181 | // fn naked_block_serialize_when_vec_emptpy() { | ||
182 | // let naked_block = NakedBlock { | ||
183 | // transaction_list: vec![], | ||
184 | // nonce: 0, | ||
185 | // timestamp: NaiveDate::from_ymd(2021, 4, 2).and_hms(4, 2, 42), | ||
186 | // }; | ||
187 | |||
188 | // let json = serde_json::to_string(&naked_block).unwrap(); | ||
189 | // assert_eq!(json, r#"{"nonce":0,"timestamp":"2021-04-02T04:02:42"}"#) | ||
190 | // } | ||
191 | |||
192 | // #[test] | ||
193 | // fn user_serialize_correctly() { | ||
194 | // let user = User { | ||
195 | // user_id: MetuId::new("e254275".to_owned(), "DtNX1qk4YF4saRH".to_owned()).unwrap(), | ||
196 | // public_key: "public_key".to_owned(), | ||
197 | // balance: 0 | ||
198 | // }; | ||
199 | |||
200 | // assert_tokens( | ||
201 | // &user, | ||
202 | // &[ | ||
203 | // Token::Struct{name: "User", len: 3}, | ||
204 | // Token::String("user_id"), | ||
205 | // Token::Struct {name: "MetuId", len: 2}, | ||
206 | // Token::String("id"), | ||
207 | // Token::String("e254275"), | ||
208 | // Token::String("passwd"), | ||
209 | // Token::String("DtNX1qk4YF4saRH"), | ||
210 | // Token::StructEnd, | ||
211 | // Token::String("public_key"), | ||
212 | // Token::String("public_key"), | ||
213 | // Token::String("balance"), | ||
214 | // Token::I32(0), | ||
215 | // Token::StructEnd, | ||
216 | // ] | ||
217 | // ) | ||
218 | // } | ||
219 | |||
220 | // #[test] | ||
221 | // fn user_deserialize_correctly() { | ||
222 | // let expected_user = User { | ||
223 | // user_id: MetuId::new("e254275".to_owned(), "DtNX1qk4YF4saRH".to_owned()).unwrap(), | ||
224 | // public_key: "public_key".to_owned(), | ||
225 | // balance: 0 | ||
226 | // }; | ||
227 | // let data = r#"{"user_id":{"id":"e254275","passwd":"DtNX1qk4YF4saRH"},"public_key":"public_key","balance":0}"#; | ||
228 | // let user: User = serde_json::from_str(data).unwrap(); | ||
229 | |||
230 | // assert_eq!(user, expected_user); | ||
231 | |||
232 | // } | ||
233 | |||
234 | // #[test] | ||
235 | // fn metu_id_serialize_correctly() { | ||
236 | // let metu_id = MetuId::new ("e254275".to_owned(), "DtNX1qk4YF4saRH".to_owned()).unwrap(); | ||
237 | |||
238 | // assert_tokens( | ||
239 | // &metu_id, | ||
240 | // &[ | ||
241 | // Token::Struct{name: "MetuId", len: 2}, | ||
242 | // Token::String("id"), | ||
243 | // Token::String("e254275"), | ||
244 | // Token::String("passwd"), | ||
245 | // Token::String("DtNX1qk4YF4saRH"), | ||
246 | // Token::StructEnd, | ||
247 | // ] | ||
248 | // ) | ||
249 | // } | ||
250 | |||
251 | // #[test] | ||
252 | // fn metu_id_deserialize_correctly() { | ||
253 | // let expected_metu_id = MetuId::new ("e254275".to_owned(), "DtNX1qk4YF4saRH".to_owned()).unwrap(); | ||
254 | // let data = r#"{"id":"e254275","passwd":"DtNX1qk4YF4saRH"}"#; | ||
255 | // let metu_id: MetuId = serde_json::from_str(data).unwrap(); | ||
256 | |||
257 | // assert_eq!(metu_id, expected_metu_id); | ||
258 | // } | ||
259 | |||
260 | // #[test] | ||
261 | // fn auth_request_serialize_correctly() { | ||
262 | // let auth_request = AuthRequest { | ||
263 | // student_id: "e254275".to_owned(), | ||
264 | // passwd: "DtNX1qk4YF4saRH".to_owned(), | ||
265 | // public_key: "public_key".to_owned() | ||
266 | // }; | ||
267 | |||
268 | // assert_tokens( | ||
269 | // &auth_request, | ||
270 | // &[ | ||
271 | // Token::Struct{name: "AuthRequest", len: 3}, | ||
272 | // Token::String("student_id"), | ||
273 | // Token::String("e254275"), | ||
274 | // Token::String("passwd"), | ||
275 | // Token::String("DtNX1qk4YF4saRH"), | ||
276 | // Token::String("public_key"), | ||
277 | // Token::String("public_key"), | ||
278 | // Token::StructEnd, | ||
279 | // ] | ||
280 | // ) | ||
281 | // } | ||
282 | |||
283 | // #[test] | ||
284 | // fn auth_request_deserialize_correctly() { | ||
285 | // let expected_auth_request = AuthRequest { | ||
286 | // student_id: "e254275".to_owned(), | ||
287 | // passwd: "DtNX1qk4YF4saRH".to_owned(), | ||
288 | // public_key: "public_key".to_owned() | ||
289 | // }; | ||
290 | // let data = r#"{"student_id":"e254275","passwd":"DtNX1qk4YF4saRH","public_key":"public_key"}"#; | ||
291 | // let auth_request: AuthRequest = serde_json::from_str(data).unwrap(); | ||
292 | |||
293 | // assert_eq!(auth_request, expected_auth_request); | ||
294 | |||
295 | // } | ||
296 | |||
297 | |||
298 | |||
299 | |||
300 | |||
301 | |||
302 | |||
303 | |||
304 | |||
305 | |||
306 | |||
307 | |||
308 | |||
309 | |||
310 | // } | ||