Skip to content

Commit

Permalink
Add github workflow for basic unit tests (#87)
Browse files Browse the repository at this point in the history
Add github workflow for basic unit tests

authored-by: James Bensley <[email protected]>
  • Loading branch information
jwbensley authored Apr 6, 2023
1 parent 8883f13 commit d14db95
Show file tree
Hide file tree
Showing 45 changed files with 299 additions and 0 deletions.
36 changes: 36 additions & 0 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: basic unit tests

on:
pull_request:
types:
- opened
- edited
- reopened
- ready_for_review
- synchronize

jobs:
output-unit-tests:
name: output unit tests
runs-on: ubuntu-22.04
steps:
- name: clone repo
uses: actions/checkout@v3
- name: install pre-reqs
run: |
sudo apt-get update
DEBIAN_FRONTEND=noninteractive sudo apt-get -y --no-install-recommends install autoconf automake libtool make
- name: build bgpq4
run: |
./bootstrap
./configure
make
./bgpq4 -v
- name: generate output
run: ./tests/generate_outputs.sh ./bgpq4 /tmp
- name: check output
run: >
for file in tests/reference/*.txt;
do
echo "$(sha256sum "${file}" | awk '{print $1}') /tmp/$(basename "${file}")" | sha256sum --check;
done
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -479,6 +479,12 @@ generates access-list to standard output and exits with status == 0.
In case of errors they are printed to stderr and the program exits with
non-zero status.

# TESTS

The [tests/](tests/) folder contains reference output data in [text files](tests/reference/). The [generate_outputs.sh](tests/generate_outputs.sh) script is used in the [Github workflow](.github/workflows/unit-tests.yml) to generate the same output data, using the latest commit, and compare the output data to the stored "known-good" reference data, and check there are no changes.

To update the reference data (i.e. if the bgpq4 output is modified), simply run the script again (`./tests/generate_outputs.sh ./bgpq4 tests/reference`) and commit the changes.

# AUTHORS

Alexandre Snarskii, Christian David, Claudio Jeker, Job Snijders,
Expand Down
88 changes: 88 additions & 0 deletions tests/generate_outputs.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#!/bin/bash

set -e

if [ $# -ne 2 ]
then
echo "Usage: pass the following arguments in order:"
echo ""
echo "path to bgpq4 binary"
echo "output directory path"
echo ""
echo "${0} ./bgpq4 /tmp"
exit 1
fi

BGPQ4_PATH="${1}"
TEST_ASN="112"
TEST_AS_SET="AS-AS112"
OUT_DIR="${2}"

if [ ! -f "${BGPQ4_PATH}" ]
then
echo "File ${BGPQ4_PATH} does't exist"
exit 1
fi

if [ ! -e "${OUT_DIR}" ]
then
echo "Output directory ${OUT_DIR} does't exist"
exit 1
fi

# Test the IPv4 output formatting for each supported NOS:
"${BGPQ4_PATH}" -4 -b "AS${TEST_ASN}" > "${OUT_DIR}/bird--4.txt"
"${BGPQ4_PATH}" -4 -e "AS${TEST_ASN}" > "${OUT_DIR}/eos--4.txt"
"${BGPQ4_PATH}" -4 -F '%n/%l ' "AS${TEST_ASN}" > "${OUT_DIR}/formated--4.txt"
"${BGPQ4_PATH}" -4 -U "AS${TEST_ASN}" > "${OUT_DIR}/huawei--4.txt"
"${BGPQ4_PATH}" -4 -u "AS${TEST_ASN}" > "${OUT_DIR}/huawei-xpl--4.txt"
"${BGPQ4_PATH}" -4 "AS${TEST_ASN}" > "${OUT_DIR}/ios--4.txt"
"${BGPQ4_PATH}" -4 -X "AS${TEST_ASN}" > "${OUT_DIR}/ios-xr--4.txt"
"${BGPQ4_PATH}" -4 -j "AS${TEST_ASN}" > "${OUT_DIR}/json--4.txt"
"${BGPQ4_PATH}" -4 -J "AS${TEST_ASN}" > "${OUT_DIR}/junos--4.txt"
"${BGPQ4_PATH}" -4 -B "AS${TEST_ASN}" > "${OUT_DIR}/openbgpd--4.txt"
"${BGPQ4_PATH}" -4 -K "AS${TEST_ASN}" > "${OUT_DIR}/routeros6--4.txt"
"${BGPQ4_PATH}" -4 -K7 "AS${TEST_ASN}" > "${OUT_DIR}/routeros7--4.txt"
"${BGPQ4_PATH}" -4 -N "AS${TEST_ASN}" > "${OUT_DIR}/sros--4.txt"
"${BGPQ4_PATH}" -4 -n "AS${TEST_ASN}" > "${OUT_DIR}/sros-mdcli--4.txt"

# Test the IPv6 prefix-list output formatting for each supported NOS:
"${BGPQ4_PATH}" -6 -b "AS${TEST_ASN}" > "${OUT_DIR}/bird--6.txt"
"${BGPQ4_PATH}" -6 -e "AS${TEST_ASN}" > "${OUT_DIR}/eos--6.txt"
"${BGPQ4_PATH}" -6 -F '%n/%l ' "AS${TEST_ASN}" > "${OUT_DIR}/formated--6.txt"
"${BGPQ4_PATH}" -6 -U "AS${TEST_ASN}" > "${OUT_DIR}/huawei--6.txt"
"${BGPQ4_PATH}" -6 -u "AS${TEST_ASN}" > "${OUT_DIR}/huawei-xpl--6.txt"
"${BGPQ4_PATH}" -6 "AS${TEST_ASN}" > "${OUT_DIR}/ios--6.txt"
"${BGPQ4_PATH}" -6 -X "AS${TEST_ASN}" > "${OUT_DIR}/ios-xr--6.txt"
"${BGPQ4_PATH}" -6 -j "AS${TEST_ASN}" > "${OUT_DIR}/json--6.txt"
"${BGPQ4_PATH}" -6 -J "AS${TEST_ASN}" > "${OUT_DIR}/junos--6.txt"
"${BGPQ4_PATH}" -6 -B "AS${TEST_ASN}" > "${OUT_DIR}/openbgpd--6.txt"
"${BGPQ4_PATH}" -6 -K "AS${TEST_ASN}" > "${OUT_DIR}/routeros6--6.txt"
"${BGPQ4_PATH}" -6 -K7 "AS${TEST_ASN}" > "${OUT_DIR}/routeros7--6.txt"
"${BGPQ4_PATH}" -6 -N "AS${TEST_ASN}" > "${OUT_DIR}/sros--6.txt"
"${BGPQ4_PATH}" -6 -n "AS${TEST_ASN}" > "${OUT_DIR}/sros-mdcli--6.txt"

# Test the AS path list output formatting for each supported NOS:
"${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -b > "${OUT_DIR}/bird--asp.txt"
# "${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -e > "${OUT_DIR}/eos--asp.txt" # Not supported
"${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -U > "${OUT_DIR}/huawei--asp.txt"
"${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -u > "${OUT_DIR}/huawei-xpl--asp.txt"
"${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" > "${OUT_DIR}/ios--asp.txt"
"${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -X > "${OUT_DIR}/ios-xr--asp.txt"
"${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -j > "${OUT_DIR}/json--asp.txt"
"${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -J > "${OUT_DIR}/junos--asp.txt"
"${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -B > "${OUT_DIR}/openbgpd--asp.txt"
# "${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -K > "${OUT_DIR}/routeros6--asp.txt" # Not supported
# "${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -K7 > "${OUT_DIR}/routeros7--asp.txt" # Not supported
"${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -N > "${OUT_DIR}/sros--asp.txt"
"${BGPQ4_PATH}" "${TEST_AS_SET}" -f "${TEST_ASN}" -n > "${OUT_DIR}/sros-mdcli--asp.txt"

# Test IRR source scopes
# Limit ASN to valid source:
"${BGPQ4_PATH}" "AS${TEST_ASN}" -S RIPE-NONAUTH > "${OUT_DIR}/as112-ripe-nonauth.txt"
# Limit ASN to invalid sources:
"${BGPQ4_PATH}" "AS${TEST_ASN}" -S APNIC,AFRINIC > "${OUT_DIR}/as112-apnic.txt"
# Limit AS-SET using IRR prefix notation to valid source:
"${BGPQ4_PATH}" "RIPE::${TEST_AS_SET}" > "${OUT_DIR}/as-as112-ripe-notation.txt"
# Limit AS-SET using IRR prefix notation to invalid source:
"${BGPQ4_PATH}" "APNIC::${TEST_AS_SET}" > "${OUT_DIR}/as-as112-apnic-notation.txt"
3 changes: 3 additions & 0 deletions tests/reference/as-as112-apnic-notation.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
no ip prefix-list NN
! generated prefix-list NN is empty
ip prefix-list NN deny 0.0.0.0/0
3 changes: 3 additions & 0 deletions tests/reference/as-as112-ripe-notation.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
no ip prefix-list NN
ip prefix-list NN permit 192.31.196.0/24
ip prefix-list NN permit 192.175.48.0/24
3 changes: 3 additions & 0 deletions tests/reference/as112-apnic.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
no ip prefix-list NN
! generated prefix-list NN is empty
ip prefix-list NN deny 0.0.0.0/0
3 changes: 3 additions & 0 deletions tests/reference/as112-ripe-nonauth.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
no ip prefix-list NN
ip prefix-list NN permit 192.31.196.0/24
ip prefix-list NN permit 192.175.48.0/24
4 changes: 4 additions & 0 deletions tests/reference/bird--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
NN = [
192.31.196.0/24,
192.175.48.0/24
];
4 changes: 4 additions & 0 deletions tests/reference/bird--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
NN = [
2001:4:112::/48,
2620:4f:8000::/48
];
3 changes: 3 additions & 0 deletions tests/reference/bird--asp.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
NN = [
112
];
4 changes: 4 additions & 0 deletions tests/reference/eos--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
no ip prefix-list NN
ip prefix-list NN
seq 1 permit 192.31.196.0/24
seq 2 permit 192.175.48.0/24
4 changes: 4 additions & 0 deletions tests/reference/eos--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
no ipv6 prefix-list NN
ipv6 prefix-list NN
seq 1 permit 2001:4:112::/48
seq 2 permit 2620:4f:8000::/48
1 change: 1 addition & 0 deletions tests/reference/formated--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
192.31.196.0/24 192.175.48.0/24
1 change: 1 addition & 0 deletions tests/reference/formated--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2001:4:112::/48 2620:4f:8000::/48
3 changes: 3 additions & 0 deletions tests/reference/huawei--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
undo ip ip-prefix NN
ip ip-prefix NN permit 192.31.196.0 24
ip ip-prefix NN permit 192.175.48.0 24
3 changes: 3 additions & 0 deletions tests/reference/huawei--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
undo ip ipv6-prefix NN
ip ipv6-prefix NN permit 2001:4:112:: 48
ip ipv6-prefix NN permit 2620:4f:8000:: 48
2 changes: 2 additions & 0 deletions tests/reference/huawei--asp.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
undo ip as-path-filter NN
ip as-path-filter NN permit ^112(_112)*$
5 changes: 5 additions & 0 deletions tests/reference/huawei-xpl--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
no xpl ip-prefix-list NN
xpl ip-prefix-list NN
192.31.196.0 24,
192.175.48.0 24
end-list
5 changes: 5 additions & 0 deletions tests/reference/huawei-xpl--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
no xpl ipv6-prefix-list NN
xpl ipv6-prefix-list NN
2001:4:112:: 48,
2620:4f:8000:: 48
end-list
3 changes: 3 additions & 0 deletions tests/reference/huawei-xpl--asp.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
xpl as-path-list NN
regular ^112(_112)*$
end-list
3 changes: 3 additions & 0 deletions tests/reference/ios--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
no ip prefix-list NN
ip prefix-list NN permit 192.31.196.0/24
ip prefix-list NN permit 192.175.48.0/24
3 changes: 3 additions & 0 deletions tests/reference/ios--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
no ipv6 prefix-list NN
ipv6 prefix-list NN permit 2001:4:112::/48
ipv6 prefix-list NN permit 2620:4f:8000::/48
2 changes: 2 additions & 0 deletions tests/reference/ios--asp.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
no ip as-path access-list NN
ip as-path access-list NN permit ^112(_112)*$
5 changes: 5 additions & 0 deletions tests/reference/ios-xr--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
no prefix-set NN
prefix-set NN
192.31.196.0/24,
192.175.48.0/24
end-set
5 changes: 5 additions & 0 deletions tests/reference/ios-xr--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
no prefix-set NN
prefix-set NN
2001:4:112::/48,
2620:4f:8000::/48
end-set
3 changes: 3 additions & 0 deletions tests/reference/ios-xr--asp.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
as-path-set NN
ios-regex '^112(_112)*$'
end-set
4 changes: 4 additions & 0 deletions tests/reference/json--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{ "NN": [
{ "prefix": "192.31.196.0\/24", "exact": true },
{ "prefix": "192.175.48.0\/24", "exact": true }
] }
4 changes: 4 additions & 0 deletions tests/reference/json--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{ "NN": [
{ "prefix": "2001:4:112::\/48", "exact": true },
{ "prefix": "2620:4f:8000::\/48", "exact": true }
] }
3 changes: 3 additions & 0 deletions tests/reference/json--asp.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{"NN": [
112
]}
7 changes: 7 additions & 0 deletions tests/reference/junos--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
policy-options {
replace:
prefix-list NN {
192.31.196.0/24;
192.175.48.0/24;
}
}
7 changes: 7 additions & 0 deletions tests/reference/junos--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
policy-options {
replace:
prefix-list NN {
2001:4:112::/48;
2620:4f:8000::/48;
}
}
6 changes: 6 additions & 0 deletions tests/reference/junos--asp.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
policy-options {
replace:
as-path-group NN {
as-path a0 "^112(112)*$";
}
}
4 changes: 4 additions & 0 deletions tests/reference/openbgpd--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
prefix {
192.31.196.0/24
192.175.48.0/24
}
4 changes: 4 additions & 0 deletions tests/reference/openbgpd--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
prefix {
2001:4:112::/48
2620:4f:8000::/48
}
1 change: 1 addition & 0 deletions tests/reference/openbgpd--asp.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
allow from AS 112 AS 112
2 changes: 2 additions & 0 deletions tests/reference/routeros6--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/routing filter add action=accept chain="NN-V4" prefix=192.31.196.0/24
/routing filter add action=accept chain="NN-V4" prefix=192.175.48.0/24
2 changes: 2 additions & 0 deletions tests/reference/routeros6--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/routing filter add action=accept chain="NN-V6" prefix=2001:4:112::/48
/routing filter add action=accept chain="NN-V6" prefix=2620:4f:8000::/48
2 changes: 2 additions & 0 deletions tests/reference/routeros7--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/routing filter rule add chain="NN-V4" rule="if (dst=192.31.196.0/24) {accept}"
/routing filter rule add chain="NN-V4" rule="if (dst=192.175.48.0/24) {accept}"
2 changes: 2 additions & 0 deletions tests/reference/routeros7--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/routing filter rule add chain="NN-V6" rule="if (dst=2001:4:112::/48) {accept}"
/routing filter rule add chain="NN-V6" rule="if (dst=2620:4f:8000::/48) {accept}"
8 changes: 8 additions & 0 deletions tests/reference/sros--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
configure router policy-options
begin
no prefix-list "NN"
prefix-list "NN"
prefix 192.31.196.0/24 exact
prefix 192.175.48.0/24 exact
exit
commit
8 changes: 8 additions & 0 deletions tests/reference/sros--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
configure router policy-options
begin
no prefix-list "NN"
prefix-list "NN"
prefix 2001:4:112::/48 exact
prefix 2620:4f:8000::/48 exact
exit
commit
7 changes: 7 additions & 0 deletions tests/reference/sros--asp.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
configure router policy-options
begin
no as-path-group "NN"
as-path-group "NN"
entry 1 expression "112+"
exit
commit
8 changes: 8 additions & 0 deletions tests/reference/sros-mdcli--4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/configure policy-options
delete prefix-list "NN"
prefix-list "NN" {
prefix 192.31.196.0/24 type exact {
}
prefix 192.175.48.0/24 type exact {
}
}
8 changes: 8 additions & 0 deletions tests/reference/sros-mdcli--6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/configure policy-options
delete prefix-list "NN"
prefix-list "NN" {
prefix 2001:4:112::/48 type exact {
}
prefix 2620:4f:8000::/48 type exact {
}
}
7 changes: 7 additions & 0 deletions tests/reference/sros-mdcli--asp.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/configure policy-options
delete as-path-group "NN"
as-path-group "NN" {
entry 1 {
expression "112+"
}
}

0 comments on commit d14db95

Please sign in to comment.