Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3609 from mab68/generative-actions
Move unit, integration and generative tests to github from travis
- Loading branch information
Showing
60 changed files
with
312 additions
and
289 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,223 @@ | ||
name: Faucet on pull-request tests | ||
|
||
on: [push, pull_request] | ||
|
||
env: | ||
FAUCET_TEST_IMG: "faucet/tests" | ||
SHARDARGS: "--privileged --sysctl net.ipv6.conf.all.disable_ipv6=0 --ulimit core=99999999999:99999999999 -v /var/local/lib/docker:/var/lib/docker" | ||
FILES_CHANGED: "all" | ||
CODECHECK_PY_VER: 3.6 | ||
MATRIX_SHARDS: 10 | ||
|
||
jobs: | ||
|
||
unit-tests: | ||
name: Unit tests | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
python-version: [3.5, 3.6, 3.7, 3.8] | ||
steps: | ||
- name: Checkout source | ||
uses: actions/checkout@v2.3.1 | ||
- if: ${{ github.event.before != '0000000000000000000000000000000000000000' }} | ||
name: Get file changes | ||
id: file_changes | ||
uses: trilom/file-changes-action@v1.2.4 | ||
with: | ||
output: ' ' | ||
- if: ${{ steps.file_changes.outputs.files }} | ||
name: Compare file changes | ||
run: | | ||
FILES_CHANGED="${{ steps.file_changes.outputs.files }}" | ||
PY_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E ".py$" | tr '\n' ' ') | ||
RQ_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E "requirements(.*)txt$" | tr '\n' ' ') | ||
DOC_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E "docs/**" | tr '\n' ' ') | ||
echo "Files changed: ${FILES_CHANGED}" | ||
echo "Python code changed: ${PY_FILES_CHANGED}" | ||
echo "Requirement changes: ${RQ_FILES_CHANGED}" | ||
echo "Documentation changes: ${DOC_FILES_CHANGED}" | ||
echo ::set-env name=FILES_CHANGED::${FILES_CHANGED} | ||
echo ::set-env name=PY_FILES_CHANGED::${PY_FILES_CHANGED} | ||
echo ::set-env name=RQ_FILES_CHANGED::${RQ_FILES_CHANGED} | ||
echo ::set-env name=DOC_FILES_CHANGED::${DOC_FILES_CHANGED} | ||
- name: Set up python-${{ matrix.python-version }} | ||
uses: actions/setup-python@v2 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
- name: Install dependencies | ||
run: | | ||
./docker/pip_deps.sh | ||
pip3 install ./ | ||
pip3 show faucet | ||
- name: Running unit tests | ||
run: ./tests/run_unit_tests.sh || exit 1 | ||
- if: ${{ matrix.python-version == env.CODECHECK_PY_VER }} | ||
name: Upload codecov | ||
uses: codecov/codecov-action@v1.0.7 | ||
- if: ${{ env.FILES_CHANGED == 'all' || env.RQ_FILES_CHANGED || env.PY_FILES_CHANGED }} | ||
name: Pytype | ||
run: | | ||
cd ./tests/codecheck || exit 1 | ||
if [[ "${{ env.FILES_CHANGED }}" == "all" || ! -z "${{ env.RQ_FILES_CHANGED }}" ]]; then | ||
echo "Running pytype on everything" | ||
./pytype.sh || exit 1 | ||
else | ||
echo "Running pytype on ${{ env.PY_FILES_CHANGED }}" | ||
./pytype.sh ${{ env.PY_FILES_CHANGED }} || exit 1 | ||
fi | ||
codecheck: | ||
name: Code check | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout source | ||
uses: actions/checkout@v2.3.1 | ||
- if: ${{ github.event.before != '0000000000000000000000000000000000000000' }} | ||
name: Get file changes | ||
id: file_changes | ||
uses: trilom/file-changes-action@v1.2.4 | ||
with: | ||
output: ' ' | ||
- if: ${{ steps.file_changes.outputs.files }} | ||
name: Compare file changes | ||
run: | | ||
FILES_CHANGED="${{ steps.file_changes.outputs.files }}" | ||
PY_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E ".py$" | tr '\n' ' ') | ||
RQ_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E "requirements(.*)txt$" | tr '\n' ' ') | ||
DOC_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E "docs/**" | tr '\n' ' ') | ||
echo "Files changed: ${FILES_CHANGED}" | ||
echo "Python code changed: ${PY_FILES_CHANGED}" | ||
echo "Requirement changes: ${RQ_FILES_CHANGED}" | ||
echo "Documentation changes: ${DOC_FILES_CHANGED}" | ||
echo ::set-env name=FILES_CHANGED::${FILES_CHANGED} | ||
echo ::set-env name=PY_FILES_CHANGED::${PY_FILES_CHANGED} | ||
echo ::set-env name=RQ_FILES_CHANGED::${RQ_FILES_CHANGED} | ||
echo ::set-env name=DOC_FILES_CHANGED::${DOC_FILES_CHANGED} | ||
- name: Set up python-${{ env.CODECHECK_PY_VER }} | ||
uses: actions/setup-python@v2 | ||
with: | ||
python-version: ${{ env.CODECHECK_PY_VER }} | ||
- name: Install dependencies | ||
run: | | ||
./docker/pip_deps.sh | ||
- if: ${{ env.DOC_FILES_CHANGED }} | ||
name: Build docs | ||
run: | | ||
cd ./docs || exit 1 | ||
sudo apt-get install librsvg2-bin || exit 1 | ||
make html || exit 1 | ||
rm -rf _build | ||
- if: ${{ env.FILES_CHANGED == 'all' || env.PY_FILES_CHANGED }} | ||
name: Pylint | ||
run: | | ||
cd ./tests/codecheck || exit 1 | ||
./pylint.sh ${{ env.PY_FILES_CHANGED }} || exit 1 | ||
integration-tests: | ||
name: Integration tests | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
MATRIX_SHARD: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | ||
steps: | ||
- name: Checkout source | ||
uses: actions/checkout@v2.3.1 | ||
- if: ${{ github.event.before != '0000000000000000000000000000000000000000' }} | ||
name: Get file changes | ||
id: file_changes | ||
uses: trilom/file-changes-action@v1.2.4 | ||
with: | ||
output: ' ' | ||
- if: ${{ steps.file_changes.outputs.files }} | ||
name: Compare file changes | ||
run: | | ||
FILES_CHANGED="${{ steps.file_changes.outputs.files }}" | ||
PY_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E ".py$" | tr '\n' ' ') | ||
RQ_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E "requirements(.*)txt$" | tr '\n' ' ') | ||
DOC_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E "docs/**" | tr '\n' ' ') | ||
echo "Files changed: ${FILES_CHANGED}" | ||
echo "Python code changed: ${PY_FILES_CHANGED}" | ||
echo "Requirement changes: ${RQ_FILES_CHANGED}" | ||
echo "Documentation changes: ${DOC_FILES_CHANGED}" | ||
echo ::set-env name=FILES_CHANGED::${FILES_CHANGED} | ||
echo ::set-env name=PY_FILES_CHANGED::${PY_FILES_CHANGED} | ||
echo ::set-env name=RQ_FILES_CHANGED::${RQ_FILES_CHANGED} | ||
echo ::set-env name=DOC_FILES_CHANGED::${DOC_FILES_CHANGED} | ||
- if: ${{ env.FILES_CHANGED == 'all' || env.PY_FILES_CHANGED || env.RQ_FILES_CHANGED }} | ||
name: Shard out tests | ||
run: | | ||
ALLTESTFILES="tests/integration/mininet_tests.py tests/integration/mininet_multidp_tests.py clib/clib_mininet_tests.py" | ||
ALLTESTS=$(grep -E -o "^class (Faucet[a-zA-Z0-9]+Test)" ${ALLTESTFILES} | cut -f2 -d" " | sort) | ||
declare -A sharded | ||
function shard { | ||
work=$1 | ||
workers=$2 | ||
i=0 | ||
for shard in $work ; do | ||
i=$(( i % workers )) | ||
sharded[$i]="${sharded[$i]} $shard" | ||
i=$(( i + 1 )) | ||
done | ||
} | ||
shard "$ALLTESTS" ${{ env.MATRIX_SHARDS }} | ||
FAUCET_TESTS="-din ${sharded[${{ matrix.MATRIX_SHARD }}]}" | ||
echo ::set-env name=FAUCET_TESTS::${FAUCET_TESTS} | ||
- if: ${{ env.FAUCET_TESTS }} | ||
name: Build docker | ||
run: docker build --pull -t ${FAUCET_TEST_IMG} -f Dockerfile.tests . || exit 1 | ||
- if: ${{ env.FAUCET_TESTS }} | ||
name: Setup docker | ||
run: | | ||
ulimit -c unlimited | ||
echo '/var/tmp/core.%h.%e.%t' | sudo tee /proc/sys/kernel/core_pattern | ||
sudo modprobe openvswitch | ||
sudo modprobe ebtables | ||
- if: ${{ env.FAUCET_TESTS }} | ||
name: Run docker | ||
run: sudo docker run ${SHARDARGS} -v $HOME/.cache/pip:/var/tmp/pip-cache -e FAUCET_TESTS="${FAUCET_TESTS}" -t ${FAUCET_TEST_IMG} || exit 1 | ||
- name: Detect core dumps | ||
run: if [ ls -1 /var/tmp/core* > /dev/null 2>&1 ]; then exit 1; fi | ||
|
||
sanity-testing: | ||
name: Sanity tests | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout source | ||
uses: actions/checkout@v2.3.1 | ||
- if: ${{ github.event.before != '0000000000000000000000000000000000000000' }} | ||
name: Get file changes | ||
id: file_changes | ||
uses: trilom/file-changes-action@v1.2.4 | ||
with: | ||
output: ' ' | ||
- if: ${{ steps.file_changes.outputs.files }} | ||
name: Compare file changes | ||
run: | | ||
FILES_CHANGED="${{ steps.file_changes.outputs.files }}" | ||
PY_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E ".py$" | tr '\n' ' ') | ||
RQ_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E "requirements(.*)txt$" | tr '\n' ' ') | ||
DOC_FILES_CHANGED=$(echo "${{ steps.file_changes.outputs.files }}" | tr ' ' '\n' | grep -E "docs/**" | tr '\n' ' ') | ||
echo "Files changed: ${FILES_CHANGED}" | ||
echo "Python code changed: ${PY_FILES_CHANGED}" | ||
echo "Requirement changes: ${RQ_FILES_CHANGED}" | ||
echo "Documentation changes: ${DOC_FILES_CHANGED}" | ||
echo ::set-env name=FILES_CHANGED::${FILES_CHANGED} | ||
echo ::set-env name=PY_FILES_CHANGED::${PY_FILES_CHANGED} | ||
echo ::set-env name=RQ_FILES_CHANGED::${RQ_FILES_CHANGED} | ||
echo ::set-env name=DOC_FILES_CHANGED::${DOC_FILES_CHANGED} | ||
- if: ${{ env.FILES_CHANGED == 'all' || env.PY_FILES_CHANGED || env.RQ_FILES_CHANGED }} | ||
name: Setup docker test requirements | ||
run: | | ||
ulimit -c unlimited | ||
echo '/var/tmp/core.%h.%e.%t' | sudo tee /proc/sys/kernel/core_pattern | ||
sudo modprobe openvswitch | ||
sudo modprobe ebtables | ||
- if: ${{ env.FILES_CHANGED == 'all' || env.PY_FILES_CHANGED || env.RQ_FILES_CHANGED }} | ||
name: Build docker | ||
run: docker build --pull -t ${FAUCET_TEST_IMG} -f Dockerfile.tests . || exit 1 | ||
- if: ${{ env.FILES_CHANGED == 'all' || env.PY_FILES_CHANGED || env.RQ_FILES_CHANGED }} | ||
name: Run docker | ||
run: sudo docker run ${SHARDARGS} -v $HOME/.cache/pip:/var/tmp/pip-cache -e FAUCET_TESTS="-ni FaucetSanityTest FaucetStackStringOfDPUntaggedTest" -e HWTESTS="1" -t ${FAUCET_TEST_IMG} || exit 1 | ||
- name: Detect core dumps | ||
run: if [ ls -1 /var/tmp/core* > /dev/null 2>&1 ]; then exit 1; fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
name: Faucet scheduled tests | ||
|
||
on: | ||
schedule: | ||
# NZST = UTC + 12 | ||
# Schedule to run at midnight & lunch-time | ||
- cron: '0 0,12 * * *' | ||
|
||
env: | ||
FAUCET_TEST_IMG: "faucet/tests" | ||
SHARDARGS: "--privileged --sysctl net.ipv6.conf.all.disable_ipv6=0 --ulimit core=99999999999:99999999999 -v /var/local/lib/docker:/var/lib/docker" | ||
|
||
jobs: | ||
|
||
generative-testing: | ||
name: Generative tests | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
MATRIX_SHARD: [--generative_unit, --generative_integration] | ||
steps: | ||
- name: Checkout source | ||
uses: actions/checkout@v2.3.1 | ||
- name: Setup docker test requirements | ||
run: | | ||
ulimit -c unlimited | ||
echo '/var/tmp/core.%h.%e.%t' | sudo tee /proc/sys/kernel/core_pattern | ||
sudo modprobe openvswitch | ||
sudo modprobe ebtables | ||
- name: Build docker | ||
run: docker build --pull -t ${FAUCET_TEST_IMG} -f Dockerfile.tests . || exit 1 | ||
- name: Run docker | ||
run: sudo docker run ${SHARDARGS} -v $HOME/.cache/pip:/var/tmp/pip-cache -e FAUCET_TESTS="${{ matrix.MATRIX_SHARD }}" -t ${FAUCET_TEST_IMG} || exit 1 | ||
- name: Detect core dumps | ||
run: if [ ls -1 /var/tmp/core* > /dev/null 2>&1 ]; then exit 1; fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Oops, something went wrong.