ConfigurationUnitInternalTests.cs (6705B)
1 // ----------------------------------------------------------------------------- 2 // <copyright file="ConfigurationUnitInternalTests.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 System.IO; 12 using System.Management.Automation; 13 using Microsoft.Management.Configuration; 14 using Microsoft.Management.Configuration.Processor.Exceptions; 15 using Microsoft.Management.Configuration.Processor.Helpers; 16 using Microsoft.Management.Configuration.Processor.PowerShell.Helpers; 17 using Microsoft.Management.Configuration.UnitTests.Fixtures; 18 using Microsoft.Management.Configuration.UnitTests.Helpers; 19 using Xunit; 20 using Xunit.Abstractions; 21 22 /// <summary> 23 /// Tests ConfigurationUnitExtensionsTests. 24 /// </summary> 25 [Collection("UnitTestCollection")] 26 [InProc] 27 public class ConfigurationUnitInternalTests 28 { 29 private readonly UnitTestFixture fixture; 30 private readonly ITestOutputHelper log; 31 32 /// <summary> 33 /// Initializes a new instance of the <see cref="ConfigurationUnitInternalTests"/> class. 34 /// </summary> 35 /// <param name="fixture">Unit test fixture.</param> 36 /// <param name="log">Log helper.</param> 37 public ConfigurationUnitInternalTests(UnitTestFixture fixture, ITestOutputHelper log) 38 { 39 this.fixture = fixture; 40 this.log = log; 41 } 42 43 /// <summary> 44 /// Test GetDirectives. 45 /// </summary> 46 [Fact] 47 public void GetDirectivesTest() 48 { 49 string moduleDirective = "module"; 50 string unitModule = "xModule"; 51 52 string versionDirective = "version"; 53 string unitVersion = "1.0.0.0"; 54 55 string descriptionDirective = "description"; 56 string unitDescription = "beep beep boop i am a text"; 57 58 string boolDirective = "boolDirective"; 59 bool boolDirectiveValue = true; 60 61 string boolDirective2 = "boolDirective2"; 62 bool boolDirective2Value = false; 63 64 var unit = new ConfigurationUnit().Assign(new { Type = $"{unitModule}/unitResource" }); 65 unit.Metadata.Add(moduleDirective, unitModule); 66 unit.Metadata.Add(versionDirective, unitVersion); 67 unit.Metadata.Add(descriptionDirective, unitDescription); 68 unit.Metadata.Add(boolDirective, boolDirectiveValue); 69 unit.Metadata.Add(boolDirective2, boolDirective2Value); 70 71 var unitInternal = new ConfigurationUnitAndModule(unit, string.Empty); 72 73 var description = unitInternal.GetDirective<string>(descriptionDirective); 74 Assert.Equal(description, unitDescription); 75 76 var fake = unitInternal.GetDirective<string>("fake"); 77 Assert.Null(fake); 78 79 var description2 = unitInternal.GetDirective<string>("DESCRIPTION"); 80 Assert.Equal(description2, unitDescription); 81 82 Assert.Equal(unitModule, unitInternal.Module!.Name); 83 84 Assert.Equal(Version.Parse(unitVersion), unitInternal.Module!.RequiredVersion); 85 86 Assert.Equal(boolDirectiveValue, unitInternal.GetDirective(boolDirective)); 87 Assert.Equal(boolDirective2Value, unitInternal.GetDirective(boolDirective2)); 88 Assert.Null(unitInternal.GetDirective("fakeBool")); 89 } 90 91 /// <summary> 92 /// Tests GetVersion with a bad version. 93 /// </summary> 94 [Fact] 95 public void GetVersion_BadVersion() 96 { 97 var unit = new ConfigurationUnit(); 98 unit.Metadata.Add("module", "module"); 99 unit.Metadata.Add("version", "not a version"); 100 101 Assert.Throws<ArgumentException>( 102 () => new ConfigurationUnitInternal(unit, string.Empty)); 103 } 104 105 /// <summary> 106 /// Verifies expansion of ConfigRoot. 107 /// </summary> 108 [Fact] 109 public void GetExpandedSettings_ConfigRoot() 110 { 111 using var tmpFile = new TempFile("fakeConfigFile.yml", content: "content"); 112 113 var unit = new ConfigurationUnit().Assign(new { Type = "unitModule/unitResource" }); 114 unit.Settings.Add("var1", @"$WinGetConfigRoot\this\is\a\path.txt"); 115 unit.Settings.Add("var2", @"${WinGetConfigRoot}\this\is\a\path.txt"); 116 unit.Settings.Add("var3", @"this\is\a\$WINGETCONFIGROOT\path.txt"); 117 unit.Settings.Add("var4", @"this\is\a\${WINGETCONFIGROOT}\path.txt"); 118 unit.Settings.Add("var5", @"this\is\a\path\$wingetconfigroot"); 119 unit.Settings.Add("var6", @"this\is\a\path\${wingetconfigroot}"); 120 121 string configPath = tmpFile.FullFileName; 122 string? expectedPath = Path.GetDirectoryName(configPath); 123 var unitInternal = new ConfigurationUnitInternal(unit, configPath); 124 125 var expandedSettings = unitInternal.GetExpandedSettings(); 126 127 var var1 = expandedSettings["var1"]; 128 Assert.Equal(@"$WinGetConfigRoot\this\is\a\path.txt", var1 as string); 129 130 var var2 = expandedSettings["var2"]; 131 Assert.Equal($@"{expectedPath}\this\is\a\path.txt", var2 as string); 132 133 var var3 = expandedSettings["var3"]; 134 Assert.Equal(@"this\is\a\$WINGETCONFIGROOT\path.txt", var3 as string); 135 136 var var4 = expandedSettings["var4"]; 137 Assert.Equal($@"this\is\a\{expectedPath}\path.txt", var4 as string); 138 139 var var5 = expandedSettings["var5"]; 140 Assert.Equal(@"this\is\a\path\$wingetconfigroot", var5 as string); 141 142 var var6 = expandedSettings["var6"]; 143 Assert.Equal($@"this\is\a\path\{expectedPath}", var6 as string); 144 } 145 146 /// <summary> 147 /// Verifies throws when config root is not set. 148 /// </summary> 149 [Fact] 150 public void GetExpandedSetting_ConfigRoot_Throw() 151 { 152 var unit = new ConfigurationUnit().Assign(new { Type = "unitModule/unitResource" }); 153 unit.Settings.Add("var2", @"${WinGetConfigRoot}\this\is\a\path.txt"); 154 155 var unitInternal = new ConfigurationUnitInternal(unit, null!); 156 Assert.Throws<UnitSettingConfigRootException>(() => unitInternal.GetExpandedSettings()); 157 } 158 } 159 }