Example #1
0
        public void FatalErrorWhenModuleNotExist()
        {
            string             modulePath = System.IO.Path.GetRandomFileName();
            PowerShellRunspace psRunspace = new PowerShellRunspace(this.logger);

            Assert.Throws <CommandFailedException>(() => psRunspace.GetModuleInfo(modulePath));
        }
Example #2
0
        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));
        }
Example #3
0
        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));
        }
Example #4
0
        public void GetModuleInfoByName()
        {
            string             modulePath = "PowerShellGet";
            PowerShellRunspace psRunspace = new PowerShellRunspace(this.logger);
            GeneratedModule    module     = psRunspace.GetModuleInfo(modulePath);

            Assert.Equal(12, module.Operations.Count);
        }
Example #5
0
        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());
        }
Example #6
0
        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))
                }
            });
        }
Example #7
0
        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());
        }
Example #8
0
        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);
            }
        }