DscResourceMapTests.cs (8205B)
1 // ----------------------------------------------------------------------------- 2 // <copyright file="DscResourceMapTests.cs" company="Microsoft Corporation"> 3 // Copyright (c) Microsoft Corporation. Licensed under the MIT License. 4 // </copyright> 5 // ----------------------------------------------------------------------------- 6 7 namespace Microsoft.Management.Configuration.UnitTests.Tests 8 { 9 using System; 10 using System.Collections.Generic; 11 using Microsoft.Management.Configuration.Processor.PowerShell.DscResourcesInfo; 12 using Microsoft.Management.Configuration.Processor.PowerShell.Helpers; 13 using Microsoft.Management.Configuration.UnitTests.Fixtures; 14 using Microsoft.Management.Configuration.UnitTests.Helpers; 15 using Xunit; 16 using Xunit.Abstractions; 17 18 /// <summary> 19 /// DscResourceMap tests. 20 /// </summary> 21 [Collection("UnitTestCollection")] 22 [InProc] 23 public class DscResourceMapTests 24 { 25 private const string ResourceZoro = "xResourceZoro"; 26 27 private const string ModuleMugiwara = "xMugiwaraModule"; 28 private const string ModuleMugiwaraResourceLuffy = "xResourceLuffy"; 29 30 private const string ModuleOni = "xModuleOni"; 31 private const string ModuleOniResourceKaido = "xResourceKaido"; 32 private const string ModuleOniResourceYamato = "xResourceYamato"; 33 34 private static readonly Version VersionZoro = new Version("1.0.0.0"); 35 36 private static readonly Version VersionLuffyGear4 = new Version("4.0.0.1"); 37 private static readonly Version VersionLuffyGear5 = new Version("5.0.0.0"); 38 39 private static readonly Version VersionKaido = new Version("0.0.0.4"); 40 private static readonly Version VersionYamato = new Version("0.0.0.11"); 41 42 private readonly UnitTestFixture fixture; 43 private readonly ITestOutputHelper log; 44 45 /// <summary> 46 /// Initializes a new instance of the <see cref="DscResourceMapTests"/> class. 47 /// </summary> 48 /// <param name="fixture">Unit test fixture.</param> 49 /// <param name="log">Log.</param> 50 public DscResourceMapTests(UnitTestFixture fixture, ITestOutputHelper log) 51 { 52 this.fixture = fixture; 53 this.log = log; 54 } 55 56 /// <summary> 57 /// Test GetResource for resources in the map. 58 /// </summary> 59 [Fact] 60 public void DscResourcesMap_GetResource() 61 { 62 var dscResourceMap = new DscResourcesMap(this.CreateDscResourceInfo()); 63 64 // Get just by name. 65 var zoroResult = dscResourceMap.GetResource(ResourceZoro, null, null); 66 Assert.NotNull(zoroResult); 67 Assert.Equal(ResourceZoro, zoroResult.Name); 68 Assert.Equal(VersionZoro, zoroResult.Version); 69 70 // Name not normalized. 71 var zoroResultNormalize = dscResourceMap.GetResource("XRESOURCEZORO", null, null); 72 Assert.NotNull(zoroResultNormalize); 73 Assert.Equal(ResourceZoro, zoroResultNormalize.Name); 74 Assert.Equal(VersionZoro, zoroResultNormalize.Version); 75 76 var yamatoResult = dscResourceMap.GetResource(ModuleOniResourceYamato, null, null); 77 Assert.NotNull(yamatoResult); 78 Assert.Equal(ModuleOniResourceYamato, yamatoResult.Name); 79 Assert.Equal(ModuleOni, yamatoResult.ModuleName); 80 Assert.Equal(VersionYamato, yamatoResult.Version); 81 82 // Just by name and module get latest. 83 var luffyResult5 = dscResourceMap.GetResource(ModuleMugiwaraResourceLuffy, ModuleMugiwara, null); 84 Assert.NotNull(luffyResult5); 85 Assert.Equal(ModuleMugiwaraResourceLuffy, luffyResult5.Name); 86 Assert.Equal(ModuleMugiwara, luffyResult5.ModuleName); 87 Assert.Equal(VersionLuffyGear5, luffyResult5.Version); 88 89 // Specific version. 90 var luffyResult4 = dscResourceMap.GetResource(ModuleMugiwaraResourceLuffy, ModuleMugiwara, VersionLuffyGear4); 91 Assert.NotNull(luffyResult4); 92 Assert.Equal(ModuleMugiwaraResourceLuffy, luffyResult4.Name); 93 Assert.Equal(ModuleMugiwara, luffyResult4.ModuleName); 94 Assert.Equal(VersionLuffyGear4, luffyResult4.Version); 95 96 // Module name not normalized 97 var luffyResult4Normalized = dscResourceMap.GetResource(ModuleMugiwaraResourceLuffy, "XMUGIWARAMODULE", VersionLuffyGear4); 98 Assert.NotNull(luffyResult4Normalized); 99 Assert.Equal(ModuleMugiwaraResourceLuffy, luffyResult4Normalized.Name); 100 Assert.Equal(ModuleMugiwara, luffyResult4Normalized.ModuleName); 101 Assert.Equal(VersionLuffyGear4, luffyResult4Normalized.Version); 102 } 103 104 /// <summary> 105 /// Tests GetResource when resources are not in the maps. 106 /// </summary> 107 [Fact] 108 public void DscResourcesMap_GetResource_NoResource() 109 { 110 var dscResourceMap = new DscResourcesMap(this.CreateDscResourceInfo()); 111 112 // Zoro is lost. 113 var zoroResult = dscResourceMap.GetResource(ResourceZoro, ModuleMugiwara, null); 114 Assert.Null(zoroResult); 115 116 // Yamato didn't join (spoilers) 117 var yamatoResult = dscResourceMap.GetResource(ModuleOniResourceYamato, ModuleMugiwara, VersionYamato); 118 Assert.Null(yamatoResult); 119 120 // Gear 6 is not a thing (?) 121 var luffyResult = dscResourceMap.GetResource(ModuleMugiwaraResourceLuffy, ModuleMugiwara, Version.Parse("6.0.0.0")); 122 Assert.Null(luffyResult); 123 124 // Wrong universe. 125 var gokuResult = dscResourceMap.GetResource("xResourceGoku", null, null); 126 Assert.Null(gokuResult); 127 } 128 129 /// <summary> 130 /// Test Exists for resources in the map. 131 /// </summary> 132 [Fact] 133 public void DscResourcesMap_Exists() 134 { 135 var dscResourceMap = new DscResourcesMap(this.CreateDscResourceInfo()); 136 137 Assert.True(dscResourceMap.Exists(ResourceZoro, null, null)); 138 Assert.True(dscResourceMap.Exists(ModuleOniResourceYamato, null, null)); 139 Assert.True(dscResourceMap.Exists(ModuleMugiwaraResourceLuffy, ModuleMugiwara, null)); 140 Assert.True(dscResourceMap.Exists(ModuleMugiwaraResourceLuffy, ModuleMugiwara, VersionLuffyGear4)); 141 } 142 143 /// <summary> 144 /// Tests Exists when resources are not in the maps. 145 /// </summary> 146 [Fact] 147 public void DscResourcesMap_Exists_NoResource() 148 { 149 var dscResourceMap = new DscResourcesMap(this.CreateDscResourceInfo()); 150 151 Assert.False(dscResourceMap.Exists(ResourceZoro, ModuleMugiwara, null)); 152 Assert.False(dscResourceMap.Exists(ModuleOniResourceYamato, ModuleMugiwara, VersionYamato)); 153 Assert.False(dscResourceMap.Exists(ModuleMugiwaraResourceLuffy, ModuleMugiwara, Version.Parse("6.0.0.0"))); 154 Assert.False(dscResourceMap.Exists("xResourceGoku", null, null)); 155 } 156 157 /// <summary> 158 /// Creates 5 fake resources. 159 /// 1 resource without module name. 160 /// 2 resources module A same resource v1 v2. 161 /// 2 resources module B different resources. 162 /// </summary> 163 /// <returns>Fake resources.</returns> 164 private IReadOnlyList<DscResourceInfoInternal> CreateDscResourceInfo() 165 { 166 return new List<DscResourceInfoInternal>() 167 { 168 new DscResourceInfoInternal(ResourceZoro, null, VersionZoro), 169 170 new DscResourceInfoInternal(ModuleMugiwaraResourceLuffy, ModuleMugiwara, VersionLuffyGear4), 171 new DscResourceInfoInternal(ModuleMugiwaraResourceLuffy, ModuleMugiwara, VersionLuffyGear5), 172 173 new DscResourceInfoInternal(ModuleOniResourceKaido, ModuleOni, VersionKaido), 174 new DscResourceInfoInternal(ModuleOniResourceYamato, ModuleOni, VersionYamato), 175 }; 176 } 177 } 178 }