/// <summary>
        /// Obtiene los mensajes
        /// </summary>
        /// <returns></returns>
        public EstrategiaDTO GetMessages(string queueName)
        {
            var conn = ConnectionRabbitMQ();

            var            channel = conn.CreateModel();
            bool           noAck   = true;
            BasicGetResult result  = channel.BasicGet(queueName, noAck);

            if (result == null)
            {
                // No message available at this time.
            }
            else
            {
                IBasicProperties props      = result.BasicProperties;
                byte[]           body       = result.Body;
                var           base64Decoded = Encoding.UTF8.GetString(body);
                EstrategiaDTO estrategia    = JsonConvert.DeserializeObject <EstrategiaDTO>(base64Decoded);

                ControllerVulkano.ScriptController scriptController = new ControllerVulkano.ScriptController();

                if (estrategia != null)
                {
                    var script = scriptController.SelectScript(estrategia.TipoPruebas.First().ID);
                    estrategia.TipoPruebas.First().Script = script;
                    //channel.BasicAck(result.DeliveryTag, false);
                }
                return(estrategia);
            }
            return(null);
        }
Beispiel #2
0
        public void EnviaMensajes(EstrategiaDTO estrategia)
        {
            foreach (var tipoPrueba in estrategia.TipoPruebas)
            {
                MQTipoPruebaController mqTipoPruebaController = new MQTipoPruebaController();

                var mqTipoPrueba = mqTipoPruebaController.SelectMQTipoPrueba(tipoPrueba.MQTipoPrueba.ID).First();

                EstrategiaDTO estrategiaNew = new EstrategiaDTO()
                {
                    Estrategia_ID = estrategia.Estrategia_ID,
                    Nombre        = estrategia.Nombre,
                    Aplicacion    = estrategia.Aplicacion,
                    Estado        = estrategia.Estado
                };
                estrategiaNew.TipoPruebas.Add(tipoPrueba);

                String jsonified        = JsonConvert.SerializeObject(estrategiaNew);
                byte[] estrategiaBuffer = Encoding.UTF8.GetBytes(jsonified);


                using (var conn = ConnectionRabbitMQ())
                {
                    IModel model = conn.CreateModel();

                    model.BasicPublish(exchange: "Dispather",
                                       routingKey: mqTipoPrueba.RouteKey,
                                       basicProperties: null,
                                       body: estrategiaBuffer
                                       );
                }
            }
        }
        public ReturnMessage Post([FromBody] EstrategiaDTO estrategia)
        {
            ControllerVulkano.EstrategiaController estrategiaController = new ControllerVulkano.EstrategiaController();
            var returnMessage = estrategiaController.CreateEstrategia(estrategia);

            return(returnMessage);
        }
Beispiel #4
0
        static void Main(string[] args)
        {
            GeneralWorkerNetFramework.RabbitMQ rabbitMQ = new GeneralWorkerNetFramework.RabbitMQ();
            EstrategiaDTO strategy = rabbitMQ.GetMessages("QUEUE_ANDROIDRANDOM");


            StartProcess(strategy);
        }
        public ReturnMessage PostPrueba([FromBody] EstrategiaDTO estrategia)
        {
            ControllerVulkano.EstrategiaController estrategiaController = new ControllerVulkano.EstrategiaController();
            var returnMessage = estrategiaController.AddTipoPrueba(estrategia);
            //enviar mensaje a la cola
            RabbitMessagesController mensajeRabbit = new RabbitMessagesController();

            mensajeRabbit.Post(estrategia);
            return(returnMessage);
        }
