public void FatalErrorWhenModuleNotExist() { string modulePath = System.IO.Path.GetRandomFileName(); PowerShellRunspace psRunspace = new PowerShellRunspace(this.logger); Assert.Throws <CommandFailedException>(() => psRunspace.GetModuleInfo(modulePath)); }
public void ModulePathNotRooted() { string modulePath = System.IO.Path.Combine("data", "Modules", "InvalidManifest", "InvalidManifest.psd1"); PowerShellRunspace psRunspace = new PowerShellRunspace(this.logger); Assert.Throws <ModulePathNotRootedException>(() => psRunspace.GetModuleInfo(modulePath)); }
public void FatalErrorWhenModulePathNotValid() { string modulePath = GetRootedPath(System.IO.Path.Combine("data", "Modules", "InvalidManifest", "InvalidManifest.psd1")); PowerShellRunspace psRunspace = new PowerShellRunspace(this.logger); Assert.Throws <CommandFailedException>(() => psRunspace.GetModuleInfo(modulePath)); }
public void GetModuleInfoByName() { string modulePath = "PowerShellGet"; PowerShellRunspace psRunspace = new PowerShellRunspace(this.logger); GeneratedModule module = psRunspace.GetModuleInfo(modulePath); Assert.Equal(12, module.Operations.Count); }
public void RunCommandWithExpectedErrorAsErrorRecord() { PowerShellRunspace psRunspace = new PowerShellRunspace(this.logger); ICommandBuilder psCommand = psRunspace.CreateCommand(); psCommand.Command = "Get-Process"; psCommand.AddParameter("Name", "123456789"); CommandExecutionResult results = psCommand.Invoke(); Assert.True(results.HadErrors); Assert.Equal(1, results.Errors.Count()); }
public void BasicHappyPathTest() { string modulePath = GetRootedPath(System.IO.Path.Combine("data", "Modules", "BasicHappyPath", "BasicHappyPath.psd1")); PowerShellRunspace psRunspace = new PowerShellRunspace(this.logger); GeneratedModule result = psRunspace.GetModuleInfo(modulePath); Assert.Equal(0, this.error.Errors.Count); Assert.NotNull(result); Assert.Equal(modulePath, result.ModulePath); Assert.Equal(4, result.Operations.Count); AssertModuleContainsOperation(result, new OperationData("Guitar_Create", "New-Guitar") { Parameters = { { "id", new ParameterData() { Name = "id", Type = new RuntimeTypeData(typeof(string)) } } } }); AssertModuleContainsOperation(result, new OperationData("Guitar_CreateByName", "New-Guitar") { Parameters = { { "name", new ParameterData() { Name = "name", Type = new RuntimeTypeData(typeof(string)) } } } }); AssertModuleContainsOperation(result, new OperationData("Guitar_GetById", "Get-Guitar") { Parameters = { { "id", new ParameterData() { Name = "id", Type = new RuntimeTypeData(typeof(string)) } } }, ResponseType = new ResponseTypeData() { ModuleData = new RuntimeTypeData(typeof(string)) } }); }
public void RunGetVerb() { PowerShellRunspace psRunspace = new PowerShellRunspace(this.logger); ICommandBuilder psCommand = psRunspace.CreateCommand(); psCommand.Command = "Get-Verb"; psCommand.AddParameter("Verb", "Start"); CommandExecutionResult results = psCommand.Invoke(); Assert.NotNull(results); Assert.Equal(1, results.Results.Count()); Assert.False(results.HadErrors); object result = results.Results.FirstOrDefault(); Assert.NotNull(result); Assert.Equal("@{Verb=Start; Group=Lifecycle}", result.ToString()); }
static void Main(string[] args) { ServerArgs serverArgs = new ServerArgs().Parse(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "config.json")).Parse(args).Validate(); EventLogOutputPipe eventLogOutputPipe = new EventLogOutputPipe(); CompositeLogger logger = new CompositeLogger(); if (serverArgs.EnableEventLog) { logger.AddLogger(new Logger(eventLogOutputPipe, eventLogOutputPipe)); } if (serverArgs.EnablePipeLog) { try { NamedPipeServer namedPipe = new NamedPipeServer(serverArgs.LogPipeName); Logger namedPipeLogger = new Logger(namedPipe, namedPipe); logger.AddLogger(namedPipeLogger); } catch (Exception e) { logger.LogError("Failed to initialize named pipe logger: " + e.Message); } } if (serverArgs.Errors.Count > 0) { logger.LogError("Server arguments had errors."); foreach (string error in serverArgs.Errors) { logger.LogError(error); } return; } // Load external modules PowerShellRunspace runspace = new PowerShellRunspace(logger); foreach (string externalModule in serverArgs.ExternalModules) { GeneratedModule module = new GeneratedModule(runspace); module.ModulePath = externalModule; CommandExecutionResult result = module.Load(); if (result != null && result.HadErrors) { logger.LogError(String.Format(CultureInfo.CurrentCulture, "Failed to load extra module: {0}", externalModule)); result.LogErrors(logger); return; } } // Start test server JsonRpcPipe jsonRpcPipe = new JsonRpcPipe(new StandardInputPipe(), new StandardOutputPipe()); LiveTestServer server = new LiveTestServer(new LiveTestServerStartParams() { Logger = logger, Input = jsonRpcPipe, Output = jsonRpcPipe, CredentialFactory = new LiveTestCredentialFactory(), RunspaceManager = runspace, ModulePath = serverArgs.ModulePath, TracingManager = new ServiceTracingManager(), SpecificationPaths = serverArgs.SpecificationPaths, ObjectTransforms = serverArgs.GetTransforms() }); try { server.RunAsync().Wait(); } catch (Exception ex) { logger.LogError("Failed to start server: " + ex.ToString()); } // Wait until server exits (usually means the server ran into an internal error) while (server.IsRunning) { Thread.Sleep(2); } }