Changeset: 3ab3215b4630 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3ab3215b4630 Added Files: ctest/tools/monetdbe/Tests/All ctest/tools/monetdbe/Tests/example_proxy.SQL.py Removed Files: ctest/tools/monetdbe/example_remote.c Modified Files: ctest/tools/monetdbe/CMakeLists.txt ctest/tools/monetdbe/example_proxy.c Branch: default Log Message:
Make a start with adding monetdbe ctest to Mtest. diffs (truncated from 538 to 300 lines): diff --git a/ctest/tools/monetdbe/CMakeLists.txt b/ctest/tools/monetdbe/CMakeLists.txt --- a/ctest/tools/monetdbe/CMakeLists.txt +++ b/ctest/tools/monetdbe/CMakeLists.txt @@ -20,12 +20,6 @@ target_link_libraries(example2 monetdbe) add_test(run_example2 example2) -add_executable(example_proxy example_proxy.c) -target_link_libraries(example_proxy - PRIVATE - monetdb_config_header - monetdbe) - add_executable(example_temporal example_temporal.c) target_link_libraries(example_temporal PRIVATE @@ -77,12 +71,12 @@ target_link_libraries(example_connection monetdbe) add_test(run_example_connections example_connections) -add_executable(example_remote example_remote.c) -target_link_libraries(example_remote +add_executable(example_proxy example_proxy.c) +target_link_libraries(example_proxy PRIVATE monetdb_config_header monetdbe) -add_test(run_example_remote example_remote) +add_test(run_example_proxy example_proxy) if(WITH_CMOCKA) add_executable(cmocka_test cmocka_test.c test_helper.c) @@ -95,3 +89,8 @@ if(WITH_CMOCKA) ) add_test(run_cmocka_test cmocka_test) endif() + +if (TESTING) + install(TARGETS + example_proxy) +endif() diff --git a/ctest/tools/monetdbe/Tests/All b/ctest/tools/monetdbe/Tests/All new file mode 100644 --- /dev/null +++ b/ctest/tools/monetdbe/Tests/All @@ -0,0 +1,1 @@ +example_proxy diff --git a/ctest/tools/monetdbe/Tests/example_proxy.SQL.py b/ctest/tools/monetdbe/Tests/example_proxy.SQL.py new file mode 100644 --- /dev/null +++ b/ctest/tools/monetdbe/Tests/example_proxy.SQL.py @@ -0,0 +1,45 @@ +import os, pymonetdb +import subprocess + +db = os.getenv("TSTDB") +port = os.getenv("MAPIPORT") + +client1 = pymonetdb.connect(database=db, port=port, autocommit=True) +cur1 = client1.cursor() +cur1.execute(''' +CREATE TABLE test (x INTEGER, y STRING); +INSERT INTO test VALUES (42, 'Hello'), (NULL, 'World'); +''') + +cur1.close() +client1.close() + +cmd = ['example_proxy', port, db] +results = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8') + +if results.stderr: + print(results.stderr) + +lines = results.stdout.splitlines() + +if len(lines) != 3: + print(results.stdout) + print("Too many output lines.") + exit(1) + +def test_equal(expected, received): + if received != expected: + print("expected:") + print(expected) + print("received:") + print(received) + exit(1) + +expected="Query result with 2 cols and 2 rows" +test_equal(expected, lines[0]) + +expected="42, Hello" +test_equal(expected, lines[1]) + +expected="NULL, World" +test_equal(expected, lines[2]) diff --git a/ctest/tools/monetdbe/example_proxy.c b/ctest/tools/monetdbe/example_proxy.c --- a/ctest/tools/monetdbe/example_proxy.c +++ b/ctest/tools/monetdbe/example_proxy.c @@ -11,63 +11,33 @@ #include <stdio.h> #include <inttypes.h> +#define expected_error(msg) {fprintf(stderr, "Failure: %s\n", msg); return 0;} #define error(msg) {fprintf(stderr, "Failure: %s\n", msg); return -1;} int -main(void) +main(int argc, char** argv) { char* err = NULL; monetdbe_database mdbe = NULL; monetdbe_result* result = NULL; - - monetdbe_remote remote = { - .host = "127.0.0.1", - .port = 50001, - .username="monetdb", - .password="monetdb", - .lang="sql"}; - - monetdbe_options opt = {.remote = &remote}; + assert(argc==3); + const int port = strtol(argv[1], NULL, 10); + const char* database = argv[2]; + monetdbe_remote remote = {.host="localhost", .port=port, .database=database, .username="monetdb", .password="monetdb"}; + monetdbe_options opts = {.remote = &remote}; - // second argument is a string for the db directory or NULL for in-memory mode - if (monetdbe_open(&mdbe, "mapi:monetdb://127.0.0.1:50000?database=devdb", &opt)) - error("Failed to open database") - - - if ((err = monetdbe_query(mdbe, "DELETE FROM test WHERE x < 0; ", &result, NULL)) != NULL) + if (monetdbe_open(&mdbe, NULL, &opts)) + expected_error("Failed to open database") + if ((err = monetdbe_query(mdbe, "SELECT x, y FROM test ORDER BY y ASC; ", &result, NULL)) != NULL) error(err) - if ((err = monetdbe_query(mdbe, "SELECT * FROM test; ", &result, NULL)) != NULL) - error(err) - - monetdbe_column* appendable_columns[2]; - fprintf(stdout, "Query result with %zu cols and %"PRId64" rows\n", result->ncols, result->nrows); for (int64_t r = 0; r < result->nrows; r++) { for (size_t c = 0; c < result->ncols; c++) { monetdbe_column* rcol; if ((err = monetdbe_result_fetch(result, &rcol, c)) != NULL) error(err) - appendable_columns[c] = rcol; switch (rcol->type) { - case monetdbe_int8_t: { - monetdbe_column_int8_t * col = (monetdbe_column_int8_t *) rcol; - if (col->data[r] == col->null_value) { - printf("NULL"); - } else { - printf("%d", col->data[r]); - } - break; - } - case monetdbe_int16_t: { - monetdbe_column_int16_t * col = (monetdbe_column_int16_t *) rcol; - if (col->data[r] == col->null_value) { - printf("NULL"); - } else { - printf("%d", col->data[r]); - } - break; - } case monetdbe_int32_t: { monetdbe_column_int32_t * col = (monetdbe_column_int32_t *) rcol; if (col->data[r] == col->null_value) { @@ -79,71 +49,7 @@ main(void) } case monetdbe_str: { monetdbe_column_str * col = (monetdbe_column_str *) rcol; - if (col->is_null(&col->data[r])) { - printf("NULL"); - } else { - printf("%s", (char*) col->data[r]); - } - break; - } - default: { - printf("UNKNOWN"); - } - } - - if (c + 1 < result->ncols) { - printf(", "); - } - } - printf("\n"); - } - - if ((err = monetdbe_append(mdbe, "sys", "test", appendable_columns, 2)) != NULL) - error(err) - - if ((err = monetdbe_cleanup_result(mdbe, result)) != NULL) - error(err) - - if ((err = monetdbe_query(mdbe, "SELECT * FROM test; ", &result, NULL)) != NULL) - error(err) - - fprintf(stdout, "Query result with %zu cols and %"PRId64" rows\n", result->ncols, result->nrows); - for (int64_t r = 0; r < result->nrows; r++) { - for (size_t c = 0; c < result->ncols; c++) { - monetdbe_column* rcol; - if ((err = monetdbe_result_fetch(result, &rcol, c)) != NULL) - error(err) - switch (rcol->type) { - case monetdbe_int8_t: { - monetdbe_column_int8_t * col = (monetdbe_column_int8_t *) rcol; - if (col->data[r] == col->null_value) { - printf("NULL"); - } else { - printf("%d", col->data[r]); - } - break; - } - case monetdbe_int16_t: { - monetdbe_column_int16_t * col = (monetdbe_column_int16_t *) rcol; - if (col->data[r] == col->null_value) { - printf("NULL"); - } else { - printf("%d", col->data[r]); - } - break; - } - case monetdbe_int32_t: { - monetdbe_column_int32_t * col = (monetdbe_column_int32_t *) rcol; - if (col->data[r] == col->null_value) { - printf("NULL"); - } else { - printf("%d", col->data[r]); - } - break; - } - case monetdbe_str: { - monetdbe_column_str * col = (monetdbe_column_str *) rcol; - if (col->is_null(&col->data[r])) { + if (col->is_null(col->data+r)) { printf("NULL"); } else { printf("%s", (char*) col->data[r]); @@ -164,207 +70,6 @@ main(void) if ((err = monetdbe_cleanup_result(mdbe, result)) != NULL) error(err) - - if ((err = monetdbe_query(mdbe, "INSERT INTO test VALUES (100, 'temp');", NULL, NULL)) != NULL) - error(err) - - // Assumes the existance of a table test (x INT, y STRING) on the remote. - monetdbe_statement *stmt = NULL; - if ((err = monetdbe_prepare(mdbe, "SELECT y, x, 1 AS some_fixed_int FROM test WHERE x = ?;", &stmt)) != NULL) - error(err) - - int x = 100; - - if ((err = monetdbe_bind(stmt, &x, 0)) != NULL) - error(err) - - if ((err = monetdbe_execute(stmt, &result, NULL)) != NULL) - error(err) - - - fprintf(stdout, "Query result with %zu cols and %"PRId64" rows\n", result->ncols, result->nrows); - for (int64_t r = 0; r < result->nrows; r++) { - for (size_t c = 0; c < result->ncols; c++) { - monetdbe_column* rcol; - if ((err = monetdbe_result_fetch(result, &rcol, c)) != NULL) - error(err) - switch (rcol->type) { - case monetdbe_int8_t: { - monetdbe_column_int8_t * col = (monetdbe_column_int8_t *) rcol; - if (col->data[r] == col->null_value) { - printf("NULL"); - } else { - printf("%d", col->data[r]); - } - break; - } - case monetdbe_int16_t: { - monetdbe_column_int16_t * col = (monetdbe_column_int16_t *) rcol; - if (col->data[r] == col->null_value) { - printf("NULL"); - } else { - printf("%d", col->data[r]); - } - break; - } - case monetdbe_int32_t: { - monetdbe_column_int32_t * col = (monetdbe_column_int32_t *) rcol; - if (col->data[r] == col->null_value) { - printf("NULL"); - } else { - printf("%d", col->data[r]); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list