前台传递字符串reqbuf:

ftp服务器IP\r\n端口\r\n用户名\r\n密码\r\nftp路径\r\n\r\n

解析reqbuf,重新组装成系统命令,去执行ftptest.sh脚本,

调用system函数,执行以上系统命令,结果日志打印到/tmp/ftptest.log中,读取日志进行结果判断:如果是230,则登录成功。

登录成功时,日志记录如下:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ip:192.168.51.206

端口:21

用户名:ftp

密码:123456

ftptest.sh脚本:

#!/bin/bash

logfile="/tmp/ftptest.log"

ftp -i -n -v<<EOF>$logfile

open $1 $2    (IP、端口)

user $3 $4     (用户名、密码)

cd $5         (路径)

bye

EOF

测试结果打印到/tmp/ftptest.log,通过查看log文件中的状态码判断测试成功

logroot@webwall:/home/xiachengjiao/nnba/nnba/mise/calls# vi /tmp/ftptest.log

调试日志目录:

Vi /webwall/var/run/debug.ftptest

while(!feof(fp))

{

if(fgets(statusnum, sizeof(statusnum), fp) == NULL)

{

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "get statusnum error!\n");

ERR

}

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "statusnum=%s\n", statusnum);

if((testdir == 0) && ((ackstatus = strncmp(statusnum, "230", 3)) == 0))

{

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务登录成功\n");

break;

}

else if((testdir == 1) && ((ackstatus = strncmp(statusnum, "250", 3)) == 0))

{

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务器文件路径测试成功\n");

break;

}

}

if(feof(fp))

{

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务器测试失败\n");

ERR

}

这个程序不能测试出ip或端口等配置错误的情况。错误出在feof()函数上面;。当/tmp/ftptest.log日志内容如下:

Not connected.

Not connected.

程序执行结果是:

get statusnum error!

程序修改如下:

if(fgets(statusnum, sizeof(statusnum), fp) == NULL)

{

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "get statusnum error!\n");

ERR

}

while(!feof(fp))

{

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "statusnum=%s\n", statusnum);

if((testdir == 0) && ((ackstatus = strncmp(statusnum, "230", 3)) == 0))

{

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务登录成功\n");

break;

}

else if((testdir == 1) && ((ackstatus = strncmp(statusnum, "250", 3)) == 0))

{

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务器文件路径测试成功\n");

break;

}

#if 0

if(fgets(statusnum, sizeof(statusnum), fp) == NULL)

{

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "get statusnum error!\n");

ERR

}

#endif

fgets(statusnum, sizeof(statusnum), fp);

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "statusnum=%s\n", statusnum);

}

if(feof(fp))

{

DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务器测试失败\n");

ERR

}

当log日志内容不变时,程序执行结果是

[30881]2013-05-21 15:53:45 ftptest.c[83]:       DoService

statusnum=Not connected.

[30881]2013-05-21 15:53:45 ftptest.c[102]:      DoService

statusnum=Not connected.

[30881]2013-05-21 15:53:45 ftptest.c[83]:       DoService

statusnum=Not connected.

[30881]2013-05-21 15:53:45 ftptest.c[102]:      DoService

statusnum=Not connected.

[30881]2013-05-21 15:53:45 ftptest.c[106]:      DoService

ftp服务器测试失败

分析:feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。

EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,普通字符的ASCⅡ代码的范围是32到127(十进制),EOF的16进制代码为0x1A(十进制为26),因此可以用EOF作为文件结束标志。[1]

当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。

“C”语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。

那么,位置和内容到底有何不同呢?举个简单的例子,比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走,摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){...}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。

在“C”文件读取操作时不能完全依赖于“while(!feof(FP)){...}”的判断。下面代码是改进后的代码,该代码执行后output文件内容和input文件内容一致,与使用“while(!feof(FP)){...}”相比,input文件的结尾符号(EOF)没有被读入到output文件中。

ftp服务器测试:脚本实现

bug:测试错误的时候不能检测出来。程序逻辑有问题,。,,所以以后做单元测试的时候必须要把可能出现的情况都测试全面。

