예제 #1
0
        /// <summary>
        /// Méthode exécutée lors de la reception d'un résultat d'un step provenant d'un testeur
        /// </summary>
        private void OnReceiveStepResults(String _testerName, string _datas)
        {
            try
            {
                XmlSerializer s   = new XmlSerializer(typeof(GenericTesterResult));
                byte[]        buf = System.Text.Encoding.Unicode.GetBytes(_datas);
                MemoryStream  ms  = new MemoryStream(buf);

                if (_testerName == testerDestinationName)
                {
                    testerDestinationResults = new GenericTesterResult();
                    testerDestinationResults = (GenericTesterResult)s.Deserialize((Stream)ms);
                }
                else
                {
                    testerSourceResults = new GenericTesterResult();
                    testerSourceResults = (GenericTesterResult)s.Deserialize((Stream)ms);
                }

                Trace.WriteInfo("Une donnée ActionResult a été reçus, débloquage du wait");
                wait.Set();
            }
            catch (Exception e)
            {
                Trace.WriteError(_datas);
                Trace.WriteError("Impossible de lire le fichier XML décrivant le résultat du step, format incorect");
                Trace.WriteError(e.ToString());
            }
        }
예제 #2
0
        public void SendStepResult(GenericTesterResult _stepResults)
        {
            try
            {
                XmlSerializer s             = new XmlSerializer(typeof(GenericTesterResult));
                MemoryStream  ms            = new MemoryStream();
                XmlTextWriter xmlTextWriter = new XmlTextWriter(ms, Encoding.Unicode);
                s.Serialize(xmlTextWriter, _stepResults);
                ms = (MemoryStream)xmlTextWriter.BaseStream;

                UnicodeEncoding encoding       = new UnicodeEncoding();
                String          XmlStepResults = encoding.GetString(ms.ToArray());

                base.SendString(TcpDatas.StepInfos(testerName, XmlStepResults));
            }
            catch (Exception e)
            {
                Trace.WriteError(e.ToString());
            }
        }
예제 #3
0
        //Fonction PlayStep 
        public void PlayStep()
        {
            //Initialisation variable de travail
            GenericTesterResult stepResult = new GenericTesterResult();          
            Boolean doAction=false;

            Console.WriteLine(stepToPlay.TesterSource);
            Console.WriteLine(Tester.Tools.ConfigurationFile.GetName());
            if(stepToPlay.TesterSource==Tester.Tools.ConfigurationFile.GetName())
            {
                doAction= true;
                Console.WriteLine("Do ACTION");
            }

            // 1. On identidie l'action (appel, attente de connexion, etc...) - Et Appel de fonction Bloqante


            switch ((StepsName)stepToPlay.NameId)
            {
                case StepsName.Appel:
                    {
                        if (doAction)
                        {
                            CallManager.DoCall job = new CallManager.DoCall(stepToPlay);
                            stepResult = job.Start();
                        }
                        else
                        {
                            Trace.WriteInfo("ACTION RECEPTION APPEL");
                            CallManager.ReceiveCall job = new CallManager.ReceiveCall(stepToPlay);
                            stepResult = job.Start();                          
                        }
                        break;
                    }

                case StepsName.Attente:
                    {
                        Trace.WriteInfo("Action Attente");
                        if (doAction)
                        {
                            WaitManager.DoWait job = new WaitManager.DoWait(stepToPlay);
                            stepResult = job.Start();
                        }
                        else
                        {
                        }
                        break;
                    }

                case StepsName.DTMF  :
                    {
                        Trace.WriteInfo("Action DTMF");
                        if (doAction)
                        {
                            DTMFManager.DoDTMF job = new DTMFManager.DoDTMF(stepToPlay);
                            stepResult = job.Start();
                        }
                        else
                        {
                            DTMFManager.ReceiveDTMF job = new Tester.Scenario.DTMFManager.ReceiveDTMF(stepToPlay);
                            stepResult = job.Start();
                        }
                        break;
                    }
                case StepsName.Raccrochage:
                    {
                        Trace.WriteInfo("Action Raccrochage");
                        if (doAction)
                        {
                            HangupManager.DoHangup job = new HangupManager.DoHangup(stepToPlay);
                            stepResult = job.Start();
                        }
                        else
                        {
                            HangupManager.ReceiveHangup job = new HangupManager.ReceiveHangup(stepToPlay);
                            stepResult = job.Start();
                        }
                        break;
                    }

                default:
                    {
                        Trace.WriteError("Erreur Lors de la lecture du Step - Step indéfinis");
                        isCrashed = true;
                        stepResult = null;
                        break;
                    }
            }

            //Fin de la lecture du Test, tout est OK ?
            if (!isCrashed && stepResult != null)
            {
                Trace.WriteInfo("Envois du résultat");
                MainEntry.server.SendStepResult(stepResult);
            }
            //Si plantage
            else if (isCrashed)
            {
                Trace.WriteInfo("Erreur");
                //Envoi du mesage ERROR
            }
            Trace.WriteInfo("Fin de la fonction PlayStep");
        }
