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

📄 robouser_test.cc

📁 实现了poll/epoll/devpoll等C++封装
💻 CC
字号:
/********************* Unit Self-Test ************************************/#include "CHECK.h"#include "dprint.h"#include "robouser.h"#include "Poller_poll.h"#include "Platoon.h"#include <arpa/inet.h>#include <netinet/in.h>#include <poll.h>#include <assert.h>#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <time.h>#define time_before(a, b) (((long)((a)-(b))) < 0)int main(const int argc, const char *argv[]){#if 1	const char *host = "ftp.uu.net";	const char *user = "anonymous";	const char *pass = "robouser@";	const char *fname= "/usenet/.message";	int min_bytes_per_sec = 50;#else	const char *host = "dual";	//const char *host = "127.0.0.1";	const char *user = "ftp";	const char *pass = "me@";	const char *fname= "pub/x10k.dat";	int min_bytes_per_sec = 500;#endif	if (argc > 2) {		user = argv[1];		pass = argv[2];	}	if (argc > 4) {		host = argv[3];		fname = argv[4];	}	Sked sked;	DPRINT_ENABLE(1);	setlinebuf(stdout);	if (sked.init()) {		printf("Can't init scheduler.\n");		exit(1);	}	printf("Attempting to fetch %s from %s as user %s...\n", fname, host, user);	// kludge to avoid overstressing the throttler.  FIXME	int max_bytes_per_sec = eclock_hertz();	Poller_poll poller;	int err = poller.init();	CHECK(err, 0);	Platoon thePlatoon;	thePlatoon.init(&poller, &sked,fname,max_bytes_per_sec,			min_bytes_per_sec,1500,host,21,user,pass, NULL, 0);	thePlatoon.setVerbosity(1);	thePlatoon.set_nuserTarget(1);	time_t end = time(0) + 30;	/* We succeed if we can fetch 1000 bytes in 30 seconds */	while (true) {		int nconnecting, nalive, ndead;		if (!time_before(time(0), end)) {			printf("Test failed, took too long.\n");			exit(1);		}		/* Let the scheduler run the robots that need it */		sked.runAll(eclock());		/* See how the robots are doing */		long bytesFetched;		bytesFetched = thePlatoon.getStatus(&nconnecting, &nalive, &ndead);		if (ndead) {			printf("Test failed, user died\n");			exit(1);		}		if (bytesFetched > 1000)			break;		/* success */		/* Call poll() to find out what handles are ready for read or write */		err = poller.waitForEvents(1000);		if (err == EWOULDBLOCK)			continue;		if (err) {			perror("poll");			exit(1);		}		/* At least one handle is ready.  Deal with it. */		for (;;) {			Poller::PollEvent event;			int err;			err = poller.getNextEvent(&event);			if (err == EWOULDBLOCK)				break;			CHECK(0, err);			err = event.client->notifyPollEvent(&event);			CHECK(0, err);		}	}	printf("robouser_test: no tests failed.\n");	exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -