diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index 1e860cd..3e6b74f 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -6,7 +6,7 @@ labels: platform: ${platform} steps: - build-berkeley: + build: when: event: [push] image: alpine:latest @@ -16,4 +16,14 @@ steps: - meson setup --reconfigure build - ninja -C build + test: + when: + event: [push] + image: alpine:latest + commands: + - apk update + - apk add --no-cache bash build-base gdb perl sodium sodium-dev jansson jansson-dev db db-dev pkgconfig meson ninja + - meson setup --reconfigure build + - ninja -C build test + diff --git a/.woodpecker/release.yaml b/.woodpecker/release.yaml index e6afe57..3f3a047 100644 --- a/.woodpecker/release.yaml +++ b/.woodpecker/release.yaml @@ -10,7 +10,7 @@ steps: image: alpine:latest commands: - apk update - - apk add --no-cache bash build-base words-en gdb perl pcre2-static pcre2-dev gdbm gdbm-dev pkgconfig meson ninja git + - apk add --no-cache bash build-base gdb perl sodium sodium-dev jansson jansson-dev db db-dev pkgconfig meson ninja - meson setup --reconfigure --prefer-static -Dcpp_link_args="-static" --buildtype=release build - ninja -C build - meson dist -C build --formats xztar,gztar,zip diff --git a/meson.build b/meson.build index 979b17e..c04a8ed 100644 --- a/meson.build +++ b/meson.build @@ -115,3 +115,6 @@ if pod2man.found() install_man('pcp.1') endif endif + + +subdir('tests') diff --git a/tests/iotests.cfg b/tests/iotests.cfg index 6146aa3..c130439 100644 --- a/tests/iotests.cfg +++ b/tests/iotests.cfg @@ -20,17 +20,20 @@ # You can contact me by mail: . # -pcp=../src/pcp1 +pcp=../pcp vault=v1 passwd=xxx md5msg=66b8c4ca9e5d2a7e3c0559c3cdea3d50 +os=$(uname) . ./keys.cfg check_dependencies_shell () { - cmd="which mdmfs" - expect="/mdmfs/" - check "$cmd" "$expect" "$input" + if test "$os" = "FreeBSD"; then + cmd="which mdmfs" + expect="/mdmfs/" + check "$cmd" "$expect" "$input" + fi } check_dependencies_pcp () { @@ -39,10 +42,16 @@ check_dependencies_pcp () { check "$cmd" "$expect" "$input" } -# this one only works on freebsd for my user. sorrry +# this one only works on freebsd for my user. sorry check_vault_disk_full () { - sudo mdmfs -s 1M -w 1001:1001 md env && dd if=/dev/zero of=env/b bs=1024 count=700 - cmd="./jot 100 | while read N; do if ! (echo a; echo b) | $pcp -V env/v1 -k -x x; then break; fi; done" - expect="/Failed to copy/" - check "$cmd" "$expect" "$input" + if test "$os" = "FreeBSD"; then + sudo mdmfs -s 1M -w 1001:1001 md env && dd if=/dev/zero of=env/b bs=1024 count=700 + cmd="./jot 100 | while read N; do if ! (echo a; echo b) | $pcp -V env/v1 -k -x x; then break; fi; done" + expect="/Failed to copy/" + check "$cmd" "$expect" "$input" + fi +} + +prepare() { + : } diff --git a/tests/jsonunittests.cfg b/tests/jsonunittests.cfg index 06bc92b..673964f 100644 --- a/tests/jsonunittests.cfg +++ b/tests/jsonunittests.cfg @@ -20,7 +20,7 @@ # You can contact me by mail: . # -pcp=../src/pcp1 +pcp=../pcp passwd=xxx verbose=1 diff --git a/tests/md5 b/tests/md5 index d9d8207..63556e8 100755 --- a/tests/md5 +++ b/tests/md5 @@ -1,5 +1,5 @@ #!/bin/sh file=$1 -../src/pcp1 -C $file | awk '{print $4}' +../pcp -C $file | awk '{print $4}' diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 0000000..8e2f4cf --- /dev/null +++ b/tests/meson.build @@ -0,0 +1,54 @@ +# -*-python-*- + +# genheader statictest buffertest sample pipetest decodertest + +fs = import('fs') + +binaries = [ + 'gencheader', + 'statictest', + 'buffertest', + 'sample', + 'pipetest', + 'decodertest', + 'mangle', + 'invalidkeys', + 'pwhashes', + 'streamtest', +] + +configs = [ + 'cppunittests.cfg', + 'iotests.cfg', + 'jsonunittests.cfg', + 'keys.cfg', + 'pyunittests.cfg', + 'stresstests.cfg', + 'unittests.cfg', + 'md5', + 'jot', + 'bart.pub', + 'key-alicia-pub', + 'key-alicia-sec', + 'key-bobby-pub', + 'key-bobby-sec' +] + +foreach binary: binaries + executable( + binary, + binary + '.c', + include_directories: [pcp_inc], + dependencies: [libpcp_dep, pcp_deps], + ) +endforeach + +foreach config: configs + cp = fs.copyfile(config) +endforeach + +unittest = find_program('unittests.sh', '.') + +test('C tests', unittest, args : ['unittests.cfg']) +test('IO tests', unittest, args : ['iotests.cfg']) +test('JSON tests', unittest, args : ['jsonunittests.cfg']) diff --git a/tests/pwhashes.c b/tests/pwhashes.c index 76ba429..106244f 100644 --- a/tests/pwhashes.c +++ b/tests/pwhashes.c @@ -1,13 +1,13 @@ -#include +#include +#include #include #include -#include -#include +#include -#include "mem.h" #include "defines.h" -#include "keyprint.h" #include "key.h" +#include "keyprint.h" +#include "mem.h" struct _pw_t { char hash[65]; @@ -24,28 +24,29 @@ int main() { pw *list = NULL; pw *have = NULL; unsigned char nonce[32] = {1}; + PCPCTX *ptx = ptx_new(); - if(sodium_init() == -1) return 1; + if (sodium_init() == -1) + return 1; - for(i=97; i<126; ++i) { + for (i = 97; i < 126; ++i) { pass[0] = i; pass[1] = 0; - h = pcp_derivekey(pass, nonce); + h = pcp_derivekey(ptx, pass, nonce); - p =0; - for(t=0; t<32; ++t) { + p = 0; + for (t = 0; t < 32; ++t) { sprintf(&tmp[p], "%02x", h[t]); p += 2; } have = NULL; HASH_FIND_STR(list, tmp, have); - if(have == NULL) { + if (have == NULL) { item = ucmalloc(sizeof(pw)); memcpy(item->hash, tmp, 65); - HASH_ADD_STR( list, hash, item ); - } - else { + HASH_ADD_STR(list, hash, item); + } else { fprintf(stderr, "Error: collision found: %s!\n", have->hash); return 1; } diff --git a/tests/unittests.cfg b/tests/unittests.cfg index 6886d05..c5537e1 100644 --- a/tests/unittests.cfg +++ b/tests/unittests.cfg @@ -20,7 +20,7 @@ # You can contact me by mail: . # -pcp=../src/pcp1 +pcp=../pcp vault=v1 passwd=ech9xeiT%CuxuH1ch-is2ies1R md5msg=66b8c4ca9e5d2a7e3c0559c3cdea3d50 @@ -40,29 +40,29 @@ check_dependencies_pcp () { } check_streams_8 () { - md5=`./md5 ../COPYING` - cmd="./pipetest 8 e < ../COPYING | ./pipetest 8 d | ./md5" + md5=`./md5 ../../COPYING` + cmd="./pipetest 8 e < ../../COPYING | ./pipetest 8 d | ./md5" expect="/$md5/" check "$cmd" "$expect" "$input" } check_streams_16 () { - md5=`./md5 ../COPYING` - cmd="./pipetest 16 e < ../COPYING | ./pipetest 16 d | ./md5" + md5=`./md5 ../../COPYING` + cmd="./pipetest 16 e < ../../COPYING | ./pipetest 16 d | ./md5" expect="/$md5/" check "$cmd" "$expect" "$input" } check_streams_32 () { - md5=`./md5 ../COPYING` - cmd="./pipetest 32 e < ../COPYING | ./pipetest 32 d | ./md5" + md5=`./md5 ../../COPYING` + cmd="./pipetest 32 e < ../../COPYING | ./pipetest 32 d | ./md5" expect="/$md5/" check "$cmd" "$expect" "$input" } check_streams_64 () { - md5=`./md5 ../COPYING` - cmd="./pipetest 64 e < ../COPYING | ./pipetest 64 d | ./md5" + md5=`./md5 ../../COPYING` + cmd="./pipetest 64 e < ../../COPYING | ./pipetest 64 d | ./md5" expect="/$md5/" check "$cmd" "$expect" "$input" } @@ -284,27 +284,27 @@ check_sym_decrypt () { # # signature tests check_sign_detached_to_bobby () { - cmd="$pcp -V va -g -I README -f testsig -x a" + cmd="$pcp -V va -g -I ../../COPYING -f testsig -x a" expectfile="testsig" expect="" check "$cmd" "$expect" "$input" "$expectfile" } check_verify_detached_signature () { - cmd="$pcp -V vb -c -f testsig -I README -i $idalicia" + cmd="$pcp -V vb -c -f testsig -I ../../COPYING -i $idalicia" expect="/verified/" check "$cmd" "$expect" "$input" } check_verify_detached_signature_self () { - cmd="$pcp -V va -c -f testsig -I README" + cmd="$pcp -V va -c -f testsig -I ../../COPYING" expect="/verified/" check "$cmd" "$expect" "$input" } check_sign_armored_to_bobby () { rm -f testsig - cmd="$pcp -V va -g -I README -O testsig -x a -z" + cmd="$pcp -V va -g -I ../../COPYING -O testsig -x a -z" expectfile="testsig" expect="" check "$cmd" "$expect" "$input" "$expectfile" @@ -324,7 +324,7 @@ check_verify_armored_signature_self () { check_sign_bin_to_bobby () { rm -f testsig - cmd="$pcp -V va -g -I README -O testsig -x a" + cmd="$pcp -V va -g -I ../../COPYING -O testsig -x a" expectfile="testsig" expect="" check "$cmd" "$expect" "$input" "$expectfile" @@ -345,7 +345,7 @@ check_verify_bin_signature_self () { # # sign+encrypt tests check_sign_crypt_to_bobby () { - cmd="$pcp -V va -g -e -I README -O testsig -r Bobby -x a" + cmd="$pcp -V va -g -e -I ../../COPYING -O testsig -r Bobby -x a" expect="/Encrypted/" check "$cmd" "$expect" "$input" } @@ -572,26 +572,26 @@ check_fuzz_binary_seckey () { # checksum tests check_checksum_copying () { - cmd="$pcp -C ../COPYING" + cmd="$pcp -C ../../COPYING" expect="/$blake2/" check "$cmd" "$expect" "$input" } check_checksum_authenticated_copying () { - cmd="$pcp -x $key -C ../COPYING" + cmd="$pcp -x $key -C ../../COPYING" expect="/$blake2auth/" check "$cmd" "$expect" "$input" } check_checksum_copying_stdin () { - cmd="$pcp -C < ../COPYING" + cmd="$pcp -C < ../../COPYING" expect="/$blake2/" check "$cmd" "$expect" "$input" } check_checksum_multiple () { - cmd="$pcp -C ../COPYING ../README" - expect="/README/" + cmd="$pcp -C ../../COPYING ../../../COPYING" + expect="/../../COPYING/" check "$cmd" "$expect" "$input" } diff --git a/tests/unittests.sh b/tests/unittests.sh index 1d54e07..80cc763 100755 --- a/tests/unittests.sh +++ b/tests/unittests.sh @@ -106,13 +106,23 @@ callcheck () { cfg="$1" check="$2" +pwd=$(pwd) +base=$(basename "$pwd") + +if test "$base" != "test"; then + cd tests +fi + + +echo "PWD: $(pwd)" + if test -z "$cfg"; then echo "Usage: $0 [check]" exit 1 fi if ! test -e "$cfg"; then - echo "$cfg doesn't exist!" + echo "$cfg doesn't exist ($(pwd))!" exit 1 fi