/mutants

Examen Mercadolibre

Primary LanguageJava

Build Status codecov

Ejercicio Mutantes - Mercadolibre

Ejercicio práctico para MercadoLibre.

Se puede ver una version estable del proyecto aqui:

Magneto_image

Ejercicio

Especificaciones

Los archivos correspondientes a la especificación del ejercicio se encuentran en la carpeta spec. Dentro de ella se encuentra un pdf que describe la funcionalidades y requisitos esperados que contenga el proyecto.

Implementacion y tecnologias usadas

Comentarios relevantes

Cuando comence a realizar el ejercicio no estaba familiarizado con SparkJava, por lo que tuve la oportunidad de aprender los conceptos basicos de este framework utilizando la documentacion oficial de sparkjava y tutoriales.

Tampoco estaba familiarizado con Morphia para el mapeo Object/Document, utilice tambien la documentacion oficial y la documentacion de la API.

Setup

Instrucciones

Para compilar y ejecutar proyecto es necesario contar con la version 1.8 de la JDK y Maven para la gestion de las dependencias.

Tambien es necesario contar con una instancia de MongoDB en caso de querer ejecutarlo localmente, se utilizan los datos de conexion por default de MongoDB, si la instancia se encuentra levantada en un host/port distinto se debe actualizar en el componente DbServiceImpl

Los distintos logs de la aplicacion se generan en el directorio del proyecto. En caso de querer loguear en otra ubicacion es necesario actualizar la propiedad dir del archivo de configuracion log4j2.

Clonar este repositorio: https://github.com/amcomaschi/mutants

Una vez levantada la aplicacion se puede realizar invocaciones a la API.

El puerto por defecto de la API es 4567.

Uso

Para iniciar la aplicación, asegúrese de cumplir con las instrucciones anteriores.

Una vez listo, ejecutar la clase principal MutantsApp en su IDE preferido y espere hasta que se inicie la aplicación.

Tambien se puede iniciar la aplicacion con el siguiente comando en linea de comandos posicionandose en el directorio raiz del proyecto:

mvn exec:java -Dexec.mainClass="ar.com.mercadolibre.mutants.MutantsApp"

API Url

URL local: http://localhost:4567

URL hosteada en Amazon: http://ec2-13-58-238-161.us-east-2.compute.amazonaws.com:4567

Servicios

Es mutante

Request:

Request body (caso ADN mutante):

  {"dna":["ATGCGA", "CAGGGC", "TTATGT", "AGAAGG", "CCCCTA", "TCACTG"]}

Response:

  200 OK

Request body (caso ADN humano):

  {"dna":["AATACT", "CCCAGA", "GGGATT", "AATTCC", "GGATCG", "TCACTG"]}

Response:

  403 Forbidden

Estadisticas

Request:

Response: 200 (application/json)

{
    count_mutant_dna: 4,
    count_human_dna: 1,
    ratio: 0.8
}

Test

Automaticos

Para la ejecucion de los test automaticos utilice jUnit.

Para poder probar los componentes de base de datos utilice una base de datos MongoDB embebida, esta se levanta durante el test y luego se destruye. De esta forma no necesito tener una instancia de base de datos levantada, ni hosteada en algun servidor.

Ademas me aseguro de que la base de datos siempre este consistente en cada ejecucion de los test.

Scripts

Cree dos shell scripts para invocar a la API en forma masiva (uno por servicio) y ver los tiempos de respuesta de cada invocacion. Los scripts utilizan el comando Unix parallel, en caso de ejecutar en entorno Mac OS se puede instalar el comando ejecutando en una terminal el siguiente comando:

brew install parallel

Para el servicio de verificacion de ADN, el script envia en el body de la peticion la secuencia de ADN que se encuentra en el archivo dna-mutant.json.

La cantidad de peticiones en paralelo que se quieren ejecutar se corresponde con el valor que se encuentra seguido del comando seq: seq 1000 | parallel....

Cobertura

Si bien la cobertura de codigo en la herramienta Codecov muestra un 70%, ejecutando los test localmente con la herramienta Jacoco nos da 78%.

coverage