@@ -6,7 +6,6 @@ use adex_primitives::{
6
6
} ,
7
7
targeting:: { self , input} ,
8
8
util:: ApiUrl ,
9
- validator:: ValidatorDesc ,
10
9
Address , BigNum , CampaignId , UnifiedNum , IPFS ,
11
10
} ;
12
11
use async_std:: { sync:: RwLock , task:: block_on} ;
@@ -56,6 +55,8 @@ pub enum Error {
56
55
Request ( #[ from] reqwest:: Error ) ,
57
56
#[ error( "No validators provided" ) ]
58
57
NoValidators ,
58
+ #[ error( "Invalid validator URL" ) ]
59
+ InvalidValidatorUrl ,
59
60
}
60
61
61
62
/// The Ad [`Manager`]'s options for showing ads.
@@ -84,7 +85,7 @@ pub struct Options {
84
85
///
85
86
/// default: `[]`
86
87
#[ serde( default ) ]
87
- pub validators : Vec < ValidatorDesc > ,
88
+ pub validators : Vec < ApiUrl > ,
88
89
}
89
90
90
91
/// [`AdSlot`](adex_primitives::AdSlot) size `width x height` in pixels (`px`)
@@ -251,7 +252,7 @@ impl Manager {
251
252
// Test with different units with price
252
253
// Test if first campaign is not overwritten
253
254
pub async fn get_units_for_slot_resp ( & self ) -> Result < Response , Error > {
254
- let deposit_asset = self
255
+ let deposit_assets = self
255
256
. options
256
257
. whitelisted_tokens
257
258
. iter ( )
@@ -267,25 +268,32 @@ impl Manager {
267
268
. next ( )
268
269
. ok_or ( Error :: NoValidators ) ?;
269
270
270
- let url = format ! (
271
- "{}/v5/units-for-slot/{}?{}" ,
272
- first_validator. url, self . options. market_slot, deposit_asset
273
- ) ;
274
-
271
+ let url = first_validator
272
+ . join ( & format ! (
273
+ "v5/units-for-slot/{}?{}" ,
274
+ self . options. market_slot, deposit_assets
275
+ ) )
276
+ . map_err ( |_| Error :: InvalidValidatorUrl ) ?;
275
277
// Ordering of the campaigns matters so we will just push them to the first result
276
278
// We reuse `targeting_input_base`, `accepted_referrers` and `fallback_unit`
277
- let json_res: String = self . client . get ( url) . send ( ) . await ?. text ( ) . await ?;
278
- let mut first_res: Response = serde_json:: from_str ( & json_res) . expect ( "Should convert" ) ;
279
-
279
+ let mut first_res: Response = self . client . get ( url. as_str ( ) ) . send ( ) . await ?. json ( ) . await ?;
280
+ // let mut first_res: Response = serde_json::from_str(&json_res).expect("Should convert");
280
281
for validator in self . options . validators . iter ( ) . skip ( 1 ) {
281
- let url = format ! (
282
- "{}/v5/units-for-slot/{}?{}" ,
283
- validator. url, self . options. market_slot, deposit_asset
284
- ) ;
285
- let new_res: Response = self . client . get ( url) . send ( ) . await ?. json ( ) . await ?;
286
- for campaign in new_res. campaigns {
287
- if !first_res. campaigns . contains ( & campaign) {
288
- first_res. campaigns . push ( campaign) ;
282
+ let url = validator
283
+ . join ( & format ! (
284
+ "v5/units-for-slot/{}?{}" ,
285
+ self . options. market_slot, deposit_assets
286
+ ) )
287
+ . map_err ( |_| Error :: InvalidValidatorUrl ) ?;
288
+ let new_res: Response = self . client . get ( url. as_str ( ) ) . send ( ) . await ?. json ( ) . await ?;
289
+ for response_campaign in new_res. campaigns {
290
+ if !first_res
291
+ . campaigns
292
+ . iter ( )
293
+ . map ( |rc| rc. campaign . id )
294
+ . any ( |x| x == response_campaign. campaign . id )
295
+ {
296
+ first_res. campaigns . push ( response_campaign) ;
289
297
}
290
298
}
291
299
}
@@ -446,10 +454,7 @@ mod test {
446
454
use crate :: manager:: input:: Input ;
447
455
use adex_primitives:: {
448
456
sentry:: CLICK ,
449
- test_util:: {
450
- CAMPAIGNS , DUMMY_AD_UNITS , DUMMY_IPFS , DUMMY_VALIDATOR_FOLLOWER ,
451
- DUMMY_VALIDATOR_LEADER , IDS , LEADER_2 , PUBLISHER ,
452
- } ,
457
+ test_util:: { CAMPAIGNS , DUMMY_AD_UNITS , DUMMY_IPFS , PUBLISHER } ,
453
458
} ;
454
459
use wiremock:: {
455
460
matchers:: { method, path} ,
@@ -517,34 +522,21 @@ mod test {
517
522
let modified_referrers =
518
523
vec ! [ Url :: parse( "https://www.google.com/adsense/start/" ) . expect( "should parse" ) ] ;
519
524
520
- let unit_0 = DUMMY_AD_UNITS [ 0 ] . clone ( ) ;
521
- let original_ad_unit = AdUnit {
522
- ipfs : unit_0. ipfs ,
523
- media_url : unit_0. media_url ,
524
- media_mime : unit_0. media_mime ,
525
- target_url : unit_0. target_url ,
526
- } ;
527
-
528
- let unit_1 = DUMMY_AD_UNITS [ 1 ] . clone ( ) ;
529
- let modified_ad_unit = AdUnit {
530
- ipfs : unit_1. ipfs ,
531
- media_url : unit_1. media_url ,
532
- media_mime : unit_1. media_mime ,
533
- target_url : unit_1. target_url ,
534
- } ;
525
+ let original_ad_unit = AdUnit :: from ( & DUMMY_AD_UNITS [ 0 ] ) ;
526
+ let modified_ad_unit = AdUnit :: from ( & DUMMY_AD_UNITS [ 1 ] ) ;
535
527
536
528
let campaign_0 = Campaign {
537
- campaign : CAMPAIGNS [ 0 ] . clone ( ) . context ,
529
+ campaign : CAMPAIGNS [ 0 ] . context . clone ( ) ,
538
530
units_with_price : Vec :: new ( ) ,
539
531
} ;
540
532
541
533
let campaign_1 = Campaign {
542
- campaign : CAMPAIGNS [ 1 ] . clone ( ) . context ,
534
+ campaign : CAMPAIGNS [ 1 ] . context . clone ( ) ,
543
535
units_with_price : Vec :: new ( ) ,
544
536
} ;
545
537
546
538
let campaign_2 = Campaign {
547
- campaign : CAMPAIGNS [ 2 ] . clone ( ) . context ,
539
+ campaign : CAMPAIGNS [ 2 ] . context . clone ( ) ,
548
540
units_with_price : Vec :: new ( ) ,
549
541
} ;
550
542
@@ -573,19 +565,19 @@ mod test {
573
565
} ;
574
566
575
567
Mock :: given ( method ( "GET" ) )
576
- . and ( path ( format ! ( "1/v5/units-for-slot/{}" , slot, ) ) )
568
+ . and ( path ( format ! ( "validator- 1/v5/units-for-slot/{}" , slot) ) )
577
569
. respond_with ( ResponseTemplate :: new ( 200 ) . set_body_json ( & response_1) )
578
570
. mount ( & server)
579
571
. await ;
580
572
581
573
Mock :: given ( method ( "GET" ) )
582
- . and ( path ( format ! ( "2/v5/units-for-slot/{}" , slot, ) ) )
574
+ . and ( path ( format ! ( "validator- 2/v5/units-for-slot/{}" , slot) ) )
583
575
. respond_with ( ResponseTemplate :: new ( 200 ) . set_body_json ( & response_2) )
584
576
. mount ( & server)
585
577
. await ;
586
578
587
579
Mock :: given ( method ( "GET" ) )
588
- . and ( path ( format ! ( "3/v5/units-for-slot/{}" , slot, ) ) )
580
+ . and ( path ( format ! ( "validator- 3/v5/units-for-slot/{}" , slot, ) ) )
589
581
. respond_with ( ResponseTemplate :: new ( 200 ) . set_body_json ( & response_3) )
590
582
. mount ( & server)
591
583
. await ;
@@ -596,13 +588,12 @@ mod test {
596
588
let publisher_addr = "0x0000000000000000626f62627973686d75726461"
597
589
. parse ( )
598
590
. unwrap ( ) ;
599
- let mut validator_1 = DUMMY_VALIDATOR_LEADER . clone ( ) ;
600
- validator_1. url = format ! ( "{}/1" , server. uri( ) ) ;
601
- let mut validator_2 = DUMMY_VALIDATOR_FOLLOWER . clone ( ) ;
602
- validator_2. url = format ! ( "{}/2" , server. uri( ) ) ;
603
- let mut validator_3 = DUMMY_VALIDATOR_LEADER . clone ( ) ;
604
- validator_3. id = IDS [ & LEADER_2 ] ;
605
- validator_3. url = format ! ( "{}/3" , server. uri( ) ) ;
591
+ let validator_1_url =
592
+ ApiUrl :: parse ( & format ! ( "{}/validator-1" , server. uri( ) ) ) . expect ( "should parse" ) ;
593
+ let validator_2_url =
594
+ ApiUrl :: parse ( & format ! ( "{}/validator-2" , server. uri( ) ) ) . expect ( "should parse" ) ;
595
+ let validator_3_url =
596
+ ApiUrl :: parse ( & format ! ( "{}/validator-3" , server. uri( ) ) ) . expect ( "should parse" ) ;
606
597
let options = Options {
607
598
market_url,
608
599
market_slot : DUMMY_IPFS [ 0 ] ,
@@ -613,7 +604,7 @@ mod test {
613
604
navigator_language : Some ( "bg" . into ( ) ) ,
614
605
disabled_video : false ,
615
606
disabled_sticky : false ,
616
- validators : vec ! [ validator_1 , validator_2 , validator_3 ] ,
607
+ validators : vec ! [ validator_1_url , validator_2_url , validator_3_url ] ,
617
608
} ;
618
609
619
610
let manager = Manager :: new ( options. clone ( ) , Default :: default ( ) )
0 commit comments