Пример #1
0
        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]);
        }
Пример #2
0
        public void AddParameterWithoutCommandFails()
        {
            MockRunspaceManager runspace = new MockRunspaceManager();
            PowerShellCommand   command  = new PowerShellCommand(runspace);

            Assert.Throws <InvalidOperationException>(() => command.AddParameter("Verb", "Start"));
        }
Пример #3
0
        public void NoParameterNameFails()
        {
            MockRunspaceManager runspace = new MockRunspaceManager();
            PowerShellCommand   command  = new PowerShellCommand(runspace);

            command.Command = "Get-Verb";
            Assert.Throws <ArgumentNullException>(() => command.AddParameter(null, "Start"));
        }
Пример #4
0
        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()));
        }
Пример #6
0
        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)
                    }
                }
            };
        }
Пример #7
0
        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"]);
        }
Пример #8
0
        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"]);
        }
Пример #9
0
        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());
        }
Пример #10
0
        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.");
        }
Пример #11
0
        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);
        }
Пример #12
0
        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]));
        }
Пример #14
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());
        }
Пример #15
0
        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]));
        }
Пример #16
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);
        }
Пример #17
0
        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);
        }
Пример #18
0
        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());
        }