public void ProcessOperationFromJsonFull() { MockRunspaceManager runspace = new MockRunspaceManager(); GeneratedModule module = new GeneratedModule(runspace); module.Operations["thing_get"] = new OperationData("Thing_Get", "Get-Thing") { Parameters = new Dictionary <string, ParameterData>() { { "parameter", new ParameterData() { Name = "Parameter", Type = new RuntimeTypeData(typeof(GeneratedModuleTestsObject)) } } } }; string json = "{\"method\":\"Things.Thing_Get\",\"params\":{\"__reserved\":{\"credentials\":[{\"x-ps-credtype\":\"commandBased\",\"tenantId\":\"testTenantId\",\"clientId\":\"testClientId\",\"secret\":\"testSecret\"},{\"x-ps-credtype\":\"parameterBased\",\"tenantId\":\"testTenantId\",\"clientId\":\"testClientId\",\"secret\":\"testSecret\"}]},\"parameter\":{\"string\":\"testValue\",\"number\":500,\"object\":{\"decimal\":1.2,\"boolean\":true}}}}"; LiveTestRequestConverter converter = new LiveTestRequestConverter(module); Newtonsoft.Json.JsonSerializerSettings settings = new Newtonsoft.Json.JsonSerializerSettings(); converter.RegisterSelf(settings); MockTestCredentialFactory credentialsFactory = new MockTestCredentialFactory(); credentialsFactory.RegisterProvider("commandbased", new CommandBasedCredentialProvider()); credentialsFactory.RegisterProvider("parameterbased", new ParameterBasedCredentialProvider()); LiveTestRequest request = Newtonsoft.Json.JsonConvert.DeserializeObject <LiveTestRequest>(json, settings); CommandExecutionResult result = module.ProcessRequest(request, credentialsFactory); Assert.Equal("Login-Account [parameter {[String testValue] [Number 500] [Object [Decimal 1.2] [Boolean True]]}]", (string)runspace.InvokeHistory[0]); Assert.Equal("Login-Account [parameter {[String testValue] [Number 500] [Object [Decimal 1.2] [Boolean True]]}] [CredentialKey testCredentials]", (string)runspace.InvokeHistory[1]); }
public void AddParameterWithoutCommandFails() { MockRunspaceManager runspace = new MockRunspaceManager(); PowerShellCommand command = new PowerShellCommand(runspace); Assert.Throws <InvalidOperationException>(() => command.AddParameter("Verb", "Start")); }
public void NoParameterNameFails() { MockRunspaceManager runspace = new MockRunspaceManager(); PowerShellCommand command = new PowerShellCommand(runspace); command.Command = "Get-Verb"; Assert.Throws <ArgumentNullException>(() => command.AddParameter(null, "Start")); }
public void ProcessOperationWithCredentials() { MockRunspaceManager runspace = new MockRunspaceManager(); GeneratedModule module = new GeneratedModule(runspace); module.Operations["thing_get"] = new OperationData("Thing_Get", "Get-Thing"); MockTestCredentialFactory credentialsFactory = new MockTestCredentialFactory(); credentialsFactory.RegisterProvider("commandbased", new CommandBasedCredentialProvider()); credentialsFactory.RegisterProvider("parameterbased", new ParameterBasedCredentialProvider()); LiveTestRequest request = new LiveTestRequest(); request.Method = "Things.Thing_Get"; request.OperationId = "Thing_Get"; request.Params = new Dictionary <string, object>() { { "__reserved", new Dictionary <string, object>() { { "credentials", new LiveTestCredentials[] { new LiveTestCredentials() { Type = "commandBased", Properties = new Dictionary <string, object>() { { "tenantId", "testTenantId" }, { "clientId", "testClientId" }, { "secret", "testSecret" } } }, new LiveTestCredentials() { Type = "parameterBased", Properties = new Dictionary <string, object>() { { "tenantId", "testTenantId" }, { "clientId", "testClientId" }, { "secret", "testSecret" } } } } } } } }; request.Params["parameter"] = new GeneratedModuleTestsObject() { String = "testValue", Number = 500, Object = new GeneratedModuleTestsSubObject() { Decimal = 1.2, Boolean = true } }; CommandExecutionResult result = module.ProcessRequest(request, credentialsFactory); Assert.Equal(2, runspace.InvokeHistory.Count); Assert.Equal("Login-Account", (string)runspace.InvokeHistory[0]); Assert.Equal("Login-Account [CredentialKey testCredentials]", (string)runspace.InvokeHistory[1]); }
public void ExceptionWhenCredentialsPropertiesAreMissing() { AzureCredentialProvider test = new AzureCredentialProvider(this.logger); test.Set("tenantId", "testTenantId"); test.Set("clientId", "testClientId"); MockRunspaceManager runspace = new MockRunspaceManager(); Assert.Throws <InvalidTestCredentialsException>(() => test.Process(runspace.CreateCommand())); }
private void GetLoadMetadataFromSpecificationTestData(out GeneratedModule expectedModule, out GeneratedModule testModule) { MockRunspaceManager runspace = new MockRunspaceManager(); expectedModule = new GeneratedModule(runspace); expectedModule.Operations["operationid"] = new OperationData("operationid", "command") { Parameters = new Dictionary <string, ParameterData>() { { "psparametername", new ParameterData() { Name = "psparametername", JsonName = "namefromspec" } } }, ResponseType = new ResponseTypeData() { ModuleData = new RuntimeTypeData() { Type = typeof(GeneratedModuleTestsSubObject) } } }; expectedModule.Operations["operationid"].ResponseType.SpecificationData.Add(new RuntimeTypeData() { Properties = new Dictionary <string, ParameterData>() { { "pspropertyname", new ParameterData() { Name = "pspropertyname", JsonName = "propertynamefromspec" } } } }); expectedModule.Operations["operationid"].ResponseType.Complete(); testModule = new GeneratedModule(runspace); testModule.Operations["operationid"] = new OperationData("operationid", "command") { Parameters = new Dictionary <string, ParameterData>() { { "psparametername", new ParameterData() { Name = "psparametername" } } }, ResponseType = new ResponseTypeData() { ModuleData = new RuntimeTypeData() { Type = typeof(GeneratedModuleTestsSubObject) } } }; }
public void LoadWithName() { MockRunspaceManager runspace = new MockRunspaceManager(); GeneratedModule module = new GeneratedModule(runspace); module.ModulePath = "PackageManagement"; module.Load(); Assert.Equal("Import-Module", runspace.CommandBuilders[0].Command); Assert.True(runspace.CommandBuilders[0].Parameters.ContainsKey("Name")); Assert.Equal("PackageManagement", runspace.CommandBuilders[0].Parameters["Name"]); }
public void BasicLoadTest() { MockRunspaceManager runspace = new MockRunspaceManager(); GeneratedModule module = new GeneratedModule(runspace); module.ModulePath = "test.psd1"; module.Load(); Assert.Equal("Import-Module", runspace.CommandBuilders[0].Command); Assert.True(runspace.CommandBuilders[0].Parameters.ContainsKey("Name")); Assert.Equal("test.psd1", runspace.CommandBuilders[0].Parameters["Name"]); }
public void LoadWithRequiredModules() { MockRunspaceManager runspace = new MockRunspaceManager(); GeneratedModule module = new GeneratedModule(runspace); GeneratedModule requiredModule = new GeneratedModule(runspace); requiredModule.ModulePath = "PowerShellGet"; module.ModulePath = "PackageManagement"; module.RequiredModules.Add(requiredModule); module.Load(); Assert.Equal("import-module [name powershellget false]", runspace.Builder.InvokeHistory[0].ToLowerInvariant()); Assert.Equal("import-module [name packagemanagement false]", runspace.Builder.InvokeHistory[1].ToLowerInvariant()); }
public void BasicExecutionFlow() { TimeSpan testTimeout = TimeSpan.FromMinutes(1); MockRunspaceManager mockRunspace = new MockRunspaceManager(); MockGeneratedModule module = new MockGeneratedModule(mockRunspace); mockRunspace.ModuleMocks["test"] = module; TestBlockPipe blockPipe = new TestBlockPipe(); blockPipe.Requests.Enqueue(new LiveTestRequest() { Id = "0", JsonRpc = "2.0", Method = "A.B_C", Params = new System.Collections.Generic.Dictionary <string, object>() { { "parm", 5.0 } } }); LiveTestServerStartParams parms = new LiveTestServerStartParams() { Input = blockPipe, Output = blockPipe, RunspaceManager = mockRunspace, ModulePath = "test" }; LiveTestServer server = new LiveTestServer(parms); server.RunAsync().Wait(); DateTime start = DateTime.Now; while ((DateTime.Now - start) < testTimeout && !module.ProcessRequestCalled) { // Wait for the request to be processed, if ever Thread.Sleep(1); } server.Stop(); // Check the expected flow // 1. Get module info // 2. Load module // 3. Process request Assert.True(mockRunspace.GetModuleInfoCalled, "GetModuleInfo was never called."); Assert.True(module.LoadCalled, "Load was never called."); Assert.True(module.ProcessRequestCalled, "ProcessRequest was never called."); }
public void ForceLoadTest() { MockRunspaceManager runspace = new MockRunspaceManager(); GeneratedModule module = new GeneratedModule(runspace); module.ModulePath = "test.psd1"; module.Load(force: true); Assert.Equal("Import-Module", runspace.Builder.Command); Assert.True(runspace.Builder.Parameters.ContainsKey("Name")); Assert.Equal("test.psd1", runspace.Builder.Parameters["Name"].Item1); Assert.False(runspace.Builder.Parameters["Name"].Item2); Assert.True(runspace.Builder.Parameters.ContainsKey("Force")); Assert.True((bool)runspace.Builder.Parameters["Force"].Item1); Assert.True(runspace.Builder.Parameters["Force"].Item2); }
public void MissingOutputPipe() { MockRunspaceManager mockRunspace = new MockRunspaceManager(); MockGeneratedModule module = new MockGeneratedModule(mockRunspace); mockRunspace.ModuleMocks["test"] = module; TestBlockPipe blockPipe = new TestBlockPipe(); LiveTestServerStartParams parms = new LiveTestServerStartParams() { Input = blockPipe, RunspaceManager = mockRunspace, ModulePath = "test" }; Assert.Throws <ArgumentNullException>(() => new LiveTestServer(parms)); }
public void ExceptionWhenCommandFails() { AzureCredentialProvider test = new AzureCredentialProvider(this.logger); test.Set("tenantId", "testTenantId"); test.Set("clientId", "testClientId"); test.Set("secret", "testSecret"); MockRunspaceManager runspace = new MockRunspaceManager(); runspace.CommandBuilders.Add(new MockCommandBuilder(runspace) { MockResult = new CommandExecutionResult(null, new List <string>() { "This is an error" }, true) }); Assert.Throws <CommandFailedException>(() => test.Process(runspace.CommandBuilders[0])); }
public void ForceIsPropogatedToAllModules() { MockRunspaceManager runspace = new MockRunspaceManager(); GeneratedModule module = new GeneratedModule(runspace); GeneratedModule requiredModule = new GeneratedModule(runspace); GeneratedModule requiredModuleSub = new GeneratedModule(runspace); requiredModuleSub.ModulePath = "psreadline"; requiredModule.ModulePath = "PowerShellGet"; requiredModule.RequiredModules.Add(requiredModuleSub); module.ModulePath = "PackageManagement"; module.RequiredModules.Add(requiredModule); module.Load(force: true); Assert.Equal("import-module [name psreadline false] [force true true]", runspace.Builder.InvokeHistory[0].ToLowerInvariant()); Assert.Equal("import-module [name powershellget false] [force true true]", runspace.Builder.InvokeHistory[1].ToLowerInvariant()); Assert.Equal("import-module [name packagemanagement false] [force true true]", runspace.Builder.InvokeHistory[2].ToLowerInvariant()); }
public void ProcessOperationSimpleParameters() { MockRunspaceManager runspace = new MockRunspaceManager(); GeneratedModule module = new GeneratedModule(runspace); module.Operations["thing_get"] = new OperationData("Thing_Get", "Get-Thing") { Parameters = new Dictionary <string, ParameterData>() { { "Integer", new ParameterData() { Name = "Integer", Type = new RuntimeTypeData(typeof(int)) } }, { "Boolean", new ParameterData() { Name = "Boolean", Type = new RuntimeTypeData(typeof(bool)) } }, { "Decimal", new ParameterData() { Name = "Decimal", Type = new RuntimeTypeData(typeof(double)) } }, { "String", new ParameterData() { Name = "String", Type = new RuntimeTypeData(typeof(string)) } } } }; MockTestCredentialFactory credentialsFactory = new MockTestCredentialFactory(); LiveTestRequest request = new LiveTestRequest(); request.Method = "Things.Thing_Get"; request.OperationId = "Thing_Get"; request.Params = new Dictionary <string, object>(); request.Params["integer"] = 5; request.Params["boolean"] = true; request.Params["decimal"] = 1.2; request.Params["string"] = "testValue"; CommandExecutionResult result = module.ProcessRequest(request, credentialsFactory); Assert.Equal(1, runspace.InvokeHistory.Count); Assert.Equal("Get-Thing [Integer 5] [Boolean True] [Decimal 1.2] [String testValue]", ((string)runspace.InvokeHistory[0])); }
public void RunGetVerbWithSwitchParameter() { MockRunspaceManager runspace = new MockRunspaceManager(); PowerShellCommand command = new PowerShellCommand(runspace); command.Command = "Get-Verb"; command.AddParameter("Verb", "Start"); command.AddParameter("Verbose", true); command.Invoke(); Assert.Equal(1, runspace.InvokeHistory.Count); Command result = runspace.InvokeHistory[0] as Command; Assert.NotNull(result); Assert.Equal("Get-Verb", result.CommandText); Assert.Equal(2, result.Parameters.Count); Assert.Equal("Verb", result.Parameters[0].Name); Assert.Equal("Verbose", result.Parameters[1].Name); }
public void ParametersAreClearedWhenNewCommandCreated() { MockRunspaceManager runspace = new MockRunspaceManager(); PowerShellCommand command = new PowerShellCommand(runspace); command.Command = "Get-Verb"; command.AddParameter("Verb", "Start"); command.AddParameter("Verbose", true); command.Command = "Get-Verbage"; command.AddParameter("Debug", true); command.Invoke(); Assert.Equal(1, runspace.InvokeHistory.Count); Command result = runspace.InvokeHistory[0] as Command; Assert.NotNull(result); Assert.Equal("Get-Verbage", result.CommandText); Assert.Equal(1, result.Parameters.Count); Assert.Equal("Debug", result.Parameters[0].Name); }
public void ProcessOperationComplexParameters() { MockRunspaceManager runspace = new MockRunspaceManager(); GeneratedModule module = new GeneratedModule(runspace); module.Operations["thing_get"] = new OperationData("Thing_Get", "Get-Thing") { Parameters = new Dictionary <string, ParameterData>() { { "Parameter", new ParameterData() { Name = "Parameter", Type = new RuntimeTypeData(typeof(GeneratedModuleTestsObject)) } } } }; MockTestCredentialFactory credentialsFactory = new MockTestCredentialFactory(); LiveTestRequest request = new LiveTestRequest(); request.Method = "Things.Thing_Get"; request.OperationId = "Thing_Get"; request.Params = new Dictionary <string, object>(); request.Params["parameter"] = new GeneratedModuleTestsObject() { String = "testValue", Number = 500, Object = new GeneratedModuleTestsSubObject() { Decimal = 1.2, Boolean = true } }; CommandExecutionResult result = module.ProcessRequest(request, credentialsFactory); Assert.Equal(1, runspace.InvokeHistory.Count); Assert.Equal("Get-Thing [Parameter {[String testValue] [Number 500] [Object [Decimal 1.2] [Boolean True]]}]", (string)runspace.InvokeHistory[0]); }
public void HappyPathDefaultCredType() { AzureCredentialProvider test = new AzureCredentialProvider(this.logger); test.Set("tenantId", "testTenantId"); test.Set("clientId", "testClientId"); test.Set("secret", "testSecret"); MockRunspaceManager runspace = new MockRunspaceManager(); runspace.CommandBuilders.Add(new MockCommandBuilder(runspace) { MockResult = new CommandExecutionResult(null, null, false) }); runspace.CommandBuilders.Add(new MockCommandBuilder(runspace) { MockResult = new CommandExecutionResult(null, null, false) }); test.Process(runspace.CommandBuilders[0]); Assert.Equal(2, runspace.InvokeHistory.Count); Assert.Equal("import-module [name azurerm.profile]", ((string)runspace.InvokeHistory[0]).ToLowerInvariant()); Assert.Equal("add-azurermaccount [credential (testclientid testsecret)] [tenantid testtenantid] [serviceprincipal true]", ((string)runspace.InvokeHistory[1]).ToLowerInvariant()); }