diff --git a/.travis.yml b/.travis.yml index 9872643d..523fec4b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,7 @@ script: - ./autogen.sh --enable-coverage && make all test - (cd src/lib/ebus/test && ./test_symbol && ./test_filereader && ./test_data && ./test_message) - ./src/ebusd/ebusd --help + - ./test_coverage.sh after_success: - find . -type f -name '*.gcno' -exec bash -c "(f={}; cd \${f%/*}; gcov -pb \${f##*/})" \; - bash <(curl -s https://codecov.io/bash) -X gcov diff --git a/test_coverage.sh b/test_coverage.sh new file mode 100755 index 00000000..8ac1a295 --- /dev/null +++ b/test_coverage.sh @@ -0,0 +1,178 @@ +#!/bin/bash +./src/ebusd/ebusd --help >/dev/null +./src/ebusd/ebusd -r -f -x >/dev/null 2>/dev/null +./src/ebusd/ebusd -c contrib/etc/ebusd --checkconfig --dumpconfig -s -f "ff08070400/0ab5303132333431313131" >/dev/null +php -r ' +error_reporting (E_ALL); +set_time_limit (0); +ob_implicit_flush (); +if (($srv=socket_create(AF_INET, SOCK_STREAM, SOL_TCP))===false) die("server: create socket"); +if (socket_bind($srv, "127.0.0.1", 8876)===false) { + @socket_close($srv); + die("server: bind socket"); +} +if (socket_listen($srv, 5)===false) { + @socket_close($srv); + die("server: listen socket"); +} +echo "server: waiting\n"; +if (($cli=socket_accept($srv))===false) { + @socket_close($srv); + die("server: socket accept"); +} +@socket_set_block($cli); +$output=""; +$input=$hexinput=""; +echo "server: running\n"; +$endtime=time()+20; +$firstsend=time()+5; +while (time()<$endtime) { + if (($r=@socket_read($cli, 1))===false) break; + if (strlen($r)==0) break; + socket_write($cli, $r, 1); + if (ord($r[0])==0xaa) { + if (strlen($output)>0) { + echo "server: $output\n"; + $output=""; + } + if ($firstsend && time()>$firstsend) { + socket_write($cli, "\xff\x36\x07\x04\x00\x06\xaa",8); + socket_write($cli, "\xff\xfe\xb5\x16\x03\x01\x50\x30\x86\xaa",10); + $firstsend=0; + } + } else { + $output.=substr(dechex(0x100|ord($r[0])),1); + if ("31040704006f"==$output) { // answer on ident query + socket_write($cli, "\x00\x0a\x99\x42\x42\x42\x42\x42\x30\x31\x30\x31\x71",13); + $output.=">answered<"; + } else if ("315307040091"==$output) { // answer on other ident query + socket_write($cli, "\x00\x0a\x99\x42\x42\x42\x42\x42\x30\x31\x30\x31\x71",13); + $output.=">answered<"; + } else if ("311cb509030d0000e1"==$output || "3152b509030d0600c9"==$output || "3153b509030d060034"==$output) { + socket_write($cli, "\x00\x02\x40\x50\xb4",5); + $output.=">answered<"; + } else if ("3153b505080290909090909003f6"==$output || "3153b509050e3500190030"==$output) { + socket_write($cli, "\x00\x00\x00",3); + $output.=">answered<"; + } else { + $endtime=time()+10; // keep further alive + } + } +} +@socket_close($cli); +@socket_close($srv); +echo "server: done\n"; +' & +srvpid=$! +if [ -z "$srvpid" ]; then + echo "unable to start echo server" + exit 1 +fi +sleep 1 +ps -p $srvpid >/dev/null +status="$?" +if [ ! "$status" = 0 ]; then + echo "unable to start echo server" + exit 1 +fi +echo "server: $srvpid" +cat >contrib/etc/ebusd/test.csv <