示例#1
0
        private static bool WaitForState(TestExecutionStates state, uint timeoutSeconds)
        {
            bool     isStateReached  = false;
            DateTime initialDateTime = DateTime.Now;

            while ((DateTime.Now - initialDateTime).TotalSeconds < timeoutSeconds)
            {
                if (File.Exists(LOG_FILE_NAME))
                {
                    File.Copy(LOG_FILE_NAME, LOG_FILE_NAME_COPY);
                    StreamReader sr = new StreamReader(LOG_FILE_NAME_COPY);

                    string line;
                    int    i = 0;
                    while ((line = sr.ReadLine()) != null)
                    {
                        // Анализируем только новые записанные строки
                        i++;
                        if (i > _lineCounter)
                        {
                            _lineCounter++;

                            if (line != "" && line[0] == 'E')
                            {
                                System.Console.Error.WriteLine("    " + line);
                            }
                            else
                            {
                                System.Console.WriteLine("    " + line);
                            }

                            if (TestStateAnalizer(line) >= state)
                            {
                                // Если ожидаемое состояние достигнуто
                                isStateReached = true;
                                break;
                            }
                        }
                    }

                    sr.Close();
                    Thread.Sleep(500);
                    File.Delete(LOG_FILE_NAME_COPY);
                    if (isStateReached)
                    {
                        return(true);
                    }

                    // Если количество строк в логе больше максимального,
                    // делаем вывод о зависании встроенного ПО
                    if (i > SystemParameters.MAX_LINES_IN_LOG)
                    {
                        return(false);
                    }
                }
            }
            return(false);
        }
示例#2
0
        private static TestExecutionStates TestStateAnalizer(string str)
        {
            TestExecutionParameters parameters = new TestExecutionParameters();

            if (str.Contains(parameters.START_TEST_VALUE))
            {
                _currentState = TestExecutionStates.Started;
            }

            else if (str.Contains(parameters.END_TEST_FAILED_VALUE))
            {
                _currentState = TestExecutionStates.StopFailed;
            }

            else if (str.Contains(parameters.END_TEST_SUCCEEDED_VALUE))
            {
                _currentState = TestExecutionStates.StopSucceeded;
            }

            return(_currentState);
        }
示例#3
0
        public static int ReadTrace()
        {
            TestExecutionParameters parameters = TestParametersReader.GetTestExecutionParameters();
            var initialDateTime = DateTime.Now;
            int returnCode      = SystemParameters.RETURN_CODE_SUCCESS;

            // Запуск процесса rttLogger
            _rttLoggerProcess = new Process();

            returnCode = StartRttLoggerProcess();
            if (SystemParameters.FAILED(returnCode))
            {
                return(returnCode);
            }

            // Подготовка параметров
            _lineCounter  = 0;
            _currentState = TestExecutionStates.NotStarted;
            File.Delete(LOG_FILE_NAME_COPY);

            // Ожидаем начало выполнения теста
            if (!WaitForState(TestExecutionStates.Started, parameters.StartTimeout))
            {
                // Тест не запустился за отведенное время
                Console.WriteLine("ERROR: timeout start, timeout={0}, duration={1}", parameters.StartTimeout, DateTime.Now - initialDateTime);
                returnCode = SystemParameters.RETURN_CODE_FAILED_START_TEST;
            }

            if (SystemParameters.SUCCESSED(returnCode))
            {
                // Тест начал выполняться, ожидаем его завершения
                if (!WaitForState(TestExecutionStates.StopFailed, parameters.EndTimeout))
                {
                    // Тест не завершился за отведенное время
                    Console.WriteLine("ERROR:  timeout end, timeout={0}, duration={1}", parameters.EndTimeout, DateTime.Now - initialDateTime);
                    returnCode = SystemParameters.RETURN_CODE_FAILED_STOP_TEST;
                }
            }

            if (SystemParameters.SUCCESSED(returnCode))
            {
                // Тест завершился. Проверяем код результата
                if (_currentState == TestExecutionStates.StopSucceeded)
                {
                    // Тест выполнен успешно
                    Console.WriteLine("test PASSED, dt={0}", DateTime.Now);
                    returnCode = SystemParameters.RETURN_CODE_SUCCESS;
                }
                else
                {
                    // Тест завершился ошибкой
                    Console.WriteLine("ERROR: test FAILED, dt={0}", DateTime.Now);
                    returnCode = SystemParameters.RETURN_CODE_TEST_FAILED;
                }
            }

            try
            {
                // Остановка процесса
                StopRttLoggerProcess();
            }
            catch
            {
                // Если не удалось завершить процесс JLinkRTTLogger, значит он уже завершен.
            }

            SaveLogFile();
            File.Delete(LOG_FILE_NAME);

            return(returnCode);
        }