Example #1
0
        public void RunTestProgram(int NumIteration)
        {
            bool         _Ignore;
            MTKTestError ReturnValue = MTKTestError.NoError;

            CurrentTestStatus = TestProgramState.Running;
            NumberOfDUTs      = NumIteration;
            TestRunViability();

            TestStart = false;

            for (int j = 0; j < NumIteration; j++)
            {
                devTestComplete = false;
                _Ignore         = false;
                _CurrentDUT     = j;
                Log.PrintLog(this, "Selecting DUT " + (j + 1).ToString() + "/" +
                             NumIteration.ToString() + " for tests", LogDetailLevel.LogRelevant);
                OnNextIteration(j);
                ReturnValue     = RunAllTests();
                devTestComplete = true;

                if ((CurrentTestStatus == TestProgramState.Stop) ||
                    (CurrentTestStatus == TestProgramState.Stopped) ||
                    (CurrentTestStatus == TestProgramState.Stopping))
                {
                    break;
                }

                if (ReturnValue == MTKTestError.NoError)
                {
                    if (TestStart)
                    {
                        OnOverallPass();
                        Log.PrintLog(this, "Overall test result: PASS", LogDetailLevel.LogRelevant);
                    }
                }
                else if (ReturnValue == MTKTestError.TestFailed)
                {
                    OnOverallFail();
                    Log.PrintLog(this, "Overall test result: FAIL", LogDetailLevel.LogRelevant);
                }
                else if (ReturnValue == MTKTestError.IgnoringDUT)
                {
                    OnIgnoreDUT();
                    Log.PrintLog(this, "Ignoring DUT# " + _CurrentDUT.ToString(), LogDetailLevel.LogRelevant);
                    _Ignore = true;
                }

                OnCurrentIterationComplete(j, _Ignore);
            }

            StopTestProgram();
            OnTestStopped();
            _CurrentDUT       = 0;
            _CurrentTestIndex = 0;
            CurrentTestStatus = TestProgramState.Stopped;
        }
        public void StopTestProgram()
        {
            if ((CurrentTestStatus != TestProgramState.Stopped) &&
                (CurrentTestStatus != TestProgramState.Stopping) &&
                (CurrentTestStatus != TestProgramState.Stop))
            {
                CurrentTestStatus = TestProgramState.Stop;
            }

            PauseTestEvent.Set();
        }
 public TestProgramManager()
 {
     _CurrentDUT         = 0;
     _CurrentTestIndex   = 0;
     NumberOfDUTs        = 0;
     SupervisorMode      = false;
     CurrentTestStatus   = TestProgramState.Stopped;
     TestProgram         = new List <MTKTest>();
     NoFileLoaded        = true;
     FileNotSaved        = false;
     NewFileCounter      = 1;
     TestFileName        = "NewTestProgram" + NewFileCounter.ToString();
     FullFileName        = TestFileName + ".xml";
     DUTConnectionType   = "BLE";
     PauseTestsOnFailure = true;
     PauseTestEvent      = new AutoResetEvent(false);
     Log = new LogManager();
 }
        public void _RunTestProgram(int NumIteration)
        {
            bool         _Ignore;
            MTKTestError ReturnValue = MTKTestError.NoError;

            CurrentTestStatus = TestProgramState.Running;
            NumberOfDUTs      = NumIteration;
            TestRunViability();

            TestStart = false;

            try
            {
                stopwatch.Restart();
                Log.PrintLog(this, $"RunTestProgram StopWatch is started.", LogDetailLevel.LogRelevant);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "StopWatch of TestProgramManager");
            }

            if (CheckAllDutsPermissionFailure())
            {
                for (int i = 0; i < NumIteration; i++)
                {
                    OnOverallFail();
                    Log.PrintLog(this, "Overall test result: FAIL", LogDetailLevel.LogRelevant);
                }
            }
            else
            {
                for (int j = 0; j < NumIteration; j++)
                {
                    devTestComplete = false;
                    _Ignore         = false;
                    _CurrentDUT     = j;

                    Log.PrintLog(this, "Selecting DUT " + (j + 1).ToString() + "/" +
                                 NumIteration.ToString() + " for tests", LogDetailLevel.LogRelevant);
                    OnNextIteration(j);

                    if (CyBLE_MTK.DUTsTestFlag[j])
                    {
                        ReturnValue = RunAllTests();
                    }
                    else
                    {
                        ReturnValue = MTKTestError.IgnoringDUT;
                    }


                    devTestComplete = true;

                    if ((CurrentTestStatus == TestProgramState.Stop) ||
                        (CurrentTestStatus == TestProgramState.Stopped) ||
                        (CurrentTestStatus == TestProgramState.Stopping))
                    {
                        break;
                    }

                    if (ReturnValue == MTKTestError.NoError && CyBLE_MTK.DUTsTestFlag[_CurrentDUT])
                    {
                        if (TestStart)
                        {
                            OnOverallPass();
                            Log.PrintLog(this, "Overall test result: PASS", LogDetailLevel.LogRelevant);
                        }
                    }
                    //else if (ReturnValue == MTKTestError.ProcessCheckFailure)
                    //{
                    //    DUTOverallSFCSErrCode[_CurrentDUT] = ECCS.ERRORCODE_SHOPFLOOR_PROCESS_ERROR;
                    //    OnOverallFail();

                    //}
                    else if (ReturnValue == MTKTestError.IgnoringDUT || ReturnValue == MTKTestError.ProgrammerNotConfigured || (!CyBLE_MTK.DUTsTestFlag[_CurrentDUT] && CyBLE_MTK.shopfloor_permission[_CurrentDUT]))
                    {
                        OnIgnoreDUT();
                        Log.PrintLog(this, "Ignoring DUT# " + _CurrentDUT.ToString(), LogDetailLevel.LogRelevant);
                        DUTOverallSFCSErrCode[_CurrentDUT] = ECCS.ERRORCODE_DUT_NOT_TEST;
                        _Ignore = true;
                    }
                    else
                    {
                        OnOverallFail();
                        Log.PrintLog(this, "Overall test result: FAIL", LogDetailLevel.LogRelevant);
                    }



                    CurrentDUTTestError = ReturnValue;

                    OnCurrentIterationComplete(j, _Ignore);
                }
            }



            try
            {
                stopwatch.Stop();
                Log.PrintLog(this, $"The last cycle run test program with {NumberOfDUTs} DUT(s) totally elasped: " + stopwatch.Elapsed.TotalSeconds + " secs.", LogDetailLevel.LogRelevant);

                CyBLE_MTK.TestProgramRunCycleTimeForBatch = stopwatch.Elapsed.TotalSeconds.ToString();
            }
            catch
            {
                MessageBox.Show("Fail to stopwatch");
            }

            SetDUTOverallSFCSErrCode();


            StopTestProgram();
            OnTestStopped();
            _CurrentDUT       = 0;
            _CurrentTestIndex = 0;
            CurrentTestStatus = TestProgramState.Stopped;
        }
        private MTKTestError RunAllTests()
        {
            bool FailedOnce = false;

            testRunning = true;



            for (int i = 0; i < TestProgram.Count; i++)
            {
                _CurrentTestIndex = i;
                if (CurrentTestStatus == TestProgramState.Stop)
                {
                    CurrentTestStatus = TestProgramState.Stopping;
                    StopTestProgram();
                    CurrentTestStatus = TestProgramState.Stopped;
                    OnTestStopped();
                    break;
                }

                TestStart = true;

                MTKTestError TestResult = MTKTestError.Pending;



                TestResult = RunTest(i);


                if (TestResult != MTKTestError.NoError)
                {
                    if (TestResult == MTKTestError.IgnoringDUT || TestResult == MTKTestError.ProgrammerNotConfigured && CyBLE_MTK.DUTsTestFlag[_CurrentDUT])
                    {
                        OnIgnoreDUT();
                        return(MTKTestError.IgnoringDUT);
                    }
                    else if (TestResult == MTKTestError.NotAllDevicesProgrammed)
                    {
                        return(MTKTestError.NotAllDevicesProgrammed);
                    }
                    else
                    {
                        if ((CurrentTestStatus != TestProgramState.Pausing) &&
                            (CurrentTestStatus != TestProgramState.Paused) &&
                            (CurrentTestStatus != TestProgramState.Pause) &&
                            (PauseTestsOnFailure == true))
                        {
                            CurrentTestStatus = TestProgramState.Pause;
                        }
                        OnOverallFail();
                        FailedOnce = true;
                        OnTestError(TestResult, TestResult.ToString());
                    }
                }

                if (CurrentTestStatus == TestProgramState.Pause)
                {
                    CurrentTestStatus = TestProgramState.Paused;
                    Log.PrintLog(this, "Test program paused.", LogDetailLevel.LogRelevant);
                    OnTestPaused();
                    while (!PauseTestEvent.WaitOne(100))
                    {
                        ;
                    }
                    if (CurrentTestStatus == TestProgramState.Stop)
                    {
                        StopTestProgram();
                        testRunning = false;
                        if (FailedOnce)
                        {
                            return(MTKTestError.TestFailed);
                        }
                        else
                        {
                            return(MTKTestError.NoError);
                        }
                    }
                    CurrentTestStatus = TestProgramState.Running;
                }

                ///cysp: SetDUTOverallSFCSErrorCodeForUploadTestResult

                SetDUTTmplSFCSErrorCode(_CurrentDUT, _CurrentTestIndex);
            }


            testRunning = false;



            if (FailedOnce)
            {
                return(MTKTestError.TestFailed);
            }


            else
            {
                return(MTKTestError.NoError);
            }
        }
 public void ContinueTestProgram()
 {
     CurrentTestStatus = TestProgramState.Run;
     Log.PrintLog(this, "Continuing test program.", LogDetailLevel.LogRelevant);
     PauseTestEvent.Set();
 }
 public void PauseTestProgram()
 {
     CurrentTestStatus = TestProgramState.Pause;
     PauseTestEvent.Reset();
     Log.PrintLog(this, "Pausing test program.", LogDetailLevel.LogRelevant);
 }