예제 #4
0
        /// <summary>
        /// Méthode qui exécute un step sur les testeurs sources et destinations
        /// </summary>
        private bool PlayStep(int num)
        {
            try
            {
                //On initialise les variables de travails
                testerSourceResults      = new GenericTesterResult();
                testerDestinationResults = new GenericTesterResult();

                stepResult = new StepResult();

                //On intialise le thread wait
                wait = new AutoResetEvent(false);

                //On déclare un nouveau Step contenant le step num
                GenericStep step = scenarioToPlay.Steps[num];

                //On enregistre les noms des testers source et destination
                testerDestinationName = step.TesterDestination;
                testerSourceName      = step.TesterSource;

                //on récupére l'identifiant du testeur source et destionation
                int idTesterSource      = MainEntry.listTesters.GetIdFromName(step.TesterSource);
                int idTesterDestination = MainEntry.listTesters.GetIdFromName(step.TesterDestination);

                //On s'enregistre à l'évenement OnReceiveStepResult
                MainEntry._TcpEvents.StepResultReceiveEvent += new CommonProject.Communication.StepResultReceiveHandler(OnReceiveStepResults);

                //On charge un timer qui déclenchera un timeOut au bout d'un temps données
                //sti.Handle = ThreadPool.RegisterWaitForSingleObject(wait, new WaitOrTimerCallback(OnTimeOut), sti, step.TimeOut, true);

                //Envoi de l'ordre d'exécuter le step
                MainEntry.listTesters.Tester[idTesterSource].PlayStep(num);
                MainEntry.listTesters.Tester[idTesterDestination].PlayStep(num);

                //Attente des résultat de ce Step exécutée par les deux testeurs
                wait.WaitOne();
                wait.Reset();
                wait.WaitOne();
                wait.Reset();

                MainEntry._TcpEvents.StepResultReceiveEvent -= new CommonProject.Communication.StepResultReceiveHandler(OnReceiveStepResults);

                //On instancie StepResult avec les résultat des actions efectué par les testeurs
                stepResult.NumStep = step.NumStep;
                stepResult.NameId  = step.NameId;
                stepResult.NameId  = step.NameId;
                stepResult.Status  = TestStatus.Success;
                List <GenericTesterResult> tempList = new List <GenericTesterResult>(2);
                tempList.Add(testerSourceResults);
                tempList.Add(testerDestinationResults);
                stepResult.TestersResults = tempList.ToArray();

                Trace.WriteLine("Début de l'analyse des résultats");

                foreach (GenericTesterResult current in stepResult.TestersResults)
                {
                    if (current.Status == TestStatus.Failed)
                    {
                        stepResult.Status = TestStatus.Failed;
                        stepResult.Msg    = "La lecture du step a échoué";
                    }
                    else if (current.Status == TestStatus.TimeOut)
                    {
                        stepResult.Status = TestStatus.TimeOut;
                        stepResult.Msg    = "Un timeOut s'est déclenché";
                    }
                    else
                    {
                        stepResult.Msg = "Step terminé avec succès";
                    }
                }

                //Test de vérification des DTMF reçus et envoyé
                if (stepResult.NameId == (int)StepsName.DTMF && stepResult.Status == TestStatus.Success)
                {
                    if (((GenericDTMFResult)testerSourceResults.Datas).DTMF != ((GenericDTMFResult)testerDestinationResults.Datas).DTMF)
                    {
                        stepResult.Status = TestStatus.Failed;
                        stepResult.Msg    = "Le DTMF reçu ne correspond pas au DTMF envoyé";
                    }
                }


                if (stepResult.NameId == (int)StepsName.Appel)
                {
                    Datas.Steps.CallStep callStep = (Datas.Steps.CallStep)step;

                    if (callStep.CallerIdentitie)
                    {
                        if (((GenericCallResult)testerDestinationResults.Datas).CallerName == "Anonymous")
                        {
                            stepResult.Status = TestStatus.Failed;
                            if (callStep.CallMode == CallMode.Normal)
                            {
                                stepResult.Msg = "L'appel en mode \"présentation du numéro\" a échoué";
                            }
                            else
                            {
                                stepResult.Msg = "L'appel n'a pas été reçu en mode OIP";
                            }
                        }
                    }
                    else
                    {
                        if (((GenericCallResult)testerDestinationResults.Datas).CallerName != "Anonymous")
                        {
                            stepResult.Status = TestStatus.Failed;
                            if (callStep.CallMode == CallMode.Normal)
                            {
                                stepResult.Msg = "L'appel a été reçu en mode OIP";
                            }
                            else
                            {
                                stepResult.Msg = "L'appel en mode OIR a échoué";
                            }
                        }
                    }
                }
                return(true);

                /*
                 * //Analyse du résultat pour identifier un échec fatal
                 * if (stepResult.Status == TestStatus.Failed && stepResult.NameId == (int)StepsName.Appel)
                 * {   //Echec Fatal
                 *  return false;
                 * }
                 * else
                 * {
                 *  return true;
                 * }  */
            }
            catch (Exception e)
            {
                Trace.WriteDebug("Erreur PLAYSTEP KO");
                stepResult.Msg    = "Erreur générale - L'appel n'a pas abouti";
                stepResult.Status = TestStatus.Failed;
                //Echec Fatal
                return(false);
            }
        }
