Тестування

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.

Оскільки документація VyOS призначена не лише для користувачів, а й для розробників, і ми не зберігаємо документацію в секреті, у цьому розділі описано, як працює автоматизоване тестування.

Дженкінс CI

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.

Ми розрізняємо два незалежні тести, які виконуються паралельно двома окремими екземплярами QEmu, які запускаються через make test і make testc зі сховища vyos-build.

Димові тести

Smoketests виконує попередньо визначені команди CLI VyOS і перевіряє, чи відображено потрібну конфігурацію демона/сервісу – тобто, як це сказати «коротко».

Коли образ ISO збирається VyOS CI, параметр BUILD_SMOKETEST вмикається за замовчуванням, що розширить рядок конфігурації ISO такими пакетами:

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.

Команда make test зі сховища vyos-build запустить новий екземпляр QEmu, а ISO-образ спочатку встановлюється на віртуальний жорсткий диск.

Після першого завантаження щойно встановленої системи виконується основний сценарій Smoketest, його можна знайти тут: /usr/bin/vyos-smoketest

Сценарій лише шукає виконувані "тестові випадки" в /usr/libexec/vyos/tests/smoke/cli/ і виконує їх один за іншим.

Примітка

Оскільки Smoketests змінить конфігурацію системи, а ви ввійшли в систему віддалено, ви можете втратити підключення до системи.

Примітка

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

Ручний запуск Smoketest

З іншого боку, оскільки кожен тест міститься в окремому файлі, можна завжди виконати один Smoketest вручну, просто запустивши тестові сценарії Python.

приклад:

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

Тести на основі інтерфейсу

Наші smoketests не лише перевіряють демони та сервери, а й перевіряють, чи працює те, що ми налаштували для інтерфейсу. Таким чином, існує загальний базовий клас під назвою: base_interfaces_test.py, який містить увесь загальний код, який підтримує і тестується інтерфейсом.

Ці загальні тести складаються з:

  • Додайте одну або кілька IP-адрес

  • Клієнт DHCP і делегування префікса DHCPv6

  • Розмір PERSON

  • Варіанти IP та IPv6

  • Опис порту

  • Вимкнути порт

  • VLAN (QinQ і звичайний 802.1q)

Примітка

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

Це обмежить тест інтерфейсу bond лише використанням eth1 і eth2 як членських портів.

Тести навантаження конфігурації

Інша частина наших тестів називається «навантажувальні тести конфігурації». Тести завантаження конфігурації завантажуватимуть — один за одним — довільні файли конфігурації, щоб перевірити, чи сценарії міграції конфігурації працюють належним чином і чи можна завантажити певний набір функціональних можливостей за допомогою свіжого ISO-образу VyOS.

Усі конфігурації походять від виробничих систем і можуть виступати не лише як тестовий приклад, але й як посилання, якщо потрібно ввімкнути певну функцію. Конфігурації можна знайти тут: https://github.com/vyos/vyos-1x/tree/current/smoketest/configs

Весь тест контролюється основним сценарієм оболонки /usr/bin/vyos-configtest, який поводиться так само, як і основний сценарій smoketest. Він сканує папку на наявність потенційних файлів конфігурації та видає команду load одну за одною.

Навантажувальний тест конфігурації вручну

Людина не зобов’язана завантажувати всі конфігурації одну за одною, але також може завантажувати окремі тестові конфігурації самостійно.

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#

Примітка

Деякі з конфігурацій мають попередні умови, які необхідно виконати. Вони, швидше за все, включають генерацію крипографічних ключів перед застосуванням конфігурації - інакше ви отримаєте помилку фіксації. Якщо вас цікавить, як виконуються ці попередні умови, перевірте репозиторій vyos-build і файл scripts/check-qemu-install.