Pruebas

One of the major advantages introduced in VyOS 1.3 is an automated test framework. When assembling an ISO image multiple things can go wrong badly and publishing a faulty ISO makes no sense. The user is disappointed by the quality of the image and the developers get flodded with bug reports over and over again.

Como la documentación de VyOS no es solo para los usuarios, sino también para los desarrolladores, y no guardamos documentación secreta, esta sección describe cómo funcionan las pruebas automatizadas.

CI de Jenkins

Our VyOS CI system is based on Jenkins and builds all our required packages for VyOS 1.2 to 1.4. In addition to the package build, there is the vyos-build Job which builds and tests the VyOS ISO image which is published after a successful test drive.

Nos diferenciamos en dos pruebas independientes, ambas ejecutadas en paralelo por dos instancias QEmu separadas que se inician a través de make test y make testc desde el repositorio vyos-build.

pruebas de humo

Smoketests ejecuta comandos predefinidos de la CLI de VyOS y verifica si la configuración deseada del demonio/servicio está renderizada, así es como decirlo "brevemente".

Cuando VyOS CI ensambla una imagen ISO, el parámetro BUILD_SMOKETEST está habilitado de manera predeterminada, lo que extenderá la línea de configuración ISO con los siguientes paquetes:

def CUSTOM_PACKAGES = ''
  if (params.BUILD_SMOKETESTS)
    CUSTOM_PACKAGES = '--custom-package vyos-1x-smoketest'

So if you plan to build your own custom ISO image and want to make use of our smoketests, ensure that you have the vyos-1x-smoketest package installed.

El comando make test del repositorio vyos-build lanzará una nueva instancia de QEmu y la imagen ISO se instalará primero en el disco duro virtual.

Después de su primer arranque en el sistema recién instalado, se ejecuta el script principal de Smoketest, se puede encontrar aquí: /usr/bin/vyos-smoketest

El script solo busca "casos de prueba" ejecutables en /usr/libexec/vyos/tests/smoke/cli/ y los ejecuta uno por uno.

Nota

Como Smoketests alterará la configuración del sistema y usted está conectado de forma remota, puede perder su conexión con el sistema.

Nota

To enable smoketest debugging (print of the CLI set commands used) you can run: touch /tmp/vyos.smoketest.debug.

Ejecución manual de prueba de humo

Por otro lado, como cada prueba está contenida en su propio archivo, siempre se puede ejecutar una sola prueba de humo a mano simplemente ejecutando los scripts de prueba de Python.

Ejemplo:

vyos@vyos:~$ /usr/libexec/vyos/tests/smoke/cli/test_protocols_bgp.py
test_bgp_01_simple (__main__.TestProtocolsBGP) ... ok
test_bgp_02_neighbors (__main__.TestProtocolsBGP) ... ok
test_bgp_03_peer_groups (__main__.TestProtocolsBGP) ... ok
test_bgp_04_afi_ipv4 (__main__.TestProtocolsBGP) ... ok
test_bgp_05_afi_ipv6 (__main__.TestProtocolsBGP) ... ok
test_bgp_06_listen_range (__main__.TestProtocolsBGP) ... ok
test_bgp_07_l2vpn_evpn (__main__.TestProtocolsBGP) ... ok
test_bgp_08_zebra_route_map (__main__.TestProtocolsBGP) ... ok
test_bgp_09_distance_and_flowspec (__main__.TestProtocolsBGP) ... ok
test_bgp_10_vrf_simple (__main__.TestProtocolsBGP) ... ok
test_bgp_11_confederation (__main__.TestProtocolsBGP) ... ok
test_bgp_12_v6_link_local (__main__.TestProtocolsBGP) ... ok
test_bgp_13_solo (__main__.TestProtocolsBGP) ... ok

----------------------------------------------------------------------
Ran 13 tests in 348.191s

OK

Pruebas basadas en interfaz

Nuestras pruebas de humo no solo prueban demonios y servicios, sino que también verifican si lo que configuramos para una interfaz funciona. Por lo tanto, existe una base común clasificada denominada: base_interfaces_test.py que contiene todo el código común que admite una interfaz y se prueba.

Esas pruebas comunes consisten en:

  • Agregar una o más direcciones IP

  • Cliente DHCP y delegación de prefijos DHCPv6

  • Tamaño de la PERSONA

  • Opciones de IP e IPv6

  • Descripción del puerto

  • Deshabilitar puerto

  • VLAN (QinQ y 802.1q regular)

Nota

When you are working on interface configuration and you also want to test if the Smoketests pass you would normally loose the remote SSH connection to your DUT. To handle this issue, some of the interface based tests can be called with an environment variable beforehand to limit the number of interfaces used in the test. By default all interface e.g. all Ethernet interfaces are used.

