@@ -37,7 +37,7 @@ use tempdir::TempDir;
37
37
// Creates a mock dist server populated with some test data
38
38
pub fn create_mock_dist_server (
39
39
path : & Path ,
40
- edit : Option < & Fn ( & str , & mut MockPackage ) > ,
40
+ edit : Option < & Fn ( & str , & mut [ MockPackage ] ) > ,
41
41
) -> MockDistServer {
42
42
MockDistServer {
43
43
path : path. to_owned ( ) ,
@@ -51,7 +51,7 @@ pub fn create_mock_dist_server(
51
51
pub fn create_mock_channel (
52
52
channel : & str ,
53
53
date : & str ,
54
- edit : Option < & Fn ( & str , & mut MockPackage ) > ,
54
+ edit : Option < & Fn ( & str , & mut [ MockPackage ] ) > ,
55
55
) -> MockChannel {
56
56
// Put the date in the files so they can be differentiated
57
57
let contents = Arc :: new ( date. as_bytes ( ) . to_vec ( ) ) ;
@@ -209,7 +209,7 @@ pub fn create_mock_channel(
209
209
packages. push ( bonus_component ( "bonus" , contents. clone ( ) ) ) ;
210
210
211
211
if let Some ( edit) = edit {
212
- edit ( date, & mut packages[ 0 ] ) ;
212
+ edit ( date, & mut packages) ;
213
213
}
214
214
215
215
MockChannel {
@@ -289,8 +289,8 @@ fn rename_component() {
289
289
let dist_tempdir = TempDir :: new ( "rustup" ) . unwrap ( ) ;
290
290
let ref url = Url :: parse ( & format ! ( "file://{}" , dist_tempdir. path( ) . to_string_lossy( ) ) ) . unwrap ( ) ;
291
291
292
- let edit_1 = & |_: & str , pkg : & mut MockPackage | {
293
- let tpkg = pkg . targets
292
+ let edit_1 = & |_: & str , pkgs : & mut [ MockPackage ] | {
293
+ let tpkg = pkgs [ 0 ] . targets
294
294
. iter_mut ( )
295
295
. find ( |p| p. target == "x86_64-apple-darwin" )
296
296
. unwrap ( ) ;
@@ -299,8 +299,8 @@ fn rename_component() {
299
299
target : "x86_64-apple-darwin" . to_string ( ) ,
300
300
} ) ;
301
301
} ;
302
- let edit_2 = & |_: & str , pkg : & mut MockPackage | {
303
- let tpkg = pkg . targets
302
+ let edit_2 = & |_: & str , pkgs : & mut [ MockPackage ] | {
303
+ let tpkg = pkgs [ 0 ] . targets
304
304
. iter_mut ( )
305
305
. find ( |p| p. target == "x86_64-apple-darwin" )
306
306
. unwrap ( ) ;
@@ -347,8 +347,8 @@ fn rename_component_ignore() {
347
347
let dist_tempdir = TempDir :: new ( "rustup" ) . unwrap ( ) ;
348
348
let ref url = Url :: parse ( & format ! ( "file://{}" , dist_tempdir. path( ) . to_string_lossy( ) ) ) . unwrap ( ) ;
349
349
350
- let edit = & |_: & str , pkg : & mut MockPackage | {
351
- let tpkg = pkg . targets
350
+ let edit = & |_: & str , pkgs : & mut [ MockPackage ] | {
351
+ let tpkg = pkgs [ 0 ] . targets
352
352
. iter_mut ( )
353
353
. find ( |p| p. target == "x86_64-apple-darwin" )
354
354
. unwrap ( ) ;
@@ -395,8 +395,8 @@ fn rename_component_new() {
395
395
let dist_tempdir = TempDir :: new ( "rustup" ) . unwrap ( ) ;
396
396
let ref url = Url :: parse ( & format ! ( "file://{}" , dist_tempdir. path( ) . to_string_lossy( ) ) ) . unwrap ( ) ;
397
397
398
- let edit_2 = & |_: & str , pkg : & mut MockPackage | {
399
- let tpkg = pkg . targets
398
+ let edit_2 = & |_: & str , pkgs : & mut [ MockPackage ] | {
399
+ let tpkg = pkgs [ 0 ] . targets
400
400
. iter_mut ( )
401
401
. find ( |p| p. target == "x86_64-apple-darwin" )
402
402
. unwrap ( ) ;
@@ -526,7 +526,7 @@ fn uninstall(
526
526
}
527
527
528
528
fn setup (
529
- edit : Option < & Fn ( & str , & mut MockPackage ) > ,
529
+ edit : Option < & Fn ( & str , & mut [ MockPackage ] ) > ,
530
530
enable_xz : bool ,
531
531
f : & Fn ( & Url , & ToolchainDesc , & InstallPrefix , & DownloadCfg , & temp:: Cfg ) ,
532
532
) {
@@ -645,11 +645,12 @@ fn upgrade() {
645
645
}
646
646
647
647
#[ test]
648
- fn force_update ( ) {
649
- // On day 1 install the 'bonus' component, on day 2 its no longer a component
650
- let edit = & |date : & str , pkg : & mut MockPackage | {
651
- if date == "2016-02-01" {
652
- let mut tpkg = pkg. targets
648
+ fn unavailable_component ( ) {
649
+ // On day 2 the bonus component is no longer available
650
+ let edit = & |date : & str , pkgs : & mut [ MockPackage ] | {
651
+ // Require the bonus component every dat
652
+ {
653
+ let tpkg = pkgs[ 0 ] . targets
653
654
. iter_mut ( )
654
655
. find ( |p| p. target == "x86_64-apple-darwin" )
655
656
. unwrap ( ) ;
@@ -658,6 +659,17 @@ fn force_update() {
658
659
target : "x86_64-apple-darwin" . to_string ( ) ,
659
660
} ) ;
660
661
}
662
+
663
+ // Mark the bonus package as unavailable in 2016-02-02
664
+ if date == "2016-02-02" {
665
+ let bonus_pkg = pkgs. iter_mut ( )
666
+ . find ( |p| p. name == "bonus" )
667
+ . unwrap ( ) ;
668
+
669
+ for target in & mut bonus_pkg. targets {
670
+ target. available = false ;
671
+ }
672
+ }
661
673
} ;
662
674
663
675
setup (
@@ -677,18 +689,54 @@ fn force_update() {
677
689
ErrorKind :: RequestedComponentsUnavailable ( ..) => { }
678
690
_ => panic ! ( ) ,
679
691
}
680
- // Force update without bonus, should succeed, but bonus binary will be missing.
681
- update_from_dist_ (
682
- url,
683
- toolchain,
684
- prefix,
685
- & [ ] ,
686
- & [ ] ,
687
- download_cfg,
688
- temp_cfg,
689
- true ,
690
- ) . unwrap ( ) ;
692
+ } ,
693
+ ) ;
694
+ }
695
+
696
+ #[ test]
697
+ fn removed_component ( ) {
698
+ // On day 1 install the 'bonus' component, on day 2 its no longer a component
699
+ let edit = & |date : & str , pkgs : & mut [ MockPackage ] | {
700
+ if date == "2016-02-01" {
701
+ let tpkg = pkgs[ 0 ] . targets
702
+ . iter_mut ( )
703
+ . find ( |p| p. target == "x86_64-apple-darwin" )
704
+ . unwrap ( ) ;
705
+ tpkg. components . push ( MockComponent {
706
+ name : "bonus" . to_string ( ) ,
707
+ target : "x86_64-apple-darwin" . to_string ( ) ,
708
+ } ) ;
709
+ }
710
+ } ;
711
+
712
+ setup (
713
+ Some ( edit) ,
714
+ false ,
715
+ & |url, toolchain, prefix, download_cfg, temp_cfg| {
716
+ let received_notification = Arc :: new ( Cell :: new ( false ) ) ;
717
+
718
+ let download_cfg = DownloadCfg {
719
+ dist_root : download_cfg. dist_root ,
720
+ temp_cfg : download_cfg. temp_cfg ,
721
+ download_dir : download_cfg. download_dir ,
722
+ notify_handler : & |n| {
723
+ if let Notification :: ComponentUnavailable ( "bonus" , Some ( _) ) = n {
724
+ received_notification. set ( true ) ;
725
+ }
726
+ } ,
727
+ } ;
728
+
729
+ change_channel_date ( url, "nightly" , "2016-02-01" ) ;
730
+ // Update with bonus.
731
+ update_from_dist ( url, toolchain, prefix, & [ ] , & [ ] , & download_cfg, temp_cfg) . unwrap ( ) ;
732
+ assert ! ( utils:: path_exists( & prefix. path( ) . join( "bin/bonus" ) ) ) ;
733
+ change_channel_date ( url, "nightly" , "2016-02-02" ) ;
734
+
735
+ // Update without bonus, should emit a notify and remove the bonus component
736
+ update_from_dist ( url, toolchain, prefix, & [ ] , & [ ] , & download_cfg, temp_cfg) . unwrap ( ) ;
691
737
assert ! ( !utils:: path_exists( & prefix. path( ) . join( "bin/bonus" ) ) ) ;
738
+
739
+ assert ! ( received_notification. get( ) ) ;
692
740
} ,
693
741
) ;
694
742
}
@@ -735,9 +783,9 @@ fn update_preserves_extensions() {
735
783
736
784
#[ test]
737
785
fn update_preserves_extensions_that_became_components ( ) {
738
- let edit = & |date : & str , pkg : & mut MockPackage | {
786
+ let edit = & |date : & str , pkgs : & mut [ MockPackage ] | {
739
787
if date == "2016-02-01" {
740
- let mut tpkg = pkg . targets
788
+ let tpkg = pkgs [ 0 ] . targets
741
789
. iter_mut ( )
742
790
. find ( |p| p. target == "x86_64-apple-darwin" )
743
791
. unwrap ( ) ;
@@ -747,7 +795,7 @@ fn update_preserves_extensions_that_became_components() {
747
795
} ) ;
748
796
}
749
797
if date == "2016-02-02" {
750
- let mut tpkg = pkg . targets
798
+ let tpkg = pkgs [ 0 ] . targets
751
799
. iter_mut ( )
752
800
. find ( |p| p. target == "x86_64-apple-darwin" )
753
801
. unwrap ( ) ;
@@ -782,9 +830,9 @@ fn update_preserves_extensions_that_became_components() {
782
830
783
831
#[ test]
784
832
fn update_preserves_components_that_became_extensions ( ) {
785
- let edit = & |date : & str , pkg : & mut MockPackage | {
833
+ let edit = & |date : & str , pkgs : & mut [ MockPackage ] | {
786
834
if date == "2016-02-01" {
787
- let mut tpkg = pkg . targets
835
+ let tpkg = pkgs [ 0 ] . targets
788
836
. iter_mut ( )
789
837
. find ( |p| p. target == "x86_64-apple-darwin" )
790
838
. unwrap ( ) ;
@@ -794,7 +842,7 @@ fn update_preserves_components_that_became_extensions() {
794
842
} ) ;
795
843
}
796
844
if date == "2016-02-02" {
797
- let mut tpkg = pkg . targets
845
+ let tpkg = pkgs [ 0 ] . targets
798
846
. iter_mut ( )
799
847
. find ( |p| p. target == "x86_64-apple-darwin" )
800
848
. unwrap ( ) ;
@@ -1127,9 +1175,9 @@ fn remove_extension_not_in_manifest() {
1127
1175
#[ test]
1128
1176
#[ should_panic]
1129
1177
fn remove_extension_not_in_manifest_but_is_already_installed ( ) {
1130
- let edit = & |date : & str , pkg : & mut MockPackage | {
1178
+ let edit = & |date : & str , pkgs : & mut [ MockPackage ] | {
1131
1179
if date == "2016-02-01" {
1132
- let mut tpkg = pkg . targets
1180
+ let tpkg = pkgs [ 0 ] . targets
1133
1181
. iter_mut ( )
1134
1182
. find ( |p| p. target == "x86_64-apple-darwin" )
1135
1183
. unwrap ( ) ;
0 commit comments