Saltar al contenido principal

Pruebas locales

Requisitos Previos

  • Python: Verificar tener Python instalado en tu sistema.

  • Docker: Verificar tener Docker instalado en tu sistema.

  • Postman: Verificar tener Postman instalado en tu sistema.

  • Dependencias: Instalar dependencias necesarias ejecutando:

    python -m venv [nombre_entorno | venv]
    [nombre_entorno | venv]\Scripts\activate
    pip install -r requirements.txt
    pip list
  • Archivo .env: Crea un archivo .env en el directorio raiz del proyecto con las siguientes variables:

     ENV=local
    LOG_LEVEL=debug
    SILS_ENV=local

    DB_HOST=sils_mysql_host
    DB_PORT=sils_mysql_port
    DB_NAME=sils_mysql_dbname
    DB_USER=sils_mysql_dbuser
    DB_PASSWORD=sils_mysql_dbpassword

    PROJECT_ID=dev
    BQ_DATASET=test_dataset
    BQ_ENDPOINT="http://localhost:9050/"

    QUEUE_LOCATION=here
    QUEUE_NAME=anotherq
    MIGRATION_TASK_PROCESSOR_URL="http://localhost:8081/"
    CLOUD_TASKS_EMULATOR_HOST="localhost:8123"
    INSTANCE_UNIX_SOCKET=instancia_cloudsql_sils_des_sql

    REDIS_HOST=127.0.0.1
    REDIS_PORT=6379

Ejecución del Script con functions-framework

  1. Crear un archivo docker-compose.yml en el directorio raiz del proyecto con el contenido:

    services:
    db:
    image: mysql:latest
    container_name: mysql_container
    environment:
    MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
    MYSQL_DATABASE: ${DB_NAME}
    ports:
    - "${DB_PORT}:3306"
    volumes:
    - db_data:/var/lib/mysql
    networks:
    - app_network

    bigquery:
    image: ghcr.io/goccy/bigquery-emulator:latest
    container_name: bigquery_emulator
    command: ["--project=dev"]
    ports:
    - "9050:9050" # Puerto HTTP para consultas
    - "9060:9060" # Puerto gRPC (opcional)
    volumes:
    - bigquery_data:/data
    networks:
    - app_network

    redis:
    image: redis:latest
    container_name: redis_container
    ports:
    - "${REDIS_PORT}:6379"
    restart: always
    networks:
    - app_network

    volumes:
    db_data:
    bigquery_data:

    networks:
    app_network:
    driver: bridge
  2. Levantar el contenedor de Docker con bases de datos de prueba:

    docker-compose up --build -d
  3. En caso de querer eliminar el contenedor:

    docker-compose down -v
  4. Revisar Logs de BigQuery:

    docker-compose logs -f bigquery
  5. Crear un dataset en BigQuery para la base de datos de prueba mediante Postman:

    POST http://localhost:9050/projects/test/datasets
    Content-Type: application/json
    Body:
    {
    "datasetReference": {
    "datasetId": "test_dataset"
    }
    }
  6. Ejecutar servidor de functions-framework para la función migrate_mysql_to_bigquery, ademas correr servicio local de Cloud Tasks:

    functions-framework --target=migrate_mysql_to_bigquery --port=8080 --debug
    go run ./ -host localhost -port 8123 -queue projects/dev/locations/here/queues/anotherq
  7. Probar la función migrate_mysql_to_bigquery enviando por medio de peticion HTTP POST de Postman a la URL http://localhost:8080 con el body de la petición en formato Pub/Sub codificando el JSON en base64 y enviándolo por data:

    {
    "years_to_migrate": 1,
    "months_to_migrate": 6,
    "source_tables": ["infracciones", "incidentesHistoricos"],
    "destination_tables": ["historico_infracciones", "historico_incidentes"],
    "tasks_enqueued_limit": 20,
    "filter_columns": ["fechaGPS", "fechaGPS"]
    }
    {
    "specversion": "1.0",
    "type": "google.cloud.pubsub.topic.v1.messagePublished",
    "source": "//pubsub.googleapis.com/projects/YOUR_PROJECT/topics/YOUR_TOPIC",
    "id": "test-123",
    "time": "2024-03-18T12:34:56.789Z",
    "datacontenttype": "application/json",
    "data": {
    "message": {
    "data": "eyJ5ZWFyc190b19taWdyYXRlIjoxLCJtb250aHNfdG9fbWlncmF0ZSI6Niwic291cmNlX3RhYmxlcyI6WyJpbmZyYWNjaW9uZXMiLCJpbmNpZGVudGVzSGlzdG9yaWNvcyJdLCJkZXN0aW5hdGlvbl90YWJsZXMiOlsiaGlzdG9yaWNvX2luZnJhY2Npb25lcyIsImhpc3Rvcmljb19pbmNpZGVudGVzIl0sInRhc2tzX2VucXVldWVkX2xpbWl0IjoyMCwiZmlsdGVyX2NvbHVtbnMiOlsiZmVjaGFHUFMiLCJmZWNoYUdQUyJdfQ=="
    }
    }
    }
  8. Comprobar correcta creación de tablas en BigQuery mediante Postman:

    GET http://localhost:9050/projects/test/datasets/test_dataset/tables