ftp服务器测试的更多相关文章

  1. Linux篇---ftp服务器的搭建

    一.前述 企业中linux搭建ftp服务器还是很实用的,所以本文针对centoos7和centoos6搭建服务器教程做个总结. 二.具体 1.显示如下图则表示已安装 vsftp软件.如果未显示则需要安 ...

  2. Java语言实现简单FTP软件------>源码放送(十三)

    Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件----- ...

  3. linux系统下修改文件夹目录权限

    linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...

  4. CentOS7.2下PXE+kickstart自动化安装系统

    一.实验环境 操作系统:CentOS Linux release 7.2.1511 (Core) 网卡地址:192.168.100.147/24 光盘镜像:CentOS-7-x86_64-Minima ...

  5. 综合练习2 设置访问权限,Easy-IP访问外网,内外网访问

    实验拓扑图: 实验要求: 1.pc.路由.交换基本配置,vlan间路由互通. 2.vlan20.vlan30可以访问FTP,VLAN10不允许访问FTP. 3.AR1通过easy-ip方式实现私网地址 ...

  6. yum仓库配置与内网源部署记录

    使用yum的好处主要就是在于能够自动解决软件包之间的依赖.这使得维护更加容易.这篇文章主要就是记录部署内网源的操作过程以及yum工具如何使用 因为需要.数据库要从Oracle迁移至MySQL.在部署M ...

  7. jmeter接口测试笔记

    1.接口测试基础 API:Application Programming Interface,即调用应用程序的通道. 接口测试遵循点 接口的功能性实现:检查接口返回的数据与预期结果的一致性. 测试接口 ...

  8. 『动善时』JMeter基础 — 1、JMeter介绍

    1.什么是JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试.它最初被设计用于Web应用测试,但后来扩展到其他测试领域. (Apache ...

  9. 8.仿阿里云虚拟云服务器的FTP(包括FTP文件夹大小限制)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#iis 原文:http://dnt.dkill.net/Ar ...

随机推荐

  1. 04_过滤器Filter_02_Filter解决中文乱码问题

    [过滤器解决中文乱码问题实例] [工程截图] [web.xml] <?xml version="1.0" encoding="UTF-8"?> &l ...

  2. 九度OJ 1451 不容易系列之一 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1451 题目描述: 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若 ...

  3. 状态模式(State Pattern)

    状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类. 这个模式将状态封装成为独立的类,并将动作委托到代表当前对象的对象,这样行为就与拥有状态类解耦了. 从客户的角度来看,对象的 ...

  4. Nginx(一)初始环境的安装(php5.3+mysql5.1+fastcgi…)

    关参考资源http://www.lnmp.org/index.html \\LNMP一键安装包http://www.howtocn.org/nginx \\Nginx模块参考手册中文版http://b ...

  5. Sqlserver知识点1

    1.字符串     字符数据类型是SQL Server 中最常用的数据类型之一,它可以用来存储各种字母.数字符号和特殊符号.在使用字符数据类型时,需要在其前后加上英文单引号或者双引号. (1)char ...

  6. corosync+pacemaker and drbd实现mysql高可用集群

    DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的 ...

  7. QTcpsocket 实现FTP

    http://blog.163.com/modingfa_002/blog/static/1109254662013111510358109/ http://baike.baidu.com/link? ...

  8. CSS中IE8和chrom像素百分比计算差异

    IE8中和chrome在计算像素百分比上,IE8舍一位取元素像素大小,chrome则使用四舍五入取元素像素大小: 比如:<body><div stype=“width:30%”> ...

  9. BZOJ 1629: [Usaco2007 Demo]Cow Acrobats

    Description Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away a ...

  10. [原博客] POJ 2505 A multiplication game 组合游戏

    题目链接题意: 有一个数p=1,甲乙两人轮流操作,每次可以把p乘2~9中的一个数,给定一个n,当一个人操作后p>=n,那么这个人赢,问先手是否必胜. 必胜状态:存在一种走法走到一个必败状态. 必 ...