Example #8
0
        private MTKTestError RunAllTests()
        {
            bool FailedOnce = false;

            for (int i = 0; i < TestProgram.Count; i++)
            {
                _CurrentTestIndex = i;
                if (CurrentTestStatus == TestProgramState.Stop)
                {
                    CurrentTestStatus = TestProgramState.Stopping;
                    StopTestProgram();
                    CurrentTestStatus = TestProgramState.Stopped;
                    OnTestStopped();
                    break;
                }

                TestStart = true;

                MTKTestError TestResult = RunTest(i);

                if (TestResult != MTKTestError.NoError)
                {
                    if (TestResult == MTKTestError.IgnoringDUT)
                    {
                        return(MTKTestError.IgnoringDUT);
                    }
                    else
                    {
                        if ((CurrentTestStatus != TestProgramState.Pausing) &&
                            (CurrentTestStatus != TestProgramState.Paused) &&
                            (CurrentTestStatus != TestProgramState.Pause) &&
                            (PauseTestsOnFailure == true))
                        {
                            CurrentTestStatus = TestProgramState.Pause;
                        }
                        OnOverallFail();
                        FailedOnce = true;
                        OnTestError(TestResult, TestResult.ToString());
                    }
                }
                if (CurrentTestStatus == TestProgramState.Pause)
                {
                    CurrentTestStatus = TestProgramState.Paused;
                    Log.PrintLog(this, "Test program paused.", LogDetailLevel.LogRelevant);
                    OnTestPaused();
                    while (!PauseTestEvent.WaitOne(100))
                    {
                        ;
                    }
                    if (CurrentTestStatus == TestProgramState.Stop)
                    {
                        StopTestProgram();
                        if (FailedOnce)
                        {
                            return(MTKTestError.TestFailed);
                        }
                        else
                        {
                            return(MTKTestError.NoError);
                        }
                    }
                    CurrentTestStatus = TestProgramState.Running;
                }
            }
            if (FailedOnce)
            {
                return(MTKTestError.TestFailed);
            }
            else
            {
                return(MTKTestError.NoError);
            }
        }
        public void _RunTestProgram(int NumIteration)
        {
            bool         _Ignore;
            MTKTestError ReturnValue = MTKTestError.NoError;

            CurrentTestStatus = TestProgramState.Running;
            NumberOfDUTs      = NumIteration;
            TestRunViability();

            TestStart = false;

            try
            {
                stopwatch.Restart();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "StopWatch of TestProgramManager");
            }



            for (int j = 0; j < NumIteration; j++)
            {
                devTestComplete = false;
                _Ignore         = false;
                _CurrentDUT     = j;
                Log.PrintLog(this, "Selecting DUT " + (j + 1).ToString() + "/" +
                             NumIteration.ToString() + " for tests", LogDetailLevel.LogRelevant);
                OnNextIteration(j);

                if (CyBLE_MTK.DUTsTestFlag[j])
                {
                    ReturnValue = RunAllTests();
                }
                else
                {
                    ReturnValue = MTKTestError.IgnoringDUT;
                }

                devTestComplete = true;

                if ((CurrentTestStatus == TestProgramState.Stop) ||
                    (CurrentTestStatus == TestProgramState.Stopped) ||
                    (CurrentTestStatus == TestProgramState.Stopping))
                {
                    break;
                }

                if (ReturnValue == MTKTestError.NoError && CyBLE_MTK.DUTsTestFlag[_CurrentDUT])
                {
                    if (TestStart)
                    {
                        OnOverallPass();
                        Log.PrintLog(this, "Overall test result: PASS", LogDetailLevel.LogRelevant);
                    }

                    //CyBLE_MTK.COUNT_PASS++;
                }
                else if (ReturnValue == MTKTestError.TestFailed || ReturnValue == MTKTestError.NotAllDevicesProgrammed && CyBLE_MTK.DUTsTestFlag[_CurrentDUT])
                {
                    OnOverallFail();
                    Log.PrintLog(this, "Overall test result: FAIL", LogDetailLevel.LogRelevant);

                    //CyBLE_MTK.COUNT_FAIL++;
                }
                else
                {
                    OnIgnoreDUT();
                    Log.PrintLog(this, "Ignoring DUT# " + _CurrentDUT.ToString(), LogDetailLevel.LogRelevant);
                    DUTOverallSFCSErrCode[_CurrentDUT] = ECCS.ERRORCODE_DUT_NOT_TEST;
                    _Ignore = true;
                }

                //CyBLE_MTK.COUNT_ALL++;


                OnCurrentIterationComplete(j, _Ignore);
            }



            SetDUTOverallSFCSErrCode();


            StopTestProgram();
            OnTestStopped();
            _CurrentDUT       = 0;
            _CurrentTestIndex = 0;
            CurrentTestStatus = TestProgramState.Stopped;

            try
            {
                stopwatch.Stop();
            }
            catch
            {
                MessageBox.Show("Fail to stopwatch");
            }
        }