예제 #5
0
        /// <summary>
        /// Lancement de l'action
        /// </summary>
        public GenericTesterResult Start()
        {
            GenericTesterResult result = new GenericTesterResult();

            //initialisation
            autoWaitHandle = new AutoResetEvent(false);
            _waitLock      = new ManualResetEvent(false);

            try
            {
                Trace.WriteInfo("Start Action");
                //Enregitrements des instances de fonction de la classe aux événement Econf
                Register();

                Console.WriteLine("TimeOut: " + timeOut);
                //Chargement du timer
                timerHandle = ThreadPool.RegisterWaitForSingleObject(autoWaitHandle, new WaitOrTimerCallback(WaitProc), null, timeOut, true);

                //Lancement de l'action
                Action();

                Trace.WriteInfo("Attente de résultat");
                _waitLock.WaitOne();

                //Si le Timer s'est déclenché
                if (status == TestStatus.TimeOut)
                {
                    listMsg.Add("Timer déclenché");
                    status = TestStatus.TimeOut;
                    Trace.WriteInfo("TIMEOUT :" + status);
                    result = new GenericTesterResult(status, listMsg);
                }
                else if (status == TestStatus.Failed || status == TestStatus.Unknown)
                {
                    Trace.WriteInfo("ECHEC :" + status);
                    result = new GenericTesterResult(status, listMsg);
                }
                else
                {
                    if (datas != null)
                    {
                        Trace.WriteInfo("SUCCES : " + status);
                        result = new GenericTesterResult(status, listMsg, datas);
                    }
                    else
                    {
                        result = new GenericTesterResult(status, listMsg);
                    }
                }
            }

            catch (Exception e)
            {
                status = TestStatus.Failed;
                listMsg.Add("Erreur innatendue");
                Trace.WriteError(e.ToString());
                result = new GenericTesterResult(status, listMsg);
            }

            finally
            {
                Trace.WriteInfo("Fin de l'action");
                //Désenregitrements des instances de fonction de la classe aux événement Econf
                Unregister();
                //On désarme le Timer
                timerHandle.Unregister(null);
            }
            return(result);
        }