Skip to content

Commit a62ff0d

Browse files
committed
Add cdb2api unread data test
Signed-off-by: Salil Chandra <[email protected]>
1 parent a45c6a1 commit a62ff0d

File tree

4 files changed

+85
-0
lines changed

4 files changed

+85
-0
lines changed

cdb2api/cdb2api.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3193,7 +3193,11 @@ void cdb2_socket_pool_donate_ext(const cdb2_hndl_tp *hndl, const char *typestr,
31933193
close(sockpool_fd);
31943194
sockpool_fd = -1;
31953195
}
3196+
} else if (sockpool_fd != -1) {
3197+
fprintf(stderr, "%s: typestr too long to donate to sockpool, length %ld max %ld\n", __func__,
3198+
strlen(typestr), sizeof(msg.typestr) - 1);
31963199
}
3200+
31973201
if (sockpool_fd != -1) {
31983202
pthread_mutex_lock(&cdb2_sockpool_mutex);
31993203
int closeit = 0;

tests/api_tests.test/runit

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,25 @@
11
#!/usr/bin/env bash
22
bash -n "$0" | exit 1
33

4+
pgrep cdb2sockpool
5+
if [ $? -ne 0 ]; then
6+
echo 'SOCKPOOL IS REQUIRED TO RUN THE TEST BUT IS NOT RUNNING.' >&2
7+
echo 'TRYING TO BRING IT UP'
8+
${BUILDDIR}/tools/cdb2sockpool/cdb2sockpool
9+
sleep 1
10+
pgrep cdb2sockpool
11+
if [ $? -ne 0 ]; then
12+
echo 'FAILED BRINGING UP SOCKPOOL' >&2
13+
exit 1
14+
fi
15+
fi
16+
17+
18+
cfg=$DBDIR/comdb2db.cfg
19+
echo 'comdb2_feature:discard_unread_socket_data=on' >> ${cfg}
20+
${TESTSBUILDDIR}/cdb2api_unread_data ${DBNAME}
21+
[[ $? -ne 0 ]] && echo "cdb2api_unread_data - fail" && exit 1
22+
sed -i '/comdb2_feature:discard_unread_socket_data=on/d' "${cfg}"
23+
echo 'cdb2api_unread_data - pass'
24+
425
exit 0

tests/tools/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ add_exe(cdb2api_chunk cdb2api_chunk.cpp)
3737
add_exe(cdb2api_drain cdb2api_drain.cpp)
3838
add_exe(cdb2api_effects_on_chunk_error cdb2api_effects_on_chunk_error.c)
3939
add_exe(cdb2api_read_intrans_results cdb2api_read_intrans_results.c)
40+
add_exe(cdb2api_unread_data cdb2api_unread_data.cpp)
4041
add_exe(cdb2bind cdb2bind.c)
4142
add_exe(cldeadlock cldeadlock.c)
4243
add_exe(close_old_connections close_old_connections.c)
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include <signal.h>
2+
#include <stdio.h>
3+
#include <cdb2api.h>
4+
#include <cdb2api_test.h>
5+
6+
int test_unread_record(char *dbname, char *type)
7+
{
8+
int rc = 0;
9+
10+
cdb2_hndl_tp *cdb2h = NULL;
11+
int num_connects = get_num_tcp_connects();
12+
num_connects++; // Expect atleast 1 connect
13+
14+
for (int i =0; i < 1000; i++) {
15+
rc = cdb2_open(&cdb2h, dbname, type, 0);
16+
if (rc != CDB2_OK) {
17+
fprintf(stderr, "%s Failed to open db %s rc=%d errstr=%s\n", __func__, dbname, rc, cdb2_errstr(cdb2h));
18+
return -1;
19+
}
20+
rc = cdb2_run_statement(cdb2h, "select 1");
21+
if (rc != CDB2_OK) {
22+
fprintf(stderr, "%s Failed to run statement rc=%d errstr=%s\n", __func__, rc, cdb2_errstr(cdb2h));
23+
return -1;
24+
}
25+
rc = cdb2_next_record (cdb2h);
26+
if (rc != CDB2_OK) {
27+
fprintf(stderr, "%s Failed to get record rc=%d errstr=%s\n", __func__, rc, cdb2_errstr(cdb2h));
28+
return -1;
29+
}
30+
rc = cdb2_close(cdb2h);
31+
if (rc != CDB2_OK) {
32+
fprintf(stderr, "%s Failed to close db rc=%d errstr=%s\n", __func__, rc, cdb2_errstr(cdb2h));
33+
return -1;
34+
}
35+
}
36+
37+
if (get_num_tcp_connects() > num_connects + 2) {
38+
fprintf(stderr, "%s Failed: expected connects: %d got: %d\n", __func__, num_connects, get_num_tcp_connects());
39+
return -1;
40+
}
41+
42+
return 0;
43+
}
44+
45+
46+
int main(int argc, char **argv)
47+
{
48+
signal(SIGPIPE, SIG_IGN);
49+
char *db = argv[1];
50+
char *conf = getenv("CDB2_CONFIG");
51+
if (conf)
52+
cdb2_set_comdb2db_config(conf);
53+
54+
cdb2_enable_sockpool();
55+
56+
int rc = test_unread_record(db, "default");
57+
58+
return rc;
59+
}

0 commit comments

Comments
 (0)