📄 ftp_client_proto_test.cc
字号:
#include "ftp_client_proto.h"#include <assert.h>#include <ctype.h>#include <errno.h>#include <netinet/in.h>#include <string.h>#include <stdio.h>#include <stdlib.h>void check(int d, int e, int line) { if (d != e) { printf("check: test failed: %d != %d at line %d\n", d, e, line); exit(1); }}void strcheck(const char * d, const char * e, int line){ if (!d || !e) { printf("strcheck: test failed: One of the character string is null: %s %s\n", d, e); exit(1); } if (strcmp(d, e)) { printf("strcheck: test failed: '%s' != '%s' at line %d\n", d, e, line); exit(1); }}void statuscheck(const char * d, int e, int line){ if (!d) { printf("strcheck: test failed: Character string is null\n"); exit(1); } if (atoi(d) != e) { printf("statuscheck: test failed: atoi(%s) != %d at line %d\n", d, e, line); exit(1); }}#define CHECK(d, e) check(d, e, __LINE__)#define STRCHECK(d, e) strcheck(d, e, __LINE__)#define STATUSCHECK(d, e) statuscheck(d, e, __LINE__)#define SLEN 1024/* Main program to test the ftp client protocol module. * Doesn't need any networking; simulates the server itself. * Prints message and exits with nonzero status if any test fails. */int main(int argc, char **argv){ ftp_client_proto_t ftp; int err; char sbuf[SLEN]; const char *p; (void) argc; (void) argv; ftp.init(); CHECK(ftp.isOutputReady(), false); /*---------------------*/ /* Test login() method */ err = ftp.login("user", "password"); /* start login */ CHECK(err,0); /* Simulate server's response to connect */ CHECK(ftp.isInputReady(), true); err = ftp.giveInput("221 Hello, welcome to ftp.null.net"); CHECK(err,0); CHECK(ftp.isOutputReady(), true); p = ftp.getOutput(); STRCHECK(p, "USER user\r\n"); /* it should send USER... */ err = ftp.advanceOutput(); CHECK(err,0); CHECK(ftp.isOutputReady(), false); /* Simulate server's response to USER */ CHECK(ftp.isInputReady(), true); err = ftp.giveInput("331 User name OK, need password."); CHECK(err,0); CHECK(ftp.isOutputReady(), true); p = ftp.getOutput(); STRCHECK(p, "PASS password\r\n"); /* followed by PASS. */ err = ftp.advanceOutput(); CHECK(err,0); CHECK(ftp.isOutputReady(), false); CHECK(ftp.getStatus(sbuf,SLEN), 0); /* command shouldn't end... */ /* Simulate server's response to PASS */ CHECK(ftp.isInputReady(), true); err = ftp.giveInput("230 Login successful."); CHECK(err,0); CHECK(ftp.isOutputReady(), false); CHECK(ftp.getStatus(sbuf, SLEN), 230); /* ... until 230 comes back. */ STRCHECK(sbuf, "230 Login successful."); /*------------------*/ /* Test cd() method */ err = ftp.cd("pub"); CHECK(err,0); CHECK(ftp.isOutputReady(), true); p = ftp.getOutput(); STRCHECK(p, "CWD pub\r\n"); err = ftp.advanceOutput(); CHECK(err,0); CHECK(ftp.getStatus(sbuf, SLEN), 0); CHECK(ftp.isOutputReady(), false); /* Simulate server's response to CWD */ CHECK(ftp.isInputReady(), true); err = ftp.giveInput("250 CWD command successful."); CHECK(err,0); CHECK(ftp.getStatus(sbuf, SLEN), 250); STRCHECK(sbuf, "250 CWD command successful."); /*--------------------*/ /* Test type() method */ err = ftp.type("I"); CHECK(err,0); CHECK(ftp.isOutputReady(), true); p = ftp.getOutput(); STRCHECK(p, "TYPE I\r\n"); err = ftp.advanceOutput(); CHECK(err,0); CHECK(ftp.getStatus(sbuf, SLEN), 0); CHECK(ftp.isOutputReady(), false); /* Simulate server's response to TYPE */ CHECK(ftp.isInputReady(), true); err = ftp.giveInput("200 TYPE command successful."); CHECK(err,0); CHECK(ftp.getStatus(sbuf, SLEN), 200); STRCHECK(sbuf, "200 TYPE command successful."); /*------------------*/ /* Test ls() method */ /* not written yet */ /* etc. */ printf("No tests failed.\n"); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -