@@ -523,6 +523,348 @@ public void ItFailsIfGlobalJsonIsMalformed()
523
523
( ) => new SdkDirectoryWorkloadManifestProvider ( sdkRootPath : _fakeDotnetRootDirectory , sdkVersion : "8.0.200" , userProfileDir : null , globalJsonPath : globalJsonPath ) ) ;
524
524
}
525
525
526
+ [ Fact ]
527
+ public void ItUsesWorkloadSetFromInstallState ( )
528
+ {
529
+ Initialize ( "8.0.200" ) ;
530
+
531
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.1" , true ) ;
532
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.2" , true ) ;
533
+ CreateMockManifest ( _manifestRoot , "8.0.200" , "ios" , "12.0.1" , true ) ;
534
+
535
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.201" , """
536
+ {
537
+ "ios": "11.0.2/8.0.100"
538
+ }
539
+ """ ) ;
540
+
541
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.202" , """
542
+ {
543
+ "ios": "12.0.1/8.0.200"
544
+ }
545
+ """ ) ;
546
+ CreateMockInstallState ( "8.0.200" ,
547
+ """
548
+ {
549
+ "workloadVersion": "8.0.201"
550
+ }
551
+ """ ) ;
552
+
553
+
554
+ var sdkDirectoryWorkloadManifestProvider
555
+ = new SdkDirectoryWorkloadManifestProvider ( sdkRootPath : _fakeDotnetRootDirectory , sdkVersion : "8.0.200" , userProfileDir : null , globalJsonPath : null ) ;
556
+
557
+ GetManifestContents ( sdkDirectoryWorkloadManifestProvider )
558
+ . Should ( )
559
+ . BeEquivalentTo ( "ios: 11.0.2/8.0.100" ) ;
560
+ }
561
+
562
+ [ Fact ]
563
+ public void ItFailsIfWorkloadSetFromInstallStateIsNotInstalled ( )
564
+ {
565
+ Initialize ( "8.0.200" ) ;
566
+
567
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.1" , true ) ;
568
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.2" , true ) ;
569
+ CreateMockManifest ( _manifestRoot , "8.0.200" , "ios" , "12.0.1" , true ) ;
570
+
571
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.201" , """
572
+ {
573
+ "ios": "11.0.2/8.0.100"
574
+ }
575
+ """ ) ;
576
+
577
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.202" , """
578
+ {
579
+ "ios": "12.0.1/8.0.200"
580
+ }
581
+ """ ) ;
582
+ var installStatePath = CreateMockInstallState ( "8.0.200" ,
583
+ """
584
+ {
585
+ "workloadVersion": "8.0.203"
586
+ }
587
+ """ ) ;
588
+
589
+
590
+ var ex = Assert . Throws < FileNotFoundException > (
591
+ ( ) => new SdkDirectoryWorkloadManifestProvider ( sdkRootPath : _fakeDotnetRootDirectory , sdkVersion : "8.0.200" , userProfileDir : null , globalJsonPath : null ) ) ;
592
+
593
+ ex . Message . Should ( ) . Be ( string . Format ( Strings . WorkloadVersionFromInstallStateNotFound , "8.0.203" , installStatePath ) ) ;
594
+ }
595
+
596
+ [ Fact ]
597
+ public void ItFailsIfManifestFromWorkloadSetFromInstallStateIsNotInstalled ( )
598
+ {
599
+ Initialize ( "8.0.200" ) ;
600
+
601
+ CreateMockManifest ( _manifestRoot , "8.0.200" , "ios" , "12.0.1" , true ) ;
602
+
603
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.201" , """
604
+ {
605
+ "ios": "11.0.2/8.0.100"
606
+ }
607
+ """ ) ;
608
+
609
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.202" , """
610
+ {
611
+ "ios": "12.0.1/8.0.200"
612
+ }
613
+ """ ) ;
614
+ var installStatePath = CreateMockInstallState ( "8.0.200" ,
615
+ """
616
+ {
617
+ "workloadVersion": "8.0.201"
618
+ }
619
+ """ ) ;
620
+
621
+ var sdkDirectoryWorkloadManifestProvider
622
+ = new SdkDirectoryWorkloadManifestProvider ( sdkRootPath : _fakeDotnetRootDirectory , sdkVersion : "8.0.200" , userProfileDir : null , globalJsonPath : null ) ;
623
+
624
+ var ex = Assert . Throws < FileNotFoundException > ( ( ) => sdkDirectoryWorkloadManifestProvider . GetManifests ( ) . ToList ( ) ) ;
625
+
626
+ ex . Message . Should ( ) . Be ( string . Format ( Strings . ManifestFromWorkloadSetNotFound , "ios: 11.0.2/8.0.100" , "8.0.201" ) ) ;
627
+ }
628
+
629
+ [ Fact ]
630
+ public void ItUsesWorkloadManifestFromInstallState ( )
631
+ {
632
+ Initialize ( "8.0.200" ) ;
633
+
634
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.1" , true ) ;
635
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.2" , true ) ;
636
+ CreateMockManifest ( _manifestRoot , "8.0.200" , "ios" , "12.0.1" , true ) ;
637
+
638
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.201" , """
639
+ {
640
+ "ios": "11.0.2/8.0.100"
641
+ }
642
+ """ ) ;
643
+
644
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.202" , """
645
+ {
646
+ "ios": "12.0.1/8.0.200"
647
+ }
648
+ """ ) ;
649
+ CreateMockInstallState ( "8.0.200" ,
650
+ """
651
+ {
652
+ "manifests": {
653
+ "ios": "11.0.1/8.0.100",
654
+ }
655
+ }
656
+ """ ) ;
657
+
658
+
659
+ var sdkDirectoryWorkloadManifestProvider
660
+ = new SdkDirectoryWorkloadManifestProvider ( sdkRootPath : _fakeDotnetRootDirectory , sdkVersion : "8.0.200" , userProfileDir : null , globalJsonPath : null ) ;
661
+
662
+ GetManifestContents ( sdkDirectoryWorkloadManifestProvider )
663
+ . Should ( )
664
+ . BeEquivalentTo ( "ios: 11.0.1/8.0.100" ) ;
665
+ }
666
+
667
+ [ Fact ]
668
+ public void ItFailsIfManifestFromInstallStateIsNotInstalled ( )
669
+ {
670
+ Initialize ( "8.0.200" ) ;
671
+
672
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.1" , true ) ;
673
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.2" , true ) ;
674
+ CreateMockManifest ( _manifestRoot , "8.0.200" , "ios" , "12.0.1" , true ) ;
675
+
676
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.201" , """
677
+ {
678
+ "ios": "11.0.2/8.0.100"
679
+ }
680
+ """ ) ;
681
+
682
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.202" , """
683
+ {
684
+ "ios": "12.0.1/8.0.200"
685
+ }
686
+ """ ) ;
687
+ var installStatePath = CreateMockInstallState ( "8.0.200" ,
688
+ """
689
+ {
690
+ "manifests": {
691
+ "ios": "12.0.2/8.0.200",
692
+ }
693
+ }
694
+ """ ) ;
695
+
696
+ var sdkDirectoryWorkloadManifestProvider
697
+ = new SdkDirectoryWorkloadManifestProvider ( sdkRootPath : _fakeDotnetRootDirectory , sdkVersion : "8.0.200" , userProfileDir : null , globalJsonPath : null ) ;
698
+
699
+ var ex = Assert . Throws < FileNotFoundException > ( ( ) => sdkDirectoryWorkloadManifestProvider . GetManifests ( ) . ToList ( ) ) ;
700
+
701
+ ex . Message . Should ( ) . Be ( string . Format ( Strings . ManifestFromInstallStateNotFound , "ios: 12.0.2/8.0.200" , installStatePath ) ) ;
702
+ }
703
+
704
+ [ Fact ]
705
+ public void ItUsesWorkloadSetAndManifestFromInstallState ( )
706
+ {
707
+ Initialize ( "8.0.200" ) ;
708
+
709
+ CreateMockManifest ( _manifestRoot , "8.0.200" , "tizen" , "8.0.0" , true ) ;
710
+ CreateMockManifest ( _manifestRoot , "8.0.200" , "tizen" , "8.0.1" , true ) ;
711
+
712
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.1" , true ) ;
713
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.2" , true ) ;
714
+ CreateMockManifest ( _manifestRoot , "8.0.200" , "ios" , "12.0.1" , true ) ;
715
+
716
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.201" , """
717
+ {
718
+ "ios": "11.0.2/8.0.100"
719
+ }
720
+ """ ) ;
721
+
722
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.202" , """
723
+ {
724
+ "ios": "12.0.1/8.0.200"
725
+ }
726
+ """ ) ;
727
+ CreateMockInstallState ( "8.0.200" ,
728
+ """
729
+ {
730
+ "workloadVersion": "8.0.201",
731
+ "manifests": {
732
+ "tizen": "8.0.0/8.0.200",
733
+ }
734
+ }
735
+ """ ) ;
736
+
737
+
738
+ var sdkDirectoryWorkloadManifestProvider
739
+ = new SdkDirectoryWorkloadManifestProvider ( sdkRootPath : _fakeDotnetRootDirectory , sdkVersion : "8.0.200" , userProfileDir : null , globalJsonPath : null ) ;
740
+
741
+ GetManifestContents ( sdkDirectoryWorkloadManifestProvider )
742
+ . Should ( )
743
+ . BeEquivalentTo ( "ios: 11.0.2/8.0.100" , "tizen: 8.0.0/8.0.200" ) ;
744
+ }
745
+
746
+ [ Fact ]
747
+ public void WorkloadManifestFromInstallStateOverridesWorkloadSetFromInstallState ( )
748
+ {
749
+ Initialize ( "8.0.200" ) ;
750
+
751
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.1" , true ) ;
752
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.2" , true ) ;
753
+ CreateMockManifest ( _manifestRoot , "8.0.200" , "ios" , "12.0.1" , true ) ;
754
+
755
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.201" , """
756
+ {
757
+ "ios": "11.0.2/8.0.100"
758
+ }
759
+ """ ) ;
760
+
761
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.202" , """
762
+ {
763
+ "ios": "12.0.1/8.0.200"
764
+ }
765
+ """ ) ;
766
+ CreateMockInstallState ( "8.0.200" ,
767
+ """
768
+ {
769
+ "workloadVersion": "8.0.201",
770
+ "manifests": {
771
+ "ios": "11.0.1/8.0.100",
772
+ }
773
+ }
774
+ """ ) ;
775
+
776
+ var sdkDirectoryWorkloadManifestProvider
777
+ = new SdkDirectoryWorkloadManifestProvider ( sdkRootPath : _fakeDotnetRootDirectory , sdkVersion : "8.0.200" , userProfileDir : null , globalJsonPath : null ) ;
778
+
779
+ GetManifestContents ( sdkDirectoryWorkloadManifestProvider )
780
+ . Should ( )
781
+ . BeEquivalentTo ( "ios: 11.0.1/8.0.100" ) ;
782
+ }
783
+
784
+ // Falls back for manifest not in install state
785
+ [ Fact ]
786
+ public void ItFallsBackForManifestNotInInstallState ( )
787
+ {
788
+ Initialize ( "8.0.200" ) ;
789
+
790
+ var knownWorkloadsFilePath = Path . Combine ( _fakeDotnetRootDirectory , "sdk" , "8.0.201" , "IncludedWorkloadManifests.txt" ) ;
791
+ Directory . CreateDirectory ( Path . GetDirectoryName ( knownWorkloadsFilePath ) ! ) ;
792
+ File . WriteAllText ( knownWorkloadsFilePath , "android\n ios\n maui" ) ;
793
+
794
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.1" , true ) ;
795
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.2" , true ) ;
796
+ CreateMockManifest ( _manifestRoot , "8.0.200" , "ios" , "12.0.1" , true ) ;
797
+
798
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "android" , "33.0.1" , true ) ;
799
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "android" , "33.0.2-rc.1" , true ) ;
800
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "android" , "33.0.2" , true ) ;
801
+
802
+ CreateMockInstallState ( "8.0.200" ,
803
+ """
804
+ {
805
+ "manifests": {
806
+ "ios": "12.0.1/8.0.200",
807
+ }
808
+ }
809
+ """ ) ;
810
+
811
+ var sdkDirectoryWorkloadManifestProvider
812
+ = new SdkDirectoryWorkloadManifestProvider ( sdkRootPath : _fakeDotnetRootDirectory , sdkVersion : "8.0.201" , userProfileDir : null , globalJsonPath : null ) ;
813
+
814
+ GetManifestContents ( sdkDirectoryWorkloadManifestProvider )
815
+ . Should ( )
816
+ . BeEquivalentTo ( "ios: 12.0.1/8.0.200" , "android: 33.0.2/8.0.100" ) ;
817
+ }
818
+
819
+ [ Fact ]
820
+ public void GlobalJsonOverridesInstallState ( )
821
+ {
822
+ Initialize ( "8.0.200" ) ;
823
+
824
+ string ? globalJsonPath = Path . Combine ( _testDirectory , "global.json" ) ;
825
+ File . WriteAllText ( globalJsonPath , """
826
+ {
827
+ "sdk": {
828
+ "version": "8.0.200",
829
+ "workloadversion": "8.0.201"
830
+ },
831
+ "msbuild-sdks": {
832
+ "Microsoft.DotNet.Arcade.Sdk": "7.0.0-beta.23254.2",
833
+ }
834
+ }
835
+ """ ) ;
836
+
837
+ CreateMockInstallState ( "8.0.200" ,
838
+ """
839
+ {
840
+ "workloadVersion": "8.0.202",
841
+ }
842
+ """ ) ;
843
+
844
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.1" , true ) ;
845
+ CreateMockManifest ( _manifestRoot , "8.0.100" , "ios" , "11.0.2" , true ) ;
846
+ CreateMockManifest ( _manifestRoot , "8.0.200" , "ios" , "12.0.1" , true ) ;
847
+
848
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.201" , """
849
+ {
850
+ "ios": "11.0.2/8.0.100"
851
+ }
852
+ """ ) ;
853
+
854
+ CreateMockWorkloadSet ( _manifestRoot , "8.0.200" , "8.0.202" , """
855
+ {
856
+ "ios": "12.0.1/8.0.200"
857
+ }
858
+ """ ) ;
859
+
860
+ var sdkDirectoryWorkloadManifestProvider
861
+ = new SdkDirectoryWorkloadManifestProvider ( sdkRootPath : _fakeDotnetRootDirectory , sdkVersion : "8.0.200" , userProfileDir : null , globalJsonPath : globalJsonPath ) ;
862
+
863
+ GetManifestContents ( sdkDirectoryWorkloadManifestProvider )
864
+ . Should ( )
865
+ . BeEquivalentTo ( "ios: 11.0.2/8.0.100" ) ;
866
+ }
867
+
526
868
[ Fact ]
527
869
public void ItShouldReturnManifestsFromTestHook ( )
528
870
{
@@ -822,6 +1164,18 @@ private void CreateMockWorkloadSet(string manifestRoot, string featureBand, stri
822
1164
File . WriteAllText ( Path . Combine ( workloadSetDirectory , "workloadset.workloadset.json" ) , workloadSetContents ) ;
823
1165
}
824
1166
1167
+ private string CreateMockInstallState ( string featureBand , string installStateContents )
1168
+ {
1169
+ var installStateFolder = Path . Combine ( _fakeDotnetRootDirectory ! , "metadata" , "workloads" , "8.0.200" , "InstallState" ) ;
1170
+ Directory . CreateDirectory ( installStateFolder ) ;
1171
+
1172
+ string installStatePath = Path . Combine ( installStateFolder , "default.json" ) ;
1173
+
1174
+ File . WriteAllText ( installStatePath , installStateContents ) ;
1175
+
1176
+ return installStatePath ;
1177
+ }
1178
+
825
1179
[ Fact ]
826
1180
public void ItShouldIgnoreManifestsNotFoundInFallback ( )
827
1181
{
0 commit comments