vyos@vyos:~$ TEST_ETH="eth1 eth2" /usr/libexec/vyos/tests/smoke/cli/test_interfaces_bonding.py
test_add_multiple_ip_addresses (__main__.BondingInterfaceTest) ... ok
test_add_single_ip_address (__main__.BondingInterfaceTest) ... ok
test_bonding_hash_policy (__main__.BondingInterfaceTest) ... ok
test_bonding_lacp_rate (__main__.BondingInterfaceTest) ... ok
test_bonding_min_links (__main__.BondingInterfaceTest) ... ok
test_bonding_remove_member (__main__.BondingInterfaceTest) ... ok
test_dhcpv6_client_options (__main__.BondingInterfaceTest) ... ok
test_dhcpv6pd_auto_sla_id (__main__.BondingInterfaceTest) ... ok
test_dhcpv6pd_manual_sla_id (__main__.BondingInterfaceTest) ... ok
test_interface_description (__main__.BondingInterfaceTest) ... ok
test_interface_disable (__main__.BondingInterfaceTest) ... ok
test_interface_ip_options (__main__.BondingInterfaceTest) ... ok
test_interface_ipv6_options (__main__.BondingInterfaceTest) ... ok
test_interface_mtu (__main__.BondingInterfaceTest) ... ok
test_ipv6_link_local_address (__main__.BondingInterfaceTest) ... ok
test_mtu_1200_no_ipv6_interface (__main__.BondingInterfaceTest) ... ok
test_span_mirror (__main__.BondingInterfaceTest) ... ok
test_vif_8021q_interfaces (__main__.BondingInterfaceTest) ... ok
test_vif_8021q_lower_up_down (__main__.BondingInterfaceTest) ... ok
test_vif_8021q_mtu_limits (__main__.BondingInterfaceTest) ... ok
test_vif_8021q_qos_change (__main__.BondingInterfaceTest) ... ok
test_vif_s_8021ad_vlan_interfaces (__main__.BondingInterfaceTest) ... ok
test_vif_s_protocol_change (__main__.BondingInterfaceTest) ... ok

----------------------------------------------------------------------
Ran 23 tests in 244.694s

OK

Esto limitará la prueba de interfaz bond para usar solo eth1 y eth2 como puertos miembro.

Pruebas de carga de configuración

La otra parte de nuestras pruebas se llama "pruebas de carga de configuración". Las pruebas de carga de configuración cargarán, uno tras otro, archivos de configuración arbitrarios para probar si los scripts de migración de configuración funcionan según lo diseñado y si un conjunto determinado de funcionalidad aún se puede cargar con una nueva imagen ISO de VyOS.

Todas las configuraciones se derivan de los sistemas de producción y no solo pueden actuar como un caso de prueba, sino también como referencia si se desea habilitar una característica determinada. Las configuraciones se pueden encontrar aquí: https://github.com/vyos/vyos-1x/tree/current/smoketest/configs

Toda la prueba está controlada por la secuencia de comandos contenedora principal /usr/bin/vyos-configtest que se comporta de la misma manera que la secuencia de comandos principal de smoketest. Escanea la carpeta en busca de posibles archivos de configuración y emite un comando de cargar uno tras otro.

Prueba de carga de configuración manual

Uno no está obligado a cargar todas las configuraciones una tras otra, sino que también puede cargar configuraciones de prueba individuales por su cuenta.

vyos@vyos:~$ configure
load[edit]

vyos@vyos# load /usr/libexec/vyos/tests/config/ospf-small
Loading configuration from '/usr/libexec/vyos/tests/config/ospf-small'
Load complete. Use 'commit' to make changes effective.
[edit]
vyos@vyos# compare
[edit interfaces ethernet eth0]
-hw-id 00:50:56:bf:c5:6d
[edit interfaces ethernet eth1]
+duplex auto
-hw-id 00:50:56:b3:38:c5
+speed auto
[edit interfaces]
-ethernet eth2 {
-    hw-id 00:50:56:b3:9c:1d
-}
-vti vti1 {
-    address 192.0.2.1/30
-}
...

vyos@vyos# commit
vyos@vyos#

Nota

Algunas de las configuraciones tienen condiciones previas que deben cumplirse. Lo más probable es que incluyan la generación de claves criptográficas antes de que se pueda aplicar la configuración; de lo contrario, obtendrá un error de confirmación. Si está interesado en cómo se cumplen esas condiciones previas, consulte el repositorio vyos-build y el archivo scripts/check-qemu-install.