Skip to content

Commit 033f5d9

Browse files
authored
Merge pull request #372 from AdExNetwork/issue-357-rate-limit-in-tests
Running sentry tests no longer hits redis rate limit
2 parents 7e224bf + 0abf78f commit 033f5d9

File tree

6 files changed

+220
-80
lines changed

6 files changed

+220
-80
lines changed

Cargo.lock

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sentry/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ async-trait = "^0.1"
1313
primitives = { path = "../primitives", features = ["postgres"] }
1414
adapter = { version = "0.1", path = "../adapter" }
1515
chrono = { version = "0.4", features = ["serde"] }
16+
dashmap = "4"
1617
hex = "0.4"
1718
# CLI
1819
clap = "^2.33"
@@ -36,3 +37,5 @@ serde_urlencoded = "^0.7"
3637
# Other
3738
lazy_static = "1.4.0"
3839
thiserror = "^1.0"
40+
deadpool = "0.7.0"
41+
once_cell = "1.5.2"

sentry/src/access.rs

Lines changed: 47 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -210,28 +210,29 @@ mod test {
210210
use std::time::Duration;
211211

212212
use chrono::TimeZone;
213-
use primitives::config::configuration;
214-
use primitives::event_submission::{RateLimit, Rule};
215-
use primitives::sentry::Event;
216-
use primitives::targeting::Rules;
217-
use primitives::util::tests::prep_db::{DUMMY_CHANNEL, IDS};
218-
use primitives::{Channel, Config, EventSubmission};
213+
use primitives::{
214+
config::configuration,
215+
event_submission::{RateLimit, Rule},
216+
sentry::Event,
217+
targeting::Rules,
218+
util::tests::prep_db::{DUMMY_CHANNEL, IDS},
219+
Channel, Config, EventSubmission,
220+
};
221+
222+
use deadpool::managed::Object;
219223

220-
use crate::db::redis_connection;
221-
use crate::Session;
224+
use crate::{
225+
db::redis_pool::{Database, TESTS_POOL},
226+
Session,
227+
};
222228

223229
use super::*;
224230

225-
async fn setup() -> (Config, MultiplexedConnection) {
226-
let mut redis = redis_connection().await.expect("Couldn't connect to Redis");
231+
async fn setup() -> (Config, Object<Database, crate::db::redis_pool::Error>) {
232+
let connection = TESTS_POOL.get().await.expect("Should return Object");
227233
let config = configuration("development", None).expect("Failed to get dev configuration");
228234

229-
// run `FLUSHALL` to clean any leftovers of other tests
230-
let _ = redis::cmd("FLUSHALL")
231-
.query_async::<_, String>(&mut redis)
232-
.await;
233-
234-
(config, redis)
235+
(config, connection)
235236
}
236237

237238
fn get_channel(with_rule: Rule) -> Channel {
@@ -269,7 +270,7 @@ mod test {
269270

270271
#[tokio::test]
271272
async fn session_uid_rate_limit() {
272-
let (config, redis) = setup().await;
273+
let (config, database) = setup().await;
273274

274275
let auth = Auth {
275276
era: 0,
@@ -294,7 +295,7 @@ mod test {
294295
let channel = get_channel(rule);
295296

296297
let response = check_access(
297-
&redis,
298+
&database,
298299
&session,
299300
Some(&auth),
300301
&config.ip_rate_limit,
@@ -305,7 +306,7 @@ mod test {
305306
assert_eq!(Ok(()), response);
306307

307308
let err_response = check_access(
308-
&&redis,
309+
&database,
309310
&session,
310311
Some(&auth),
311312
&config.ip_rate_limit,
@@ -323,7 +324,7 @@ mod test {
323324

324325
#[tokio::test]
325326
async fn ip_rate_limit() {
326-
let (config, redis) = setup().await;
327+
let (config, database) = setup().await;
327328

328329
let auth = Auth {
329330
era: 0,
@@ -347,7 +348,7 @@ mod test {
347348
let channel = get_channel(rule);
348349

349350
let err_response = check_access(
350-
&redis,
351+
&database,
351352
&session,
352353
Some(&auth),
353354
&config.ip_rate_limit,
@@ -364,7 +365,7 @@ mod test {
364365
);
365366

366367
let response = check_access(
367-
&redis,
368+
&database,
368369
&session,
369370
Some(&auth),
370371
&config.ip_rate_limit,
@@ -376,9 +377,8 @@ mod test {
376377
}
377378

378379
#[tokio::test]
379-
#[ignore]
380380
async fn check_access_past_channel_valid_until() {
381-
let (config, redis) = setup().await;
381+
let (config, database) = setup().await;
382382

383383
let auth = Auth {
384384
era: 0,
@@ -403,7 +403,7 @@ mod test {
403403
channel.valid_until = Utc.ymd(1970, 1, 1).and_hms(12, 00, 9);
404404

405405
let err_response = check_access(
406-
&redis,
406+
&database,
407407
&session,
408408
Some(&auth),
409409
&config.ip_rate_limit,
@@ -416,9 +416,8 @@ mod test {
416416
}
417417

418418
#[tokio::test]
419-
#[ignore]
420419
async fn check_access_close_event_in_withdraw_period() {
421-
let (config, redis) = setup().await;
420+
let (config, database) = setup().await;
422421

423422
let auth = Auth {
424423
era: 0,
@@ -443,7 +442,7 @@ mod test {
443442
channel.spec.withdraw_period_start = Utc.ymd(1970, 1, 1).and_hms(12, 0, 9);
444443

445444
let ok_response = check_access(
446-
&redis,
445+
&database,
447446
&session,
448447
Some(&auth),
449448
&config.ip_rate_limit,
@@ -456,9 +455,8 @@ mod test {
456455
}
457456

458457
#[tokio::test]
459-
#[ignore]
460458
async fn check_access_close_event_and_is_creator() {
461-
let (config, redis) = setup().await;
459+
let (config, database) = setup().await;
462460

463461
let auth = Auth {
464462
era: 0,
@@ -483,7 +481,7 @@ mod test {
483481
channel.creator = IDS["follower"];
484482

485483
let ok_response = check_access(
486-
&redis,
484+
&database,
487485
&session,
488486
Some(&auth),
489487
&config.ip_rate_limit,
@@ -496,9 +494,8 @@ mod test {
496494
}
497495

498496
#[tokio::test]
499-
#[ignore]
500497
async fn check_access_update_targeting_event_and_is_creator() {
501-
let (config, redis) = setup().await;
498+
let (config, database) = setup().await;
502499

503500
let auth = Auth {
504501
era: 0,
@@ -523,7 +520,7 @@ mod test {
523520
channel.creator = IDS["follower"];
524521

525522
let ok_response = check_access(
526-
&redis,
523+
&database,
527524
&session,
528525
Some(&auth),
529526
&config.ip_rate_limit,
@@ -536,9 +533,8 @@ mod test {
536533
}
537534

538535
#[tokio::test]
539-
#[ignore]
540536
async fn not_creator_and_there_are_close_events() {
541-
let (config, redis) = setup().await;
537+
let (config, database) = setup().await;
542538

543539
let auth = Auth {
544540
era: 0,
@@ -574,7 +570,7 @@ mod test {
574570
},
575571
];
576572
let err_response = check_access(
577-
&redis,
573+
&database,
578574
&session,
579575
Some(&auth),
580576
&config.ip_rate_limit,
@@ -587,9 +583,8 @@ mod test {
587583
}
588584

589585
#[tokio::test]
590-
#[ignore]
591586
async fn not_creator_and_there_are_update_targeting_events() {
592-
let (config, redis) = setup().await;
587+
let (config, database) = setup().await;
593588

594589
let auth = Auth {
595590
era: 0,
@@ -624,7 +619,7 @@ mod test {
624619
},
625620
];
626621
let err_response = check_access(
627-
&redis,
622+
&database,
628623
&session,
629624
Some(&auth),
630625
&config.ip_rate_limit,
@@ -637,9 +632,8 @@ mod test {
637632
}
638633

639634
#[tokio::test]
640-
#[ignore]
641635
async fn in_withdraw_period_no_close_events() {
642-
let (config, redis) = setup().await;
636+
let (config, database) = setup().await;
643637

644638
let auth = Auth {
645639
era: 0,
@@ -664,7 +658,7 @@ mod test {
664658
channel.spec.withdraw_period_start = Utc.ymd(1970, 1, 1).and_hms(12, 0, 9);
665659

666660
let err_response = check_access(
667-
&redis,
661+
&database,
668662
&session,
669663
Some(&auth),
670664
&config.ip_rate_limit,
@@ -677,9 +671,8 @@ mod test {
677671
}
678672

679673
#[tokio::test]
680-
#[ignore]
681674
async fn with_forbidden_country() {
682-
let (config, redis) = setup().await;
675+
let (config, database) = setup().await;
683676

684677
let auth = Auth {
685678
era: 0,
@@ -703,7 +696,7 @@ mod test {
703696
let channel = get_channel(rule);
704697

705698
let err_response = check_access(
706-
&redis,
699+
&database,
707700
&session,
708701
Some(&auth),
709702
&config.ip_rate_limit,
@@ -716,9 +709,8 @@ mod test {
716709
}
717710

718711
#[tokio::test]
719-
#[ignore]
720712
async fn with_forbidden_referrer() {
721-
let (config, redis) = setup().await;
713+
let (config, database) = setup().await;
722714

723715
let auth = Auth {
724716
era: 0,
@@ -742,7 +734,7 @@ mod test {
742734
let channel = get_channel(rule);
743735

744736
let err_response = check_access(
745-
&redis,
737+
&database,
746738
&session,
747739
Some(&auth),
748740
&config.ip_rate_limit,
@@ -755,9 +747,8 @@ mod test {
755747
}
756748

757749
#[tokio::test]
758-
#[ignore]
759750
async fn no_rate_limit() {
760-
let (config, redis) = setup().await;
751+
let (config, database) = setup().await;
761752

762753
let auth = Auth {
763754
era: 0,
@@ -778,7 +769,7 @@ mod test {
778769
let channel = get_channel(rule);
779770

780771
let ok_response = check_access(
781-
&redis,
772+
&database,
782773
&session,
783774
Some(&auth),
784775
&config.ip_rate_limit,
@@ -791,9 +782,8 @@ mod test {
791782
}
792783

793784
#[tokio::test]
794-
#[ignore]
795785
async fn applied_rules() {
796-
let (config, redis) = setup().await;
786+
let (config, mut database) = setup().await;
797787

798788
let auth = Auth {
799789
era: 0,
@@ -817,7 +807,7 @@ mod test {
817807
let channel = get_channel(rule);
818808

819809
let ok_response = check_access(
820-
&redis,
810+
&database,
821811
&session,
822812
Some(&auth),
823813
&config.ip_rate_limit,
@@ -833,7 +823,8 @@ mod test {
833823

834824
let value_in_redis = redis::cmd("GET")
835825
.arg(&key)
836-
.query_async::<_, String>(&mut redis.clone())
826+
// Deref can't work here, so we need to call the `Object` -> `Database.connection`
827+
.query_async::<_, String>(&mut database.connection)
837828
.await
838829
.expect("should exist in redis");
839830
assert_eq!(&value, &value_in_redis);

0 commit comments

Comments
 (0)