📄 binding_test.c
字号:
/* $Id: binding_test.c,v 1.11 2001/02/17 15:30:45 jm Exp $ * Tests on binding module * * Dynamic hierarchial IP tunnel * Copyright (C) 1998-2001, Dynamics group * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. See README and COPYING for * more details. */#include <stdio.h>#include <stddef.h>#include <string.h>#include <assert.h>#include "binding.h"/* defines */#define ASSERT assert#ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif/*#define BINDING_TEST_CASE_I10*//*#define BINDING_TEST_CASE_I12*//* structures *//* main */int main(void){ struct bindingtable *table; struct bindingentry binding1, binding2, binding3; struct bindingentry *entry; int exp, i; struct bindingkey bkey; printf("Testing binding-module...\n"); memset(&binding1, 0, sizeof(struct bindingentry)); memset(&binding2, 0, sizeof(struct bindingentry)); memset(&binding3, 0, sizeof(struct bindingentry)); /* I01 */ printf("Test case I01: Initialize a binding with negative maxbindings" "\n"); table = binding_init(-5, 100); ASSERT(table == NULL); printf("I01 test cases (1) OK\n"); /* I02 */ printf("Test case I02: Initialize a binding with zero maxbindings\n"); table = binding_init(0, 100); ASSERT(table == NULL); printf("I02 test cases (1) OK\n"); /* I03 */ printf("Test case I03: Initialize a binding with negative maxlifetime" "\n"); table = binding_init(100, -5); ASSERT(table == NULL); printf("I03 test cases (1) OK\n"); /* I04 */ printf("Test case I04: Initialize a binding with zero maxlifetime\n"); table = binding_init(100, 0); ASSERT(table != NULL); printf("I04 test cases (1) OK\n"); binding_destroy(table); /* I05 */ printf("Test case I05 requires manual testing\n");#if 0 /* New version limits the maxlifetime to a reasonable size and this * test fails as a result of this */ /* I06 */ printf("Test case I06: Initialize a binding with too large maxbindings" "\n"); table = binding_init(10000000, 100); ASSERT(table == NULL); printf("I06 test cases (1) OK\n"); /* I07 */ printf("Test case I07: Initialize a binding with too large maxlifetime" "\n"); table = binding_init(100, 20000000); ASSERT(table == NULL); printf("I07 test cases (1) OK\n");#endif /* I08 */ printf("Test case I08: Initialize a binding with realistic values\n"); table = binding_init(2, 1000); ASSERT(table != NULL); printf("I08 test cases (1) OK\n"); /* I09 */ printf("Test case I09: Destroy bindings when the table is empty\n"); binding_destroy(table); printf("I09 test cases (1) OK\n"); /* I10 */ printf("Test case I10 requires manual testing\n");#ifdef BINDING_TEST_CASE_I10 table = binding_init(2, 1000); ASSERT(table != NULL); ASSERT(binding_add(table, &binding1) == TRUE); printf("Test case I10: Destroy bindings when the table is not empty" "\n"); binding_destroy(table); printf("I10 test cases (1) OK\n");#endif /* I11 */ printf("Test case I11: Add binding with timeout less than zero\n"); table = binding_init(2, 1000); ASSERT(table != NULL); binding1.timeout = -5; ASSERT(binding_add(table, &binding1) == FALSE); printf("I11 test cases (1) OK\n"); /* I12 */ printf("Test case I12 requires manual testing\n");#ifdef BINDING_TEST_CASE_I12 binding1.timeout = 0; ASSERT(binding_add(table, &binding1) == FALSE); printf("I12 test cases (1) OK\n");#endif /* I13 */ printf("Test case I13: Add binding with timeout longer than " "shorttimelist\n"); binding1.timeout = 10000; ASSERT(binding_add(table, &binding1) == TRUE); printf("I13 test cases (1) OK\n"); binding_remove(&binding1); /* I14 */ printf("Test case I14: Add binding with timeout longer than " "maxuseshortlist\n"); binding2.timeout = 1; ASSERT(binding_add(table, &binding2) == TRUE); binding3.timeout = 1; ASSERT(binding_add(table, &binding3) == TRUE); entry = binding_getexpired(table, 51); ASSERT(entry != NULL); ASSERT(entry == &binding2); binding1.timeout = 950; ASSERT(binding_add(table, &binding1) == TRUE); printf("I14 test cases (1) OK\n"); binding_remove(&binding1); binding_remove(&binding3); /* I15 */ printf("Test case I15: Add binding with a reasonable timeout value\n"); binding1.timeout = 30; binding1.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; binding1.ha_addr.s_addr = (2 << 24) | (3 << 16) | (4 << 8) | 5; ASSERT(binding_add(table, &binding1) == TRUE); printf("I15 test cases (1) OK\n"); /* I16 */ printf("Test case I16: Fetch binding with an unknown IP address\n"); memset(&bkey, 0, sizeof(bkey)); bkey.mn_addr.s_addr = (2 << 24) | (2 << 16) | (3 << 8) | 4; bkey.ha_addr.s_addr = (3 << 24) | (3 << 16) | (4 << 8) | 5; entry = binding_fetch(table, &bkey); ASSERT(entry == NULL); printf("I16 test cases (1) OK\n"); /* I17 */ printf("Test case I17: Fetch binding with a known IP address\n"); bkey.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; bkey.ha_addr.s_addr = (2 << 24) | (3 << 16) | (4 << 8) | 5; entry = binding_fetch(table, &bkey); ASSERT(entry != NULL); ASSERT(entry == &binding1); printf("I17 test cases (1) OK\n"); /* I18 */ printf("Test case I18: Remove a valid bindingentry\n"); binding_remove(&binding1); printf("I18 test cases (1) OK\n"); /* I19 */ printf("Test case I19: Get next expire from an empty table\n"); exp = binding_nextexpiretime(table); printf("exp = %d\n", exp); ASSERT(exp == -1); printf("I19 test cases (1) OK\n"); /* I20 */ printf("Test case I20: Get next expire when the timeout is zero\n"); binding1.timeout = 0; binding1.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; ASSERT(binding_add(table, &binding1) == TRUE); exp = binding_nextexpiretime(table); printf("exp = %d\n", exp); ASSERT(exp == 0); printf("I20 test cases (1) OK\n"); /* I21 */ printf("Test case I21: Get next expire when it has expired earlier\n"); binding2.timeout = 1; binding2.mn_addr.s_addr = (2 << 24) | (2 << 16) | (3 << 8) | 4; ASSERT(binding_add(table, &binding2) == TRUE); entry = binding_getexpired(table, 10); ASSERT(entry != NULL); ASSERT(entry == &binding1); exp = binding_nextexpiretime(table); printf("exp = %d\n", exp); ASSERT(exp == 0); printf("I21 test cases (1) OK\n"); binding_remove(&binding2); /* I22 */ printf("Test case I22: Get next expire when it is in shorttimelist\n"); binding1.timeout = 5; binding1.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; ASSERT(binding_add(table, &binding1) == TRUE); exp = binding_nextexpiretime(table); printf("exp = %d\n", exp); ASSERT(exp == 5); printf("I22 test cases (1) OK\n"); entry = binding_getexpired(table, 5); ASSERT(entry != NULL); ASSERT(entry == &binding1); /* I23 */ printf("Test case I23: Get next expire when it is the first in " "longtimelist\n"); binding1.timeout = 1500; binding1.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; ASSERT(binding_add(table, &binding1) == TRUE); exp = binding_nextexpiretime(table); printf("exp = %d\n", exp); ASSERT(exp == 1500); printf("I23 test cases (1) OK\n"); /* I24 */ printf("Test case I24: Get next expire when it is in longtimelist but " "not the first one\n"); binding2.timeout = 1400; binding2.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; ASSERT(binding_add(table, &binding2) == TRUE); exp = binding_nextexpiretime(table); printf("exp = %d\n", exp); ASSERT(exp == 1400); printf("I24 test cases (1) OK\n"); entry = binding_getexpired(table, 1499); ASSERT(entry != NULL); ASSERT(entry == &binding2); /* I25 */ printf("Test case I25: getexpired with negative time to advance\n"); ASSERT(binding_getexpired(table, -5) == NULL); printf("I25 test cases (1) OK\n"); /* I26 */ printf("Test case I26: getexpired with zero time to advance\n"); ASSERT(binding_getexpired(table, 0) == NULL); printf("I26 test cases (1) OK\n"); /* I27 */ printf("Test case I27: getexpired with greater than zero time to " "advance\n"); binding2.timeout = 1; binding2.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; ASSERT(binding_add(table, &binding2) == TRUE); entry = binding_getexpired(table, 1); ASSERT(entry != NULL); ASSERT(entry == &binding1); entry = binding_getexpired(table, 0); ASSERT(entry != NULL); ASSERT(entry == &binding2); entry = binding_getexpired(table, 0); ASSERT(entry == NULL); printf("I27 test cases (1) OK\n"); /* I28 */ printf("Test case I28: getexpired with time greater than allowed " "(expired bindings)\n"); binding1.timeout = 1; binding1.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; ASSERT(binding_add(table, &binding1) == TRUE); binding2.timeout = 2; binding2.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; ASSERT(binding_add(table, &binding2) == TRUE); entry = binding_getexpired(table, 1005); ASSERT(entry != NULL); ASSERT(entry == &binding1); entry = binding_getexpired(table, 1005); ASSERT(entry != NULL); ASSERT(entry == &binding2); entry = binding_getexpired(table, 1005); ASSERT(entry == NULL); printf("I28 test cases (2) OK\n"); /* I29 */ printf("Test case I29: getexpired with no bindings in the table\n"); ASSERT(binding_getexpired(table, 100) == NULL); ASSERT(binding_getexpired(table, 1000) == NULL); ASSERT(binding_getexpired(table, 10000) == NULL); printf("I29 test cases (3) OK\n"); /* I30 */ printf("Test case I30: getexpired with no expired bindings\n"); binding1.timeout = 500; binding1.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; ASSERT(binding_add(table, &binding1) == TRUE); ASSERT(binding_getexpired(table, 0) == NULL); ASSERT(binding_getexpired(table, 1) == NULL); ASSERT(binding_getexpired(table, 10) == NULL); ASSERT(binding_getexpired(table, 100) == NULL); printf("I30 test cases (4) OK\n"); /* I31 */ printf("Test case I31: getexpired with expired bindings in " "shorttimelist\n"); ASSERT(binding_getexpired(table, 600) == &binding1); printf("I31 test cases (1) OK\n"); /* I32 */ printf("Test case I32: getexpired with expired bindings in " "longtimelist\n"); binding1.timeout = 5000; binding1.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; ASSERT(binding_add(table, &binding1) == TRUE); ASSERT(binding_getexpired(table, 2000) == NULL); ASSERT(binding_getexpired(table, 2000) == NULL); ASSERT(binding_getexpired(table, 2000) == &binding1); printf("I32 test cases (3) OK\n"); /* I33 */ printf("Test case I33: add binding with infinite lifetime\n"); binding1.timeout = INFINITE_TIMEOUT; binding1.mn_addr.s_addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; ASSERT(binding_add(table, &binding1) == TRUE); for (i = 0; i < 1000; i++) ASSERT(binding_getexpired(table, 750) == NULL); bkey.mn_addr = binding1.mn_addr; ASSERT(binding_fetch(table, &bkey) == &binding1); binding_remove(&binding1); printf("I33 test cases (1) OK\n"); binding_destroy(table); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -