Skip to content

Commit 8d2ce53

Browse files
committed
Add tests for workload install state
1 parent e7a1d37 commit 8d2ce53

File tree

1 file changed

+354
-0
lines changed

1 file changed

+354
-0
lines changed

src/Tests/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs

Lines changed: 354 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,348 @@ public void ItFailsIfGlobalJsonIsMalformed()
523523
() => new SdkDirectoryWorkloadManifestProvider(sdkRootPath: _fakeDotnetRootDirectory, sdkVersion: "8.0.200", userProfileDir: null, globalJsonPath: globalJsonPath));
524524
}
525525

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\nios\nmaui");
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+
526868
[Fact]
527869
public void ItShouldReturnManifestsFromTestHook()
528870
{
@@ -822,6 +1164,18 @@ private void CreateMockWorkloadSet(string manifestRoot, string featureBand, stri
8221164
File.WriteAllText(Path.Combine(workloadSetDirectory, "workloadset.workloadset.json"), workloadSetContents);
8231165
}
8241166

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+
8251179
[Fact]
8261180
public void ItShouldIgnoreManifestsNotFoundInFallback()
8271181
{

0 commit comments

Comments
 (0)