void test_repositorySave()
{
	Repository repo;
	repository_init(&repo, "repoTests.txt");

	assert(_msize(repo.objects) == sizeof(Vector));

	assert(vector_getLen(repo.objects) == 10);

	// Create object
	StoreObject* obj = malloc(sizeof(StoreObject));
	Product* prod = malloc(sizeof(Product));
	product_init(prod, "Chitara", "Conteaza", "MadeInChina");
	storeObject_init(obj, 15, prod, 100, "azi", 200);

	// Add Object
	repository_AddObject(&repo, obj);

	repository_Save(&repo);
	repository_destroy(&repo);

	Repository repo2;
	repository_init(&repo2, "repoTests.txt");

	assert(_msize(repo2.objects) == sizeof(Vector));

	assert(vector_getLen(repo2.objects) == 11);

	repository_DeleteObjectByID(&repo2, 15);
	repository_Save(&repo2);

	repository_destroy(&repo2);
}
void test_repositoryAddObject()
{
	Repository repo;
	repository_init(&repo, "repoTests.txt");

	assert(_msize(repo.objects) == sizeof(Vector));

	assert(vector_getLen(repo.objects) == 10);

	// Test 2 elements
	// #1
	assert(storeObject_GetID(vector_getAt(repo.objects, 1)) == 2);
	assert(!strcmp(product_GetType(storeObject_GetProduct(vector_getAt(repo.objects, 1))), "Laptop"));
	assert(!strcmp(product_GetModel(storeObject_GetProduct(vector_getAt(repo.objects, 1))), "v3.2"));
	assert(!strcmp(product_GetManufacturer(storeObject_GetProduct(vector_getAt(repo.objects, 1))), "Lenovo"));
	assert(storeObject_GetPrice(vector_getAt(repo.objects, 1)) == 5200);
	assert(storeObject_GetQuantity(vector_getAt(repo.objects, 1)) == 69);

	// #2
	assert(storeObject_GetID(vector_getAt(repo.objects, 9)) == 10);
	assert(!strcmp(product_GetType(storeObject_GetProduct(vector_getAt(repo.objects, 9))), "Laptop"));
	assert(!strcmp(product_GetModel(storeObject_GetProduct(vector_getAt(repo.objects, 9))), "v12.3"));
	assert(!strcmp(product_GetManufacturer(storeObject_GetProduct(vector_getAt(repo.objects, 9))), "HP"));
	assert(storeObject_GetPrice(vector_getAt(repo.objects, 9)) == 2200);
	assert(storeObject_GetQuantity(vector_getAt(repo.objects, 9)) == 69);

	// Create object
	StoreObject* obj = malloc(sizeof(StoreObject));
	Product* prod = malloc(sizeof(Product));
	product_init(prod, "Chitara", "Conteaza", "Made In China");
	storeObject_init(obj, 15, prod, 100, "azi", 200);

	// Add Object
	repository_AddObject(&repo, obj);

	assert(vector_getLen(repo.objects) == 11);

	assert(!strcmp(product_GetType(storeObject_GetProduct(vector_getAt(repo.objects, 10))), "Chitara"));
	assert(!strcmp(product_GetModel(storeObject_GetProduct(vector_getAt(repo.objects, 10))), "Conteaza"));
	assert(!strcmp(product_GetManufacturer(storeObject_GetProduct(vector_getAt(repo.objects, 10))), "Made In China"));
	assert(storeObject_GetPrice(vector_getAt(repo.objects, 10)) == 100);
	assert(storeObject_GetQuantity(vector_getAt(repo.objects, 10)) == 200);

	repository_destroy(&repo);
}
예제 #3
0
void test_productGeters()
{
	Product prod;
	product_init(&prod, "Prastie", "V2.1", "China Factory");

	assert(_msize(product_GetType(&prod)) == (strlen("Prastie") + 1) * sizeof(char));
	assert(!strcmp(product_GetType(&prod), "Prastie"));

	assert(_msize(product_GetModel(&prod)) == (strlen("V2.1") + 1) * sizeof(char));
	assert(!strcmp(product_GetModel(&prod), "V2.1"));

	assert(_msize(product_GetManufacturer(&prod)) == (strlen("China Factory") + 1) * sizeof(char));
	assert(!strcmp(product_GetManufacturer(&prod), "China Factory"));

	product_destroy(&prod);
	assert(_msize(product_GetType(&prod)) == -1);
	assert(_msize(product_GetModel(&prod)) == -1);
	assert(_msize(product_GetManufacturer(&prod)) == -1);
}
예제 #4
0
void test_productCreate()
{
	Product prod;
	product_init(&prod, "Prastie", "V2.1", "China Factory");

	assert(_msize(prod.type) == (strlen("Prastie") + 1) * sizeof(char));
	assert(!strcmp(prod.type, "Prastie"));

	assert(_msize(prod.model) == (strlen("V2.1") + 1) * sizeof(char));
	assert(!strcmp(prod.model, "V2.1"));

	assert(_msize(prod.manufacturer) == (strlen("China Factory") + 1) * sizeof(char));
	assert(!strcmp(prod.manufacturer, "China Factory"));

	product_destroy(&prod);
	assert(_msize(prod.type) == -1);
	assert(_msize(prod.model) == -1);
	assert(_msize(prod.manufacturer) == -1);
}
예제 #5
0
파일: npd_main.c 프로젝트: ECYBTech/chanos
int main(int argc,char **argv)
{
/*
	Tell my thread id
*/

	app_module_inst_init();

	npd_init_tell_whoami("NpdMain",0);

    system_cpu_num = npd_system_cpu_num();

	/* TODO: how many threads should be created here need to be considered carefully later*/
/*
      Open the syslog to record the init info
*/
    npd_log_init();   

    npd_log_set_debug_value(NPD_LOG_FLAG_ALL);

    db_table_init();
	npd_dbtable_sync_startup();
/* 
	Read software version and build number
 */
 	npd_init_sw_version();
	syslog_ax_main_dbg("system software version %d.%d.%d build %d\n",sw_maj_v,sw_min_v,sw_comp_v,sw_build_v);

/*
	Read cpld and get product id and module id information.
*/	

	syslog_ax_main_dbg("init product info\n");
	product_init();


/*	
	Probe chassis slot status and build slots data
*/
	syslog_ax_main_dbg("init chassis info\n");
	npd_init_chassis_slots();

    syslog_ax_main_dbg("init ASIC chip\n");
	npd_fw_engines_init();

/*
	Wait until ASIC initialization process done
*/
	npd_fw_engine_initialization_check();
	syslog_ax_main_dbg("Local ASIC initialization done!\n");

/*
    Initialize NETIF event structure
*/
    netif_event_init();

/*
	Build vlan data
*/
	syslog_ax_main_dbg("init vlan info\n");
	npd_init_vlan();

/*
	Build port data
*/
	syslog_ax_main_dbg("init eth port info\n");
	npd_init_eth_ports();

#ifdef HAVE_POE
	syslog_ax_main_dbg("init poe info\n");
	npd_poe_init();
#endif
#ifdef HAVE_SFLOW
	npd_sflow_init();
#endif
/*
	Build trunk data
*/
	syslog_ax_main_dbg("init trunk info\n");
	npd_init_trunks();

	syslog_ax_main_dbg("init switch port info\n");
    npd_init_switch_ports();

/* 
	Init socket for packet Rx/Tx
*/
	syslog_ax_main_dbg("init packet sockets\n");
	npd_init_packet_socket();


#ifdef HAVE_PVLAN
/*
	Init private vlan
*/
	syslog_ax_main_dbg("init pvlan info\n");
	npd_pvlan_init();
#endif

#ifdef HAVE_BRIDGE_STP
    syslog_ax_main_dbg("Init stp info\n");
    npd_init_stp();
#endif


#ifdef HAVE_ACL
/*
	Init Acl Rule structure
 */
	syslog_ax_main_dbg("init acl info\n");
#ifndef HAVE_DIFF_OS
    npd_qos_init();
#endif

#endif

#ifdef HAVE_UDLD
    npd_udld_init();
#endif

#ifdef HAVE_ERPP
    npd_erpp_init();
#endif
/*
	Init static FDB database
 */
 	syslog_ax_main_dbg("init fdb info\n");
 	npd_fdb_table_init();

#ifdef HAVE_MIRROR
/*
	Init mirror init();	
*/
	syslog_ax_main_dbg("init mirror\n");
	npd_mirror_init();
#endif

#ifdef HAVE_LACP
    syslog_ax_main_dbg("Init lacp info\n");
    npd_lacp_init();
#endif

#ifdef HAVE_IGMP_SNP
	syslog_ax_main_dbg("init igmp info\n");
    igmp_snp_init();
#endif


/*
	Build L3 interface data
*/
	syslog_ax_main_dbg("init intf info\n");
	npd_intf_init();


/*
	add DHCP table
*/
#ifdef HAVE_DHCP_SNP
    syslog_ax_main_dbg("init dhcp snooping\n");
	npd_dhcp_snp_init();
	npd_ip_source_guard_init();
#endif


#ifdef HAVE_IP_TUNNEL
/*
	Init x-over-ip tunnel 
*/
	syslog_ax_main_dbg("init tunnel info\n");
	npd_tunnel_init();
#endif

/*
	Init ARP Snooping Hash table
 */
	syslog_ax_main_dbg("init arp snooping info\n");
 	npd_init_arpsnooping();
#ifdef HAVE_NPD_IPV6	
/*
	Init neighbour Snooping Hash table
 */
	syslog_ax_main_dbg("init neighbour snooping info\n");
 	npd_init_neighbour_snooping();
#endif //HAVE_NPD_IPV6

#ifdef  HAVE_VRRP
/*
    npd init tracking group
*/
    npd_tracking_init();
#endif

#ifdef HAVE_ZEBRA
/*
	add netlink sysinfo
*/
	syslog_ax_main_dbg("init route info\n");
	npd_route_init();
#endif

#ifdef HAVE_DHCP_RELAY
	npd_dhcpr_init();
#endif	

#if defined(HAVE_NPD_IPV6) && defined(HAVE_DHCPV6_RELAY)
    npd_dhcpv6_relay_table_init();
#endif
/*
	Init dbus to get ready for accept management command
*/	
	syslog_ax_main_dbg("init dbus info\n");
	npd_dbus_init();

	syslog_ax_main_dbg("init chassis probe thread\n");
	npd_init_chassis_manage_thread();	

    syslog_ax_main_dbg("wait chassis ready\n");
	npd_chassis_manage_initialization_check();
	syslog_ax_main_dbg("chassis init done!\n");

	npd_eth_port_register_notifier_hook();

#ifdef HAVE_BRIDGE_STP
	syslog_ax_main_dbg("Create rstp msg thread\n");
	npd_rstp_msg_init();
#endif
#ifdef HAVE_IGMP_SNP
	syslog_ax_main_dbg("Create IGMP snooping msg thread\n");
	npd_igmp_snp_msg_init();
#endif

#ifdef HAVE_VRRP
    syslog_ax_main_dbg("Create vrrp thread\n");
	npd_vrrp_msg_init();
#endif
#ifdef HAVE_SMART_LINK
    syslog_ax_main_dbg("Create smart-link thread\n");
	npd_smart_link_msg_init();
#endif
#ifdef HAVE_IP_TUNNEL
	/* tunnel netlink */
	syslog_ax_main_dbg("Create Tunnel Net Link thread\n");
	nam_thread_create("TunnelNetlink",(void *)npd_tunnel_recv_netlink_msg,NULL,NPD_TRUE,NPD_FALSE);
#endif
#ifdef HAVE_DLDP
	syslog_ax_main_dbg("Create DLDP msg thread\n");
	npd_dldp_msg_init();
#endif
#ifdef HAVE_AAA
	syslog_ax_main_dbg("Create ASD msg thread\n");
	npd_asd_msg_init();
#endif
#ifdef HAVE_CAPWAP_ENGINE	
	syslog_ax_main_dbg("Create CAPWAP thread\n");
    npd_capwap_init();
#endif //HAVE_CAPWAP_ENGINE
#ifdef HAVE_M4_TUNNEL
	npd_ip_tunnel_init();
#endif
/* 
	check if system has started up correctly and then open asic interrupt
*/
	syslog_ax_main_dbg("Create SFP Polling thread\n");
	nam_thread_create("SysWaitSfpPoll",(void *)npd_check_system_startup_state,NULL,NPD_TRUE,NPD_FALSE);

	syslog_ax_main_dbg("Create Attack Check Polling thread\n");
	nam_thread_create("SysAttackCheck",(void *)npd_check_system_attack,NULL,NPD_TRUE,NPD_FALSE);
#if defined(HAVE_CHASSIS_SUPPORT) || defined(HAVE_STACKING)
    if(!SYS_LOCAL_MODULE_ISMASTERACTIVE)
        nam_thread_create("NpdDBSync",(void *)npd_dbtable_thread_main,NULL,NPD_TRUE,NPD_FALSE);
#endif
    npd_app_msg_run();
#ifndef HAVE_LOGTOOL_NONE
/*
	  close the syslog 
*/

	npd_log_set_debug_value(0);
#endif
	
	syslog_ax_main_dbg("Create NPD DBUS thread\n");

	nam_thread_create("NpdDBUS",(void *)npd_dbus_thread_main,NULL,NPD_TRUE,NPD_TRUE);
	while(1)
	{
		osTimerWkAfter(10000);
	    syslog_ax_main_dbg("Mainthread is running ... \n");
	}
	return 0;
}
예제 #6
0
void disk_init(struct disk *disk)
{
	memset(disk, sizeof(*disk), 0);
	product_init(&disk->product);
	CLASS_OPS_INIT(disk->product.ops, product_ops);
}