diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-04-29 23:56:41 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-04-30 00:00:18 +0200 |
commit | 162b883a6a36aa926f34186d5a2ac8b7930e8d3b (patch) | |
tree | 5c5dce33e54770ff4cff4ab4d40f94d957c2a797 /qa/test_api.c | |
parent | d5b8311d81719f90a8f8d7f0b85ad320b9d7a0cd (diff) |
qa: add test case for get/set ATTR_GRP_* API
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'qa/test_api.c')
-rw-r--r-- | qa/test_api.c | 67 |
1 files changed, 66 insertions, 1 deletions
diff --git a/qa/test_api.c b/qa/test_api.c index 74f02d0..d5f95e9 100644 --- a/qa/test_api.c +++ b/qa/test_api.c @@ -33,7 +33,7 @@ static void eval_sigterm(int status) int main(void) { int ret, i; - struct nf_conntrack *ct, *tmp; + struct nf_conntrack *ct, *ct2, *tmp; struct nf_expect *exp, *tmp_exp; char data[32]; const char *val; @@ -199,6 +199,71 @@ int main(void) eval_sigterm(status); } + ct2 = nfct_new(); + if (!ct2) { + perror("nfct_new"); + return 0; + } + + printf("== test set grp API ==\n"); + ret = fork(); + if (ret == 0) { + for (i=0; i<ATTR_GRP_MAX; i++) + nfct_set_attr_grp(ct2, i, data); + exit(0); + } else { + wait(&status); + eval_sigterm(status); + } + + for (i=0; i<ATTR_GRP_MAX; i++) + nfct_set_attr_grp(ct2, i, data); + + printf("== test get grp API ==\n"); + ret = fork(); + if (ret == 0) { + char buf[16]; + + for (i=0; i<ATTR_GRP_MAX; i++) + nfct_get_attr_grp(ct2, i, buf); + exit(0); + } else { + wait(&status); + eval_sigterm(status); + } + + printf("== validate set grp API ==\n"); + ret = fork(); + if (ret == 0) { + for (i=0; i<ATTR_GRP_MAX; i++) { + char buf[16]; + + data[0] = (uint8_t) i; + nfct_set_attr_grp(ct2, i, data); + nfct_get_attr_grp(ct2, i, buf); + /* These attributes cannot be set, ignore them. */ + switch(i) { + case ATTR_GRP_ORIG_COUNTERS: + case ATTR_GRP_REPL_COUNTERS: + case ATTR_GRP_ORIG_ADDR_SRC: + case ATTR_GRP_ORIG_ADDR_DST: + case ATTR_GRP_REPL_ADDR_SRC: + case ATTR_GRP_REPL_ADDR_DST: + continue; + } + if (buf[0] != data[0]) { + printf("ERROR: set/get operations don't match " + "for attribute %d (%x != %x)\n", + i, buf[0], data[0]); + } + } + exit(0); + } else { + wait(&status); + eval_sigterm(status); + } + + nfct_destroy(ct2); nfct_destroy(ct); nfct_destroy(tmp); nfexp_destroy(exp); |