⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 binding_test.c

📁 mobile ip 在linux下的一种实现
💻 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 + -