Guía de testing automatizado para contribuciones a Bitcoin Core:


Introducción

En esta Guía de testing automatizado para contribuciones a Bitcoin Core encontrarás los pasos detallados para configurar tu entorno, escribir pruebas unitarias y funcionales, y integrarlas en el proceso de revisión continua. El objetivo es garantizar la calidad, detectar regresiones y facilitar la colaboración en el desarrollo de Bitcoin Core.

Configuración del entorno de testing

Requisitos previos

Sistema operativo: Linux o macOS (Ubuntu 20.04 , Debian 10 , macOS 10.15 ). Compilador: GCC ≥ 9.3 o Clang ≥ 10 con soporte C 17. Dependencias: OpenSSL, libevent, ZeroMQ (opcional para pruebas de RPC). Consulta la documentación oficial en build-unix.md. Python: Versión 3.8 para el framework de pruebas funcionales.

Compilación de Bitcoin Core con soporte de testing

Activa las opciones de prueba al configurar: ./autogen.sh ./configure –enable-debug –enable-functional-tests make La opción –enable-functional-tests habilita el directorio test/functional y sus dependencias Python.

Tipos de pruebas automatizadas

Pruebas unitarias (C )

Se ubican en src/test/ y usan el framework Boost.Test. Cada archivo de prueba termina con _tests.cpp.

Pruebas funcionales (Python)

Scripts ubicados en test/functional/ que arrancan nodos bitcoind, envían RPC y verifican comportamientos end-to-end.

Pruebas de integración RPC

Similan pruebas funcionales, pero enfocadas en llamadas específicas del JSON-RPC. Se pueden escribir en C o Python.

Estructura del directorio de tests

src/test/: Pruebas unitarias en C . test/functional/: Pruebas funcionales en Python. test/lint/: Scripts de lint para estilo de código.

Escribiendo tu primera prueba

Prueba unitaria en C

Ejemplo mínimo en src/test/foo_tests.cpp: #include ltboost/test/unit_test.hppgt BOOST_AUTO_TEST_SUITE(foo_tests) BOOST_AUTO_TEST_CASE(addition){ BOOST_CHECK_EQUAL(1 1, 2) } BOOST_AUTO_TEST_SUITE_END()

Prueba funcional en Python

Ejemplo en test/functional/foo_test.py: from test_framework.test_framework import BitcoinTestFramework class FooTest(BitcoinTestFramework): def set_test_params(self): self.num_nodes = 1 def run_test(self): balance = self.nodes[0].getbalance() assert(balance == 50) if __name__ == __main__: FooTest().main()

Ejecución de pruebas

Tests unitarios

Ejecuta todas las pruebas unitarias con: src/test/test_bitcoin

Tests funcionales

Arranca el conjunto completo: test/functional/test_runner.py O ejecuta un caso específico: test/functional/test_runner.py –tests foo_test

Integración continua (CI)

Bitcoin Core utiliza GitHub Actions y Travis CI. Cada PR activa un pipeline que incluye: Compilación con distintas configuraciones. Ejecución de pruebas unitarias y funcionales. Lint y chequeos de estilo. Consulta el archivo de configuración en .github/workflows/ci.yml.

Mejores prácticas y consejos

Atomicidad: Cada prueba debe verificar una única funcionalidad. Aislamiento: Evita dependencias entre tests para facilitar la paralelización. Documentación: Añade comentarios claros en casos complejos. Revisiones frecuentes: Ejecuta tests localmente antes de subir tu PR. Actualizaciones del framework: Mantente al día con cambios en test/functional revisando los commits del repositorio.

Recursos adicionales

src/test – Código de pruebas unitarias. test/functional – Framework de pruebas Python. Developer Testing – Documentación oficial en bitcoincore.org.

Leave a Reply

Your email address will not be published. Required fields are marked *