Exemple #1
0
        public void Start_ServiceAppProcessCanStartSucessfully()
        {
            ILog log = Substitute.For <ILog>();
            bool monitorMethodCalled = false;

            IProcessWrapperFactory procFactory = Substitute.For <IProcessWrapperFactory>();

            procFactory.CreateProcess().Returns(new FakeStandardProcess());

            var serviceApp = new ServiceApp {
                Name = "Test", AppVersion = new Version()
            };
            ServiceAppProcess appProcToTest = new ServiceAppProcess(serviceApp, log, procFactory);

            appProcToTest.MonitorProcessCallback = () => { monitorMethodCalled = true; };

            Task t       = appProcToTest.Start();
            bool success = t.Wait(500);

            if (!success)
            {
                Assert.Fail("Start() took too long to finish");
            }

            log.DidNotReceive().Error(Arg.Any <object>(), Arg.Any <Exception>());
            log.DidNotReceive().Warn(Arg.Any <object>(), Arg.Any <Exception>());
            Assert.IsTrue(monitorMethodCalled, "MonitorProcessCallback() not called.");
        }
Exemple #2
0
        public void ProcessError_LoggingWorksWithUnrecognizedExceptionObject()
        {
            ILog log = Substitute.For <ILog>();
            IProcessWrapperFactory procFactory = Substitute.For <IProcessWrapperFactory>();

            procFactory.CreateProcess().Returns(new FakeStandardProcess());
            var serviceApp = new ServiceApp {
                Name = "Test", AppVersion = new Version()
            };
            ServiceAppProcess appProcToTest = new ServiceAppProcess(serviceApp, log, procFactory);
            Exception         testException = new InvalidOperationException("test");

            string exceptionMessage = string.Format(@"{{ error: {{
                    details: {{
                        type: ""{0}"",
                        message: ""{1}"",
                        source: ""{2}"",
                        stackTrace: ""{3}""
                    }},
                    exception: ""xxxxx""
                }} }}",
                                                    testException.GetType().ToString(),
                                                    testException.Message,
                                                    testException.Source,
                                                    testException.StackTrace);

            bool shouldExit = appProcToTest.ProcessMessage(exceptionMessage);

            log.Received().Warn(Arg.Any <string>());
            Assert.IsFalse(shouldExit, "Process message was not meant to return true");
        }
Exemple #3
0
        public void Constructor_ServiceAppProcessConstructorHasNoSurprises()
        {
            IProcessWrapperFactory procFactory = Substitute.For <IProcessWrapperFactory>();

            procFactory.CreateProcess().Returns(new FakeStandardProcess());

            ServiceAppProcess appProcToTest = new ServiceAppProcess(
                new ServiceApp {
                Name = "Test"
            },
                Substitute.For <ILog>(),
                procFactory);
        }
Exemple #4
0
        public void ProcessMessage_DebugIsLogged()
        {
            ILog log = Substitute.For <ILog>();
            IProcessWrapperFactory procFactory = Substitute.For <IProcessWrapperFactory>();

            procFactory.CreateProcess().Returns(new FakeStandardProcess());
            var serviceApp = new ServiceApp {
                Name = "Test", AppVersion = new Version()
            };
            ServiceAppProcess appProcToTest = new ServiceAppProcess(serviceApp, log, procFactory);

            bool shouldExit = appProcToTest.ProcessMessage("{debug:\"test\"}");

            log.Received().Debug("From Test: test");
            Assert.IsFalse(shouldExit, "Process message was not meant to return true");
        }
Exemple #5
0
        /// <summary>
        /// Creates the Process which will run the service app.
        /// </summary>
        private void CreateProcess()
        {
            _process = _processFactory.CreateProcess();
            int sacsProcessId          = Process.GetCurrentProcess().Id;
            ProcessStartInfo startInfo = new ProcessStartInfo(ServiceApp.AppFilePath);

            startInfo.WorkingDirectory       = Path.GetDirectoryName(ServiceApp.AppFilePath);
            startInfo.UseShellExecute        = false;
            startInfo.CreateNoWindow         = true;
            startInfo.WindowStyle            = ProcessWindowStyle.Hidden;
            startInfo.ErrorDialog            = false;
            startInfo.RedirectStandardInput  = true;
            startInfo.RedirectStandardOutput = true;
            startInfo.RedirectStandardError  = true;

            if (ApplicationSettings.Current.EnableCustomUserLogins)
            {
                _process.ArgumentObject["name"]  = ServiceApp.Name;
                _process.ArgumentObject["owner"] = sacsProcessId;
                if (!string.IsNullOrWhiteSpace(ServiceApp.Parameters))
                {
                    _process.ArgumentObject["parameters"] = ServiceApp.Parameters;
                }
            }
            else
            {
                // keeping this older feature until testing is complete.
                var arguments = new { name = ServiceApp.Name, action = "hide", owner = sacsProcessId, parameters = ServiceApp.Parameters };
                startInfo.Arguments = JsonConvert.SerializeObject(arguments);
            }

            if (!string.IsNullOrWhiteSpace(ServiceApp.Username))
            {
                startInfo.Domain   = UserUtilities.GetDomain(ServiceApp.Username);
                startInfo.UserName = UserUtilities.GetUserName(ServiceApp.Username);
            }

            _process.StartInfo = startInfo;
        }