Beispiel #6
0
        public string Post([FromBody] EstrategiaDTO estrategia)
        {
            EstrategiaController estrategiaController = new EstrategiaController();
            var newEstrategia = estrategiaController.Get(estrategia.Estrategia_ID).First();

            newEstrategia.TipoPruebas = estrategia.TipoPruebas;
            Dispatcher rabbit = new Dispatcher();

            rabbit.EnviaMensajes(newEstrategia);
            return("Mensaje enviado a la Cola");
        }
        /// <summary>
        /// Run cypress test project
        /// </summary>
        /// <param name="strategy"><see cref="EstrategiaDTO"/></param>
        public void RunCypressTest(EstrategiaDTO strategy)
        {
            foreach (TipoPruebaDTO tipoPrueba in strategy.TipoPruebas)
            {
                TipoPruebaController tipoPruebaController = new TipoPruebaController();
                int idExecution = tipoPruebaController.InsertEjecucionTipoPrueba(strategy.Estrategia_ID, strategy.TipoPruebas[0].ID, 0, "", EstadoEnum.EnEjecucion);

                string testProject       = Path.Combine(GetScriptProjectPath(), @"wwwroot\uploads");
                string destinationFolder = @"C:\Temp";
                string scriptPath        = string.Concat(testProject, strategy.TipoPruebas.First().Script.Script);
                string destinationPath   = string.Concat(destinationFolder, @"\",
                                                         Path.GetFileNameWithoutExtension(scriptPath));

                if (!File.Exists(scriptPath))
                {
                    String msg = String.Format("{0} do not exist. Please verify the information provided.", scriptPath);
                    Console.WriteLine(msg);
                    return;
                }

                // Extract the zip file
                GeneralWorkerNetFramework.ActionsFile actionsFile = new GeneralWorkerNetFramework.ActionsFile();
                actionsFile.UnzipFile(scriptPath, destinationFolder);

                // Install the node modules for each of the test projects
                var psiNpmRunDist = new ProcessStartInfo
                {
                    FileName = "cmd.exe",
                    RedirectStandardInput = true,
                };
                var pNpmRunDist = Process.Start(psiNpmRunDist);

                Directory.GetDirectories(destinationPath).ToList().ForEach(p =>
                {
                    string[] packageJsonFile = Directory.GetFiles(p, "package.json");
                    if (packageJsonFile.Length == 1)
                    {
                        pNpmRunDist.StandardInput.WriteLine(Path.GetPathRoot(p).Replace(@"\", ""));
                        pNpmRunDist.StandardInput.WriteLine(string.Format("cd {0}", p));
                        pNpmRunDist.StandardInput.WriteLine("npm i");
                    }
                });

                pNpmRunDist.StandardInput.WriteLine("npx cypress run test " + tipoPrueba.Parametros);

                pNpmRunDist.WaitForExit();

                tipoPruebaController.InsertEjecucionTipoPrueba(strategy.Estrategia_ID, strategy.TipoPruebas[0].ID, idExecution, "", EstadoEnum.Finalizado);
            }
        }
        /// <summary>
        /// Crea una estrategia
        /// </summary>
        /// <param name="estrategia"></param>
        public ReturnMessage CreateEstrategia(EstrategiaDTO estrategia)
        {
            ReturnMessage mensaje = new ReturnMessage();
            string        query   = @"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
                            INSERT INTO ESTRATEGIA (NOMBRE,ESTADO_ID,APLICACION_ID,APPVERSION_ID) 
                            VALUES (@NOMBRE,@ESTADO,@APLICACION,@APPVERSION_ID)

                            SELECT @@IDENTITY AS 'Identity';";

            using (var con = ConectarDB())
            {
                con.Open();

                try
                {
                    using (SqlCommand command = new SqlCommand(query, con))
                    {
                        command.Parameters.Add(new SqlParameter("@NOMBRE", estrategia.Nombre));
                        command.Parameters.Add(new SqlParameter("@ESTADO", estrategia.Estado.ID));
                        command.Parameters.Add(new SqlParameter("@APLICACION", estrategia.Aplicacion.Aplicacion_ID));
                        command.Parameters.Add(new SqlParameter("@APPVERSION_ID", estrategia.Version.AppVersion_id));
                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                estrategia.Estrategia_ID = Convert.ToInt32(reader[0]);
                            }
                        }
                    }

                    mensaje.Mensaje     = "La estrategia se creó correctamente";
                    mensaje.TipoMensaje = TipoMensaje.Correcto;
                    mensaje.obj         = estrategia;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("No se pudo insertar.");
                    mensaje.Mensaje     = ex.Message;
                    mensaje.TipoMensaje = TipoMensaje.Error;
                    mensaje.obj         = estrategia;
                }
                finally
                {
                    con.Close();
                }
                return(mensaje);
            }
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="estrategia"></param>
 /// <returns></returns>
 public ReturnMessage UpdateEstrategia(EstrategiaDTO estrategia)
 {
     try
     {
         //logica de negocio aquí
         EstrategiaBehavior estrategiaBehavior = new EstrategiaBehavior();
         return(estrategiaBehavior.UpdateEstrategia(estrategia));
     }
     catch (Exception ex)
     {
         ReturnMessage message = new ReturnMessage();
         message.TipoMensaje = TipoMensaje.Error;
         message.Mensaje     = ex.Message;
         return(message);
     }
 }
        static void Main()
        {
            DebugLog.EscribirLog("Inicio de la generacion del worker BDT");
            GeneralWorkerNetFramework.RabbitMQ rabbitMQ = new GeneralWorkerNetFramework.RabbitMQ();
            EstrategiaDTO strategy = rabbitMQ.GetMessages("QUEUE_BDT");

            if (strategy != null)
            {
                for (int i = 0; i < strategy.TipoPruebas.First().CantidadEjecuciones; i++)
                {
                    StartProcess(strategy);
                }
            }
            DebugLog.EscribirLog("Fin de la generacion del worker BDT");
            Environment.Exit(0);
        }
        static void TestCypress(EstrategiaDTO estrategia)
        {
            foreach (TipoPruebaDTO tipoPrueba in estrategia.TipoPruebas)
            {
                TipoPruebaController tipoPruebaController = new TipoPruebaController();
                int idExecution = tipoPruebaController.InsertEjecucionTipoPrueba(estrategia.Estrategia_ID, estrategia.TipoPruebas[0].ID, 0, "");

                GeneralWorkerNetFramework.ActionsFile actionsFile = new GeneralWorkerNetFramework.ActionsFile();
                var psiNpmRunDist = new ProcessStartInfo
                {
                    FileName = "cmd",
                    RedirectStandardInput = true,
                    //WorkingDirectory = guiProjectDirectory
                };
                var pNpmRunDist = Process.Start(psiNpmRunDist);
                pNpmRunDist.StandardInput.WriteLine("cd C:\\Windows\\System32\\cmd.exe");

                //Traer y copiar el archivo script al sitio donde están los scripts
                string rutaAbsoluta = "C:\\Users\\Sistemas\\source\\repos\\VulkanoPruebasAutomatizadas-Front\\VulkanoPruebasAutomatizadas-Front\\wwwroot";
                //string rutaAbsoluta = "D:\\Takezo316\\GitHub\\VulkanoPruebasAutomatizadas-Front\\VulkanoPruebasAutomatizadas-Front\\wwwroot\\uploads";
                Directory.SetCurrentDirectory(@"C:\vulkanotest");
                string cypath      = Path.GetFullPath(@"C:");
                string rutaScript  = string.Concat(rutaAbsoluta, estrategia.TipoPruebas.First().Script.Script);
                string rutaDestino = string.Concat(cypath, "\\", estrategia.TipoPruebas.First().Script.ID);

                if (!Directory.Exists(rutaDestino))
                {
                    Directory.CreateDirectory(rutaDestino);
                }

                //rutaDestino= string.Concat("C:\\Users\\Sistemas\\Pruebas automatizadas\\E2E\\E2E\\cypress\\integration", estrategia.TipoPruebas.First().Script.Script);
                rutaDestino = string.Concat(cypath, estrategia.TipoPruebas.First().Script.Script);

                string filename = Path.GetFileNameWithoutExtension(rutaDestino);

                File.Copy(rutaScript, rutaDestino, true);

                actionsFile.UnzipFile(rutaScript, string.Concat(cypath, "\\", estrategia.TipoPruebas.First().Script.ID, "\\"));

                pNpmRunDist.StandardInput.WriteLine(string.Concat("cd ", cypath, "\\", estrategia.TipoPruebas.First().Script.ID, "\\", filename));
                pNpmRunDist.StandardInput.WriteLine("npm i");
                pNpmRunDist.StandardInput.WriteLine("npx cypress run .");
                pNpmRunDist.WaitForExit();

                tipoPruebaController.InsertEjecucionTipoPrueba(estrategia.Estrategia_ID, estrategia.TipoPruebas[0].ID, idExecution, "");
            }
        }
        public string Post([FromBody] EstrategiaDTO estrategia)
        {
            EstrategiaController estrategiaController = new EstrategiaController();
            var newEstrategia            = estrategiaController.GetEstrategia(estrategia.Estrategia_ID).First();
            List <TipoPruebaDTO> pruebas = new List <TipoPruebaDTO>();

            foreach (var prueba in estrategia.TipoPruebas)
            {
                var newPrueba = newEstrategia.TipoPruebas.Find(t => t.ID == prueba.ID);
                pruebas.Add(newPrueba);
            }

            newEstrategia.TipoPruebas = pruebas;
            Dispatcher rabbit = new Dispatcher();

            rabbit.EnviaMensajes(newEstrategia);
            return("Mensaje enviado a la Cola");
        }
        /// <summary>
        /// Actualiza una estrategia
        /// </summary>
        /// <param name="estrategia"></param>
        public ReturnMessage UpdateEstrategia(EstrategiaDTO estrategia)
        {
            ReturnMessage mensaje = new ReturnMessage();
            StringBuilder query   = new StringBuilder();


            int flagUpdate = 0;

            query.Append(@"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
                            UPDATE ESTRATEGIA SET");

            //valida que los campos tengan un valor para actualizar.
            if (!string.IsNullOrEmpty(estrategia.Nombre))
            {
                query.Append(" NOMBRE=@NOMBRE");
                flagUpdate = 1;
            }
            if (estrategia.Estado.ID != 0)
            {
                if (flagUpdate == 1)
                {
                    query.Append(",");
                }
                query.Append(" ESTADO_ID=@ESTADO");
                flagUpdate = 1;
            }
            if (estrategia.Aplicacion.Aplicacion_ID != 0)
            {
                if (flagUpdate == 1)
                {
                    query.Append(",");
                }
                query.Append(" APLICACION_ID=@APLICACION_ID");
                flagUpdate = 1;
            }

            if (flagUpdate == 1)
            {
                query.Append(" , WHERE ESTRATEGIA_ID=@ESTRATEGIA_ID;");
            }

            if (flagUpdate == 1)
            {
                using (var con = ConectarDB())
                {
                    con.Open();

                    try
                    {
                        using (SqlCommand command = new SqlCommand(query.ToString(), con))
                        {
                            if (!string.IsNullOrEmpty(estrategia.Nombre))
                            {
                                command.Parameters.Add(new SqlParameter("@NOMBRE", estrategia.Nombre));
                            }
                            if (estrategia.Estado.ID != 0)
                            {
                                command.Parameters.Add(new SqlParameter("@ESTADO", estrategia.Estado.ID));
                            }
                            if (estrategia.Aplicacion.Aplicacion_ID != 0)
                            {
                                command.Parameters.Add(new SqlParameter("@APLICACION", estrategia.Aplicacion.Aplicacion_ID));
                            }
                            command.ExecuteNonQuery();
                        }
                        mensaje.Mensaje     = "La estrategia se actualizó correctamente";
                        mensaje.TipoMensaje = TipoMensaje.Correcto;
                        mensaje.obj         = estrategia;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Count not insert.");
                        mensaje.Mensaje     = ex.Message;
                        mensaje.TipoMensaje = TipoMensaje.Error;
                        mensaje.obj         = estrategia;
                    }
                    finally
                    {
                        con.Close();
                    }
                }
            }
            return(mensaje);
        }
        /// <summary>
        /// Inserta un tipo de prueba
        /// </summary>
        /// <param name="estrategia"></param>
        /// <returns></returns>
        public ReturnMessage AddTipoPrueba(EstrategiaDTO estrategia)
        {
            ReturnMessage mensaje   = new ReturnMessage();
            int           script_id = estrategia.TipoPruebas.First().Script.ID;

            if (script_id != 0)
            {
                ScriptBehavior scriptBehavior      = new ScriptBehavior();
                var            messageUpdateScript = scriptBehavior.UpdateScript(estrategia.TipoPruebas.First().Script);
                string         query = @"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
                                INSERT INTO [dbo].[TIPOPRUEBA]
                                       ([NOMBRE]
                                       ,[PARAMETROS]
                                       ,[SCRIPT_ID]
                                       ,[MQTIPOPRUEBA_ID]
                                       ,[CANTIDAD_EJECUCIONES]
                                       ,[TIEMPO_EJECUCION]
                                       ,[SEMILLA]
                                       ,[HERRAMIENTA_ID]
                                       ,[API_KEY]
                                       ,[API_CONTROLLER])
                                 VALUES(
                                       @Nombre,
                                       @Parametros,
                                       @Script,
                                       @MQTipoPrueba,
                                       @CantidadEjecuciones,
                                       @TiempoEjecucion,
                                       @Semilla,
                                       @HerramientaID,
                                       @ApiKey,
                                       @ApiController)

                                SELECT @@IDENTITY AS 'Identity';";

                using (var con = ConectarDB())
                {
                    con.Open();

                    try
                    {
                        using (SqlCommand command = new SqlCommand(query, con))
                        {
                            var tipoPrueba = estrategia.TipoPruebas.First();
                            command.Parameters.Add(new SqlParameter("@Nombre", tipoPrueba.Nombre));
                            command.Parameters.Add(new SqlParameter("@Parametros", string.IsNullOrEmpty(tipoPrueba.Parametros)?string.Empty:tipoPrueba.Parametros));
                            command.Parameters.Add(new SqlParameter("@MQTipoPrueba", tipoPrueba.MQTipoPrueba.ID));
                            command.Parameters.Add(new SqlParameter("@Script", script_id));
                            command.Parameters.Add(new SqlParameter("@CantidadEjecuciones", tipoPrueba.CantidadEjecuciones));
                            command.Parameters.Add(new SqlParameter("@TiempoEjecucion", tipoPrueba.TiempoEjecucion));
                            command.Parameters.Add(new SqlParameter("@Semilla", tipoPrueba.Semilla));
                            command.Parameters.Add(new SqlParameter("@HerramientaID", tipoPrueba.Herramienta.Herramienta_ID));
                            command.Parameters.Add(new SqlParameter("@ApiKey", tipoPrueba.ApiKey));
                            command.Parameters.Add(new SqlParameter("@ApiController", tipoPrueba.ApiController));
                            using (var reader = command.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    estrategia.TipoPruebas.First().ID = Convert.ToInt32(reader[0]);
                                }
                            }
                        }

                        mensaje.Mensaje     = "La prueba se creó correctamente";
                        mensaje.TipoMensaje = TipoMensaje.Correcto;
                        mensaje.obj         = estrategia.TipoPruebas.First();

                        AsociarPruebaEstrategia(estrategia.TipoPruebas.First().ID, estrategia.Estrategia_ID);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Count not insert.");
                        mensaje.Mensaje     = ex.Message;
                        mensaje.TipoMensaje = TipoMensaje.Error;
                        mensaje.obj         = estrategia.TipoPruebas.First();
                    }
                    finally
                    {
                        con.Close();
                    }
                }
                return(mensaje);
            }
            mensaje             = new ReturnMessage();
            mensaje.TipoMensaje = TipoMensaje.Error;
            return(mensaje);
        }
        /// <summary>
        /// Start with the process of environment preparation and test execution
        /// </summary>
        /// <param name="strategy"><see cref="EstrategiaDTO"/></param>
        static void StartProcess(EstrategiaDTO strategy)
        {
            DebugLog.EscribirLog("Procesando la estrategia " + strategy.Estrategia_ID);
            TipoPruebaController tipoPruebaController = new TipoPruebaController();
            int idExecution = 0;

            try
            {
                WorkerStatus worker = new WorkerStatus();
                worker.WorkerID   = Convert.ToInt32(ConfigurationManager.AppSettings["WorkerID"]);
                worker.Estado.ID  = 6;
                worker.TipoPrueba = "QUEUE_BDT";
                WorkerController workerController = new WorkerController();
                workerController.UpdateWorkerStatus(worker);

                foreach (TipoPruebaDTO tipoPrueba in strategy.TipoPruebas)
                {
                    DebugLog.EscribirLog("Procesando la prueba " + tipoPrueba.ID);

                    ScriptFile scriptFile = new ScriptFile();
                    //guarda en el historico de ejecucion de pruebas
                    idExecution = tipoPruebaController.InsertEjecucionTipoPrueba(strategy.Estrategia_ID, strategy.TipoPruebas[0].ID, 0, "", EstadoEnum.EnEjecucion);

                    //ruta donde se encuentra el archivo del script
                    string testProject = Path.Combine(ConfigurationManager.AppSettings["RutaScript"]);
                    //ruta destino temporal
                    string destinationFolder = @"C:\Temp";
                    DebugLog.EscribirLog("id ejecucion " + idExecution);
                    string destinationPath = string.Concat(destinationFolder, @"\", tipoPrueba.Script.Script);
                    DebugLog.EscribirLog(destinationPath);
                    //ruta de origen del script
                    string scriptPath = string.Concat(testProject, tipoPrueba.Script.Script, tipoPrueba.Script.Nombre, tipoPrueba.Script.Extension);

                    //si la ruta destino no existe se crea
                    if (!File.Exists(destinationPath))
                    {
                        Directory.CreateDirectory(destinationPath);
                    }
                    DebugLog.EscribirLog("creo ruta de temp");
                    // Extract the zip file
                    GeneralWorkerNetFramework.ActionsFile actionsFile = new GeneralWorkerNetFramework.ActionsFile();
                    actionsFile.UnzipFile(scriptPath, destinationPath);
                    // Create json structure file
                    //string projectPath = //@"F:\Universidad de los Andes\MISO\Pruebas Automaticas\T Grupal\-201920_MISO4208\PrestashopTest";
                    string dataDestinationFolder = Path.Combine(destinationPath, @"Prestashop.Core\fixtures\data.json");
                    DebugLog.EscribirLog("ruta del fixtures");
                    //parametros de mockaroo
                    #region Mockaroo
                    ParametersRequest parameters = new ParametersRequest
                    {
                        ApiController = tipoPrueba.ApiController,
                        Key           = tipoPrueba.ApiKey
                    };

                    JsonFile jsonFile            = new JsonFile();
                    int      numberDataGenerated = jsonFile.GenerateData(parameters, dataDestinationFolder);
                    #endregion
                    // Reemplaza tokens del script
                    DebugLog.EscribirLog(destinationPath);
                    #region Reemplazar tokens
                    IEnumerable <string> featureFiles = scriptFile.GetFeatureFiles(destinationPath);
                    // Replace tokens with random position object of json file
                    DebugLog.EscribirLog("inicio del reemplazo tokens");
                    foreach (string featureFile in featureFiles)
                    {
                        scriptFile.ReplaceTokens(featureFile, numberDataGenerated);
                    }
                    DebugLog.EscribirLog("reemplazo tokens");
                    #endregion
                    // Executes Cypress script
                    if (strategy != null)
                    {
                        DebugLog.EscribirLog("ruta del package");

                        string package = destinationPath + "\\" + "BDT.TestProject";
                        DebugLog.EscribirLog("fin ruta del fixtures");
                        // Install the node modules for each of the test project

                        var psiNpmRunDist = new ProcessStartInfo
                        {
                            FileName = "cmd.exe",
                            RedirectStandardInput = true,
                            UseShellExecute       = false,
                            WorkingDirectory      = package
                        };
                        DebugLog.EscribirLog("Abiendo CMD " + package);
                        using (var pNpmRunDist = Process.Start(psiNpmRunDist))
                        {
                            StringBuilder output = new StringBuilder();
                            pNpmRunDist.StandardInput.WriteLine("npm i");
                            Thread.Sleep(1000);

                            pNpmRunDist.StandardInput.WriteLine("npx cypress run " + tipoPrueba.Parametros);
                            pNpmRunDist.WaitForExit(360000);
                            pNpmRunDist.Close();
                        }
                        DebugLog.EscribirLog("marca como finalizado");
                        //marca como finalizado
                    }
                }
            }
            catch (Exception ex)
            {
                DebugLog.EscribirLog("error " + ex.Message);
                Console.WriteLine("error " + ex);
                //en caso de error envia nuevamente a la cola
                Dispatcher rabbit = new Dispatcher();
                rabbit.EnviaMensajes(strategy);
            }
            finally
            {
                DebugLog.EscribirLog("Liberando el worker");
                WorkerStatus worker = new WorkerStatus();
                worker.WorkerID   = Convert.ToInt32(ConfigurationManager.AppSettings["WorkerID"]);
                worker.Estado.ID  = 5;
                worker.TipoPrueba = "QUEUE_BDT";
                WorkerController workerController = new WorkerController();
                workerController.UpdateWorkerStatus(worker);
                DebugLog.EscribirLog("Fin del proceso de la estrategia " + strategy.Estrategia_ID);
                tipoPruebaController.InsertEjecucionTipoPrueba(strategy.Estrategia_ID, strategy.TipoPruebas[0].ID, idExecution, "", EstadoEnum.WorkerLibre);
            }
        }
        /// <summary>
        /// Consulta una estrategia
        /// </summary>
        /// <param name="estrategiaID"></param>
        /// <returns></returns>
        public List <EstrategiaDTO> SelectEstrategia(int estrategiaID)
        {
            List <EstrategiaDTO> listEstrategias = new List <EstrategiaDTO>();
            StringBuilder        query           = new StringBuilder().Append(@"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
                            SELECT 
                            T0.ESTRATEGIA_ID,
                            T0.NOMBRE,
                            T2.ESTADO_ID,
                            T2.NOMBRE NOMBREESTADO,
                            T1.APLICACION_ID,
                            T5.NUMERO,
                            T1.DESCRIPCION,
                            T1.ES_WEB,
                            T1.NOMBRE NOMBREAPLICACION,
                            T5.RUTA_APLICACION,
							T3.TIPOPRUEBA_ID,
							T4.NOMBRE,
							T4.MQTIPOPRUEBA_ID,
							T4.CANTIDAD_EJECUCIONES,
							T4.TIEMPO_EJECUCION,
							T4.SEMILLA,
							T4.API_CONTROLLER,
							T4.API_KEY,
							T4.PARAMETROS
                            FROM ESTRATEGIA T0 
                            INNER JOIN APLICACION T1 ON T0.APLICACION_ID=T1.APLICACION_ID
                            INNER JOIN ESTADO T2 ON T0.ESTADO_ID=T2.ESTADO_ID
							INNER JOIN APPVERSION T5 ON T5.ID=T0.APPVERSION_ID
							LEFT JOIN ESTRATEGIA_TIPOPRUEBA T3 ON T0.ESTRATEGIA_ID=T3.ESTRATEGIA_ID
							LEFT JOIN TIPOPRUEBA T4 ON T3.TIPOPRUEBA_ID=T4.TIPOPRUEBA_ID"                            );

            if (estrategiaID != 0)
            {
                query.Append(" WHERE T0.ESTRATEGIA_ID=@ESTRATEGIA_ID");
            }

            using (var con = ConectarDB())
            {
                con.Open();

                try
                {
                    using (SqlCommand command = new SqlCommand(query.ToString(), con))
                    {
                        if (estrategiaID != 0)
                        {
                            command.Parameters.Add(new SqlParameter("@ESTRATEGIA_ID", estrategiaID));
                        }

                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                if (!listEstrategias.Exists(e => e.Estrategia_ID == Convert.ToInt32(reader[0])))
                                {
                                    EstrategiaDTO estrategia = new EstrategiaDTO();

                                    estrategia.Estrategia_ID = Convert.ToInt32(reader[0]);
                                    estrategia.Nombre        = reader[1].ToString();
                                    EstadoDTO estado = new EstadoDTO();

                                    //diccionario de estado
                                    var estadoDictionary = GetEstrategiaStatus(estrategia.Estrategia_ID);
                                    //estados
                                    estado.ID     = estadoDictionary.First().Key;
                                    estado.Nombre = estadoDictionary.First().Value;
                                    //agregar el estado
                                    estrategia.Estado = estado;

                                    AplicacionDTO aplicacion = new AplicacionDTO();
                                    aplicacion.Aplicacion_ID   = Convert.ToInt32(reader[4]);
                                    aplicacion.Version         = reader[5].ToString();
                                    aplicacion.Descripcion     = reader[6].ToString();
                                    aplicacion.Es_Web          = Convert.ToInt32(reader[7]) == 1 ? true : false;
                                    aplicacion.Nombre          = reader[8].ToString();
                                    aplicacion.Ruta_Aplicacion = reader[9].ToString();
                                    estrategia.Aplicacion      = aplicacion;
                                    listEstrategias.Add(estrategia);
                                }

                                if (!string.IsNullOrEmpty(reader[10].ToString()))
                                {
                                    TipoPruebaDTO tipoPrueba = new TipoPruebaDTO();

                                    tipoPrueba.ID     = Convert.ToInt32(reader[10]);
                                    tipoPrueba.Nombre = reader[11].ToString();
                                    tipoPrueba.CantidadEjecuciones = Convert.ToInt32(reader[13]);
                                    tipoPrueba.TiempoEjecucion     = Convert.ToDouble(reader[14]);
                                    tipoPrueba.Semilla             = string.IsNullOrEmpty(reader[15].ToString()) ? string.Empty : reader[15].ToString();
                                    tipoPrueba.ApiController       = string.IsNullOrEmpty(reader[16].ToString()) ? string.Empty : reader[16].ToString();
                                    tipoPrueba.ApiKey     = string.IsNullOrEmpty(reader[17].ToString()) ? string.Empty : reader[17].ToString();
                                    tipoPrueba.Parametros = string.IsNullOrEmpty(reader[18].ToString()) ? string.Empty : reader[18].ToString();


                                    MQTipoPruebaDTO mqTipo = new MQTipoPruebaDTO();
                                    if (!string.IsNullOrEmpty(reader[12].ToString()))
                                    {
                                        mqTipo.ID = Convert.ToInt32(reader[12]);
                                        tipoPrueba.MQTipoPrueba = mqTipo;
                                    }
                                    listEstrategias.Find(e => e.Estrategia_ID == Convert.ToInt32(reader[0])).TipoPruebas.Add(tipoPrueba);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Count not insert.");
                }
                finally
                {
                    con.Close();
                }
            }
            return(listEstrategias);
        }
 public ReturnMessage Put([FromBody] EstrategiaDTO estrategia)
 {
     ControllerVulkano.EstrategiaController estrategiaController = new ControllerVulkano.EstrategiaController();
     return(estrategiaController.UpdateEstrategia(estrategia));
 }
Beispiel #18
0
        static void StartProcess(EstrategiaDTO estrategia)
        {
            TipoPruebaController tipoPruebaController = new TipoPruebaController();
            int idExecution = tipoPruebaController.InsertEjecucionTipoPrueba(estrategia.Estrategia_ID, estrategia.TipoPruebas[0].ID, 0, "", EstadoEnum.EnEjecucion);


            int    times = estrategia.TipoPruebas.First().CantidadEjecuciones;
            string delay = "0.2";
            string seed1;
            string seed2;
            string seed3;
            string seed4;
            string completeSeed = estrategia.TipoPruebas.First().Semilla;

            if (string.IsNullOrEmpty(completeSeed))
            {
                seed1        = new Random().Next(0, 999999999).ToString();
                seed2        = new Random().Next(0, 999999999).ToString();
                seed3        = new Random().Next(0, 999999999).ToString();
                seed4        = new Random().Next(0, 999999999).ToString();
                completeSeed = seed1 + seed2 + seed3 + seed4;
            }

            string ruta     = estrategia.TipoPruebas.First().Script.Script;
            string fileName = ConfigurationManager.AppSettings["RutaScript"] + ruta + "\\features\\monkey.feature";

            string zipFile      = "features.zip";
            string featuresPath = ConfigurationManager.AppSettings["RutaScript"] + ruta;
            string zipPath      = ConfigurationManager.AppSettings["RutaScript"] + ruta + "\\" + zipFile;

            try
            {
                // Check if file already exists. If yes, delete it.
                if (File.Exists(fileName))
                {
                    File.Delete(fileName);
                }

                // Create a new file
                using (FileStream fs = File.Create(fileName))
                {
                    // Add some text to file
                    Byte[] title = new UTF8Encoding(true).GetBytes("Feature: Monkey Testing");
                    fs.Write(title, 0, title.Length);

                    Byte[] newLine = new UTF8Encoding(true).GetBytes("\n");
                    fs.Write(newLine, 0, newLine.Length);

                    Byte[] scenarioTitle = new UTF8Encoding(true).GetBytes("Scenario: Random touch");
                    fs.Write(newLine, 0, newLine.Length);

                    Byte[] author = new UTF8Encoding(true).GetBytes("    Given I make " + times + " events with a waiting time of " + delay + " with seed " + completeSeed);
                    fs.Write(author, 0, author.Length);
                }

                // Open the stream and read it back.
                using (StreamReader sr = File.OpenText(fileName))
                {
                    string s = "";
                    while ((s = sr.ReadLine()) != null)
                    {
                        Console.WriteLine(s);
                    }
                }

                if (File.Exists(zipPath))
                {
                    File.Delete(zipPath);
                }

                ZipFile.CreateFromDirectory(featuresPath, zipPath);
            }
            catch (Exception Ex)
            {
                Console.WriteLine(Ex.ToString());
            }

            //Create upload for apk
            String cmd = @"/C C:\PROGRA~1\Amazon\AWSCLI\bin\aws devicefarm create-upload --project-arn arn:aws:devicefarm:us-west-2:813226252700:project:45bfef00-da01-48d6-bc69-2b2c7f6fb425 --name " + estrategia.TipoPruebas.First().Parametros + "--type ANDROID_APP";

            var psiNpmRunDist = new ProcessStartInfo
            {
                FileName = "cmd.exe",
                RedirectStandardInput  = true,
                RedirectStandardOutput = true,
                UseShellExecute        = false,
                Arguments = cmd
            };
            var pNpmRunDist = Process.Start(psiNpmRunDist);

            string output = pNpmRunDist.StandardOutput.ReadToEnd();

            Console.WriteLine(output);

            dynamic response        = JsonConvert.DeserializeObject(output);
            string  urlForApkUpload = response.upload.url.ToString();

            Console.WriteLine("url: " + urlForApkUpload);

            //Upload apk
            string rutaAbsoluta = estrategia.Aplicacion.Ruta_Aplicacion;

            String paramsForApkUpload = @"/C curl -T " + rutaAbsoluta + " \"" + urlForApkUpload + "\"";

            psiNpmRunDist = new ProcessStartInfo
            {
                FileName = "cmd.exe",
                RedirectStandardInput  = true,
                RedirectStandardOutput = true,
                UseShellExecute        = false,
                Arguments = paramsForApkUpload
            };
            pNpmRunDist = Process.Start(psiNpmRunDist);

            output = pNpmRunDist.StandardOutput.ReadToEnd();

            Console.WriteLine(output);

            pNpmRunDist.WaitForExit();

            Console.WriteLine("finished");

            //Create Upload for script
            cmd = @"/C C:\PROGRA~1\Amazon\AWSCLI\bin\aws devicefarm create-upload --project-arn arn:aws:devicefarm:us-west-2:813226252700:project:45bfef00-da01-48d6-bc69-2b2c7f6fb425 --name " + estrategia.TipoPruebas.First().Script.Nombre + estrategia.TipoPruebas.First().Script.Extension + " --type CALABASH_TEST_PACKAGE";

            psiNpmRunDist = new ProcessStartInfo
            {
                FileName = "cmd.exe",
                RedirectStandardInput  = true,
                RedirectStandardOutput = true,
                UseShellExecute        = false,
                Arguments = cmd
            };
            pNpmRunDist = Process.Start(psiNpmRunDist);

            output = pNpmRunDist.StandardOutput.ReadToEnd();

            Console.WriteLine(output);

            response = JsonConvert.DeserializeObject(output);
            var urlForScriptUpload = response.upload.url.ToString();

            Console.WriteLine("url: " + urlForScriptUpload);

            //Upload script
            rutaAbsoluta = zipPath;

            string paramsForScriptUpload = @"/C curl -T " + rutaAbsoluta + " \"" + urlForScriptUpload + "\"";

            psiNpmRunDist = new ProcessStartInfo
            {
                FileName = "cmd.exe",
                RedirectStandardInput  = true,
                RedirectStandardOutput = true,
                UseShellExecute        = false,
                Arguments = paramsForScriptUpload
            };
            pNpmRunDist = Process.Start(psiNpmRunDist);

            output = pNpmRunDist.StandardOutput.ReadToEnd();

            Console.WriteLine(output);

            pNpmRunDist.WaitForExit();

            Console.WriteLine("finished");

            //response = JsonConvert.DeserializeObject(output);

            //string output = pNpmRunDist.StandardOutput.ReadToEnd();

            //Thread.Sleep(10000);

            //Execute test
            cmd = @"/C C:\PROGRA~1\Amazon\AWSCLI\bin\aws devicefarm schedule-run --project-arn arn:aws:devicefarm:us-west-2:813226252700:project:45bfef00-da01-48d6-bc69-2b2c7f6fb425  --app-arn arn:aws:devicefarm:us-west-2:813226252700:upload:45bfef00-da01-48d6-bc69-2b2c7f6fb425/cf5e1be8-e01c-4ceb-87d6-0a2970e32957 --device-pool-arn arn:aws:devicefarm:us-west-2::devicepool:1c59cfd0-ee56-4443-b290-7a808d9fd885 --name MyTestRun --test type=CALABASH,testPackageArn=arn:aws:devicefarm:us-west-2:813226252700:upload:45bfef00-da01-48d6-bc69-2b2c7f6fb425/a642b018-2ca7-4b16-9469-92cf7c363849";

            psiNpmRunDist = new ProcessStartInfo
            {
                FileName = "cmd.exe",
                RedirectStandardInput  = true,
                RedirectStandardOutput = true,
                UseShellExecute        = false,
                Arguments = cmd
            };
            pNpmRunDist = Process.Start(psiNpmRunDist);

            output = pNpmRunDist.StandardOutput.ReadToEnd();

            Console.WriteLine(output);

            response = JsonConvert.DeserializeObject(output);
            var arnForRun = response.run.arn.ToString();

            Console.WriteLine("arnForRun: " + arnForRun);

            string status = "";

            while (status != "COMPLETED" || status != "STOPPING")
            {
                //Check if finished

                cmd = @"/C C:\PROGRA~1\Amazon\AWSCLI\bin\aws devicefarm get-run --arn" + " \"" + arnForRun + "\"";

                psiNpmRunDist = new ProcessStartInfo
                {
                    FileName = "cmd.exe",
                    RedirectStandardInput  = true,
                    RedirectStandardOutput = true,
                    UseShellExecute        = false,
                    Arguments = cmd
                };
                pNpmRunDist = Process.Start(psiNpmRunDist);

                output = pNpmRunDist.StandardOutput.ReadToEnd();
                Console.WriteLine(output);
                response = JsonConvert.DeserializeObject(output);
                status   = response.run.status.ToString();

                Thread.Sleep(60000);
            }

            //For the results is used arnForRun
            //for example:
            //arn:aws:devicefarm:us-west-2:813226252700:run:45bfef00-da01-48d6-bc69-2b2c7f6fb425/ff7d0b49-162b-4bc2-9ee9-9cdc96a1c239

            //Screenshots results
            cmd = @"/C C:\PROGRA~1\Amazon\AWSCLI\bin\aws devicefarm list-artifacts --arn" + " \"" + arnForRun + "\" --type SCREENSHOT";

            psiNpmRunDist = new ProcessStartInfo
            {
                FileName = "cmd.exe",
                RedirectStandardInput  = true,
                RedirectStandardOutput = true,
                UseShellExecute        = false,
                Arguments = cmd
            };
            pNpmRunDist = Process.Start(psiNpmRunDist);

            output = pNpmRunDist.StandardOutput.ReadToEnd();

            Console.WriteLine(output);

            response = JsonConvert.DeserializeObject(output);

            //marca como finalizado
            tipoPruebaController.InsertEjecucionTipoPrueba(estrategia.Estrategia_ID, estrategia.TipoPruebas[0].ID, idExecution, "", EstadoEnum.Finalizado);
        }
Beispiel #19
0
 public ReturnMessage Post([FromBody] EstrategiaDTO estrategia)
 {
     Controller.EstrategiaController estrategiaController = new Controller.EstrategiaController();
     return(estrategiaController.CreateEstrategia(estrategia));
 }
Beispiel #20
0
 public ReturnMessage PostPrueba([FromBody] EstrategiaDTO estrategia)
 {
     Controller.EstrategiaController estrategiaController = new Controller.EstrategiaController();
     return(estrategiaController.AddTipoPrueba(estrategia));
 }
Beispiel #21
0
 public void Put(int id, [FromBody] EstrategiaDTO estrategia)
 {
 }