
The core idea was to take a lot of the stuff from the C unity framework and adapt it a bit here. Each file in the `unit` directory that starts with `test_` is automatically assumed to be a test suite. Within each file, all functions that start with `test_` are assumed to be a test. See unit/README.md for details about the implementation. Instead of compiling basically a net new binary, the way the tests are compiled is that the main valkey server is compiled as a static archive, which we then compile the individual test files against to create a new test executable. This is not all that important now, other than it makes the compilation simpler, but what it will allow us to do is overwrite functions in the archive to enable mocking for cross compilation unit functions. There are also ways to enable mocking from within the same compilation unit, but I don't know how important this is. Tests are also written in one of two styles: 1. Including the header file and directly calling functions from the archive. 2. Importing the original file, and then calling the functions. This second approach is cool because we can call static functions. It won't mess up the archive either. --------- Signed-off-by: Madelyn Olson <madelyneolson@gmail.com>
97 lines
2.6 KiB
YAML
97 lines
2.6 KiB
YAML
name: CI
|
|
|
|
on: [push, pull_request]
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
|
|
test-ubuntu-latest:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: make
|
|
# Fail build if there are warnings
|
|
# build with TLS just for compilation coverage
|
|
run: make all-with-unit-tests SERVER_CFLAGS='-Werror' BUILD_TLS=yes
|
|
- name: test
|
|
run: |
|
|
sudo apt-get install tcl8.6 tclx
|
|
./runtest --verbose --tags -slow --dump-logs
|
|
- name: module api test
|
|
run: CFLAGS='-Werror' ./runtest-moduleapi --verbose --dump-logs
|
|
- name: validate commands.def up to date
|
|
run: |
|
|
touch src/commands/ping.json
|
|
make commands.def
|
|
dirty=$(git diff)
|
|
if [[ ! -z $dirty ]]; then echo $dirty; exit 1; fi
|
|
- name: unit tests
|
|
run: |
|
|
./src/valkey-unit-tests
|
|
|
|
test-sanitizer-address:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: make
|
|
# build with TLS module just for compilation coverage
|
|
run: make SANITIZER=address SERVER_CFLAGS='-Werror -DDEBUG_ASSERTIONS' BUILD_TLS=module
|
|
- name: testprep
|
|
# Work around ASAN issue, see https://github.com/google/sanitizers/issues/1716
|
|
run: |
|
|
sudo apt-get install tcl8.6 tclx -y
|
|
sudo sysctl vm.mmap_rnd_bits=28
|
|
- name: test
|
|
run: ./runtest --verbose --tags -slow --dump-logs
|
|
- name: module api test
|
|
run: CFLAGS='-Werror' ./runtest-moduleapi --verbose --dump-logs
|
|
|
|
build-debian-old:
|
|
runs-on: ubuntu-latest
|
|
container: debian:buster
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: make
|
|
run: |
|
|
apt-get update && apt-get install -y build-essential
|
|
make SERVER_CFLAGS='-Werror'
|
|
|
|
build-macos-latest:
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: make
|
|
run: make SERVER_CFLAGS='-Werror'
|
|
|
|
build-32bit:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: make
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install libc6-dev-i386
|
|
make SERVER_CFLAGS='-Werror' 32bit
|
|
|
|
build-libc-malloc:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: make
|
|
run: make SERVER_CFLAGS='-Werror' MALLOC=libc
|
|
|
|
build-centos7-jemalloc:
|
|
runs-on: ubuntu-latest
|
|
container: centos:7
|
|
steps:
|
|
# on centos7, actions/checkout@v4 does not work, so we use v3
|
|
# ref. https://github.com/actions/checkout/issues/1487
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: make
|
|
run: |
|
|
yum -y install gcc make
|
|
make SERVER_CFLAGS='-Werror'
|
|
|