diff --git a/include/villas/node_type.h b/include/villas/node_type.h index b0b5f400b..cc4e35674 100644 --- a/include/villas/node_type.h +++ b/include/villas/node_type.h @@ -38,7 +38,7 @@ struct node_type { * @retval 0 Success. Everything went well. * @retval <0 Error. Something went wrong. */ - int (*init)(int argc, char * argv[], config_setting_t *cfg); + int (*init)(int argc, char *argv[], config_setting_t *cfg); /** Global de-initialization per node type. * diff --git a/include/villas/nodes/fpga.h b/include/villas/nodes/fpga.h index c8846ed57..e201434b7 100644 --- a/include/villas/nodes/fpga.h +++ b/include/villas/nodes/fpga.h @@ -41,7 +41,7 @@ struct fpga { }; /** @see node_vtable::init */ -int fpga_init(int argc, char * argv[], config_setting_t *cfg); +int fpga_init(int argc, char *argv[], config_setting_t *cfg); /** @see node_vtable::deinit */ int fpga_deinit(); diff --git a/include/villas/nodes/websocket.h b/include/villas/nodes/websocket.h index 93ddce3c2..1a51bec63 100644 --- a/include/villas/nodes/websocket.h +++ b/include/villas/nodes/websocket.h @@ -62,7 +62,7 @@ struct websocket_connection { int websocket_protocol_cb(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); /** @see node_vtable::init */ -int websocket_init(int argc, char * argv[], config_setting_t *cfg); +int websocket_init(int argc, char *argv[], config_setting_t *cfg); /** @see node_vtable::deinit */ int websocket_deinit(); diff --git a/lib/nodes/fpga.c b/lib/nodes/fpga.c index 32ebd670b..4d8b984e0 100644 --- a/lib/nodes/fpga.c +++ b/lib/nodes/fpga.c @@ -57,7 +57,7 @@ int fpga_parse_cards(config_setting_t *cfg) return 0; } -int fpga_init(int argc, char * argv[], config_setting_t *cfg) +int fpga_init(int argc, char *argv[], config_setting_t *cfg) { int ret; diff --git a/lib/nodes/socket.c b/lib/nodes/socket.c index dcef254b8..76460f362 100644 --- a/lib/nodes/socket.c +++ b/lib/nodes/socket.c @@ -36,10 +36,10 @@ static struct plugin p; /* Private static storage */ struct list interfaces; -int socket_init(int argc, char * argv[], config_setting_t *cfg) +int socket_init(int argc, char *argv[], config_setting_t *cfg) { if (getuid() != 0) - error("The 'socket' node-type requires superuser privileges!"); + error("The 'socket' node-type requires super-user privileges!"); nl_init(); /* Fill link cache */ list_init(&interfaces); diff --git a/tests/advio.c b/tests/advio.c index e78100971..a130aafa7 100644 --- a/tests/advio.c +++ b/tests/advio.c @@ -12,26 +12,29 @@ #include +/** This URI points to a Sciebo share which contains some test files. + * The Sciebo share is read/write accessible via WebDAV. */ +#define BASE_URI "https://1Nrd46fZX8HbggT:badpass@rwth-aachen.sciebo.de/public.php/webdav/node/tests" + +#define TEST_DATA_DOWNLOAD "ook4iekohC2Teegoghu6ayoo1OThooregheebaet8Zod1angah0che7quai4ID7A" +#define TEST_DATA_UPLOAD "jaeke4quei3oongeebuchahz9aabahkie8oor3Gaejem1AhSeph5Ahch9ohz3eeh" +#define TEST_DATA_APPEND1 "xa5gieTohlei9iu1uVaePae6Iboh3eeheeme5iejue5sheshae4uzisha9Faesei" +#define TEST_DATA_APPEND2 "bitheeRae7igee2miepahJaefoGad1Ooxeif0Mooch4eojoumueYahn4ohc9poo2" + Test(advio, download) { AFILE *af; - size_t len; int ret; - char buffer[1024]; - - const char *url = "http://www.textfiles.com/100/angela.art"; + size_t len; + char buffer[64]; - af = afopen(url, "r", 0); + af = afopen(BASE_URI "/download" , "r", 0); cr_assert(af, "Failed to download file"); - cr_log_info("Opened file %s", url); - while (!afeof(af)) { - errno = 0; - len = afread(buffer, 1, sizeof(buffer), af); - cr_log_info("Read %zu bytes", len); - - fwrite(buffer, 1, len, stdout); - } + len = afread(buffer, 1, sizeof(buffer), af); + + cr_assert_gt(len, 0); + cr_assert_arr_eq(buffer, TEST_DATA_DOWNLOAD, strlen(TEST_DATA_DOWNLOAD)); ret = afclose(af); cr_assert_eq(ret, 0, "Failed to close/upload file"); @@ -40,33 +43,77 @@ Test(advio, download) Test(advio, upload) { AFILE *af; - size_t len1, len2; int ret; - const char *uri = "file:///tmp/test.txt"; - char rnd[128]; - char buffer[128]; + size_t len; + size_t tlen = strlen(TEST_DATA_UPLOAD); + + char buffer[tlen]; - /* Get some random bytes */ - len1 = read_random(rnd, sizeof(rnd)); - /* Open file for writing */ - af = afopen(uri, "w+", 0); + af = afopen(BASE_URI "/upload", "w+", 0); cr_assert(af, "Failed to download file"); - len2 = afwrite(rnd, 1, len1, af); - cr_assert_eq(len1, len2); + len = afwrite(TEST_DATA_UPLOAD, 1, strlen(TEST_DATA_UPLOAD), af); + cr_assert_eq(len, strlen(TEST_DATA_UPLOAD)); ret = afclose(af); cr_assert_eq(ret, 0, "Failed to close/upload file"); /* Open for reading and comparison */ - af = afopen(uri, "r", 0); + af = afopen(BASE_URI "/upload", "r", 0); cr_assert(af, "Failed to download file"); - len2 = afread(buffer, 1, len1, af); - cr_assert_arr_eq(rnd, buffer, len2); + len = afread(buffer, 1, strlen(TEST_DATA_UPLOAD), af); + cr_assert_eq(len, strlen(TEST_DATA_UPLOAD)); + + cr_assert_arr_eq(buffer, TEST_DATA_UPLOAD, len); ret = afclose(af); cr_assert(ret == 0, "Failed to close file"); +} + +Test(advio, append) +{ + AFILE *af; + + int ret; + + size_t len; + size_t tlen = strlen(TEST_DATA_APPEND1) + strlen(TEST_DATA_APPEND2); + + char buffer[tlen]; + + /* Open file for writing first chunk */ + af = afopen(BASE_URI "/append", "w+", 0); + cr_assert(af, "Failed to download file"); + + len = afwrite(TEST_DATA_APPEND1, 1, strlen(TEST_DATA_APPEND1), af); + cr_assert_eq(len, strlen(TEST_DATA_APPEND1)); + + ret = afclose(af); + cr_assert_eq(ret, 0, "Failed to close/upload file"); + + /* Open file for writing second chunk */ + af = afopen(BASE_URI "/append", "a", 0); + cr_assert(af, "Failed to download file"); + + len = afwrite(TEST_DATA_APPEND1, 1, strlen(TEST_DATA_APPEND2), af); + cr_assert_eq(len, strlen(TEST_DATA_APPEND2)); + + ret = afclose(af); + cr_assert_eq(ret, 0, "Failed to close/upload file"); + + /* Open for reading and comparison */ + af = afopen(BASE_URI "/append", "r", 0); + cr_assert(af, "Failed to download file"); + + len = afread(buffer, 1, tlen, af); + cr_assert_eq(len, tlen); + + ret = afclose(af); + cr_assert(ret == 0, "Failed to close file"); + + cr_assert_arr_eq(buffer, TEST_DATA_APPEND1, strlen(TEST_DATA_APPEND1)); + cr_assert_arr_eq(buffer + strlen(TEST_DATA_APPEND1), TEST_DATA_APPEND2, strlen(TEST_DATA_APPEND2)); } \ No newline at end of file diff --git a/tests/integration.sh b/tests/integration.sh new file mode 100755 index 000000000..bc51ea8d0 --- /dev/null +++ b/tests/integration.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +SCRIPT=$(realpath ${BASH_SOURCE[0]}) +SCRIPTPATH=$(dirname $SCRIPT) + +TOPDIR=$(realpath ${SCRIPTPATH}/..) +BUILDDIR=${TOPDIR}/build/release +PATH=${BUILDDIR}:${PATH} + +CONFIGFILE=$(mktemp) +DATAFILE_ORIG=$(mktemp) +DATAFILE_LOOP=$(mktemp) + +cat > ${CONFIGFILE} <<- EOM +nodes = { + node1 = { + type = "socket"; + layer = "udp"; + + local = "*:12000"; + remote = "localhost:12000" + } +} +EOM + +# Generate test data +villas-signal random -l 10 -r 100 > ${DATAFILE_ORIG} + +villas-pipe ${CONFIGFILE} node1 < ${DATAFILE_ORIG} > ${DATAFILE_LOOP} + +diff -u ${DATAFILE_ORIG} ${DATAFILE_LOOP} + +rm ${DATAFILE_ORIG} +rm ${DATAFILE_LOOP} +rm ${CONFIGFILE} \ No newline at end of file