Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 隧道接口单元测试_Python_Unit Testing_Unix_Python 2.7_Tunnel - Fatal编程技术网

Python 隧道接口单元测试

Python 隧道接口单元测试,python,unit-testing,unix,python-2.7,tunnel,Python,Unit Testing,Unix,Python 2.7,Tunnel,我制作了一个Tun类,其中包含: 问题不在于如何编写隧道,而在于如何编写测试用例,以确保它在使用python单元测试的类unix操作系统中正常工作 我应该向it部门写些什么来确保其正常工作?可能是ARP请求、ICMP、DNS数据包或其他任何内容: class TestTunnel(unittest.TestCase): def setUp(self): self.tun = Tun(name='tun0', addr='192.168.0.23', netmask='2

我制作了一个Tun类,其中包含:

问题不在于如何编写隧道,而在于如何编写测试用例,以确保它在使用python单元测试的类unix操作系统中正常工作

我应该向it部门写些什么来确保其正常工作?可能是ARP请求、ICMP、DNS数据包或其他任何内容:

class TestTunnel(unittest.TestCase):

    def setUp(self):
        self.tun = Tun(name='tun0', addr='192.168.0.23', netmask='255.255.255.0',mtu=1500)

    def test_tunnel(self):
        self.tun.write(?????)
        self.assertEqual(self.tun.read(),????)
编辑1:

最后我通过这个代码得到了它:

from select import select
import dpkt
import struct

class TunnelTestCase( unittest.TestCase):

    def setUp(self):

        self.tun = Tun(name='testtun',
                       addr='192.168.6.92',
                       dstaddr='192.168.6.93',
                       netmask='255.255.255.0', 
                       mtu=1500)
        self.tun.up()

    def _ip2str(self,ip):
        return '.'.join([str(i) for i in struct.unpack('!BBBB',ip)])

    def test_echo(self):
        reqPack = dpkt.ip.IP('E\x00\x00T\x00\x00@\x00@\x01\xac\x9f\xc0\xa8\x06]\xc0\xa8\x06\\\x08\x00\x1c\xae\t\xc7\x00\x01\x0f\x8adQq\xab\x01\x00\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./01234567')
        self.tun.write(reqPack.pack())

        r,_w,_ex = select([self.tun],[],[],4)
        if len(r) and r[0] == self.tun:
            replyPack = dpkt.ip.IP(self.tun.read())
            self.assertEqual(self._ip2str(replyPack.src), self.tun.addr)
            self.assertEqual(self._ip2str(replyPack.dst), self.tun.dstaddr)
            return

        self.assert_(False, 'ICMP Echo timeout, the tunnel interface may not works properly in your system.')

您可以简单地从pytun借用测试用例并简化它们。事实上,我认为测试实际的连接性是在他们的包中完成的,因此,除非您尝试测试一些显著不同的东西,否则您可能可以不经修改就运行这些测试


由于它是一个原始套接字,您只需尝试从客户端发送一条简单的ascii消息,并验证服务器是否接收到该消息,然后让服务器发回一个确认,您可以对其进行断言。

我需要自动测试tun,montag测试需要在命令提示符下运行,并传递一些参数才能工作。因此,我计划以服务器-客户机方式编写两个套接字,以便通过隧道接口进行通信。客户端发送任何东西,服务器只回显接收到的任何东西。你的想法是什么?我只需要在setup方法中设置服务器,然后通过命令行手动传入以前需要传入的内容。您可能需要将其分叉到另一个线程上,因为它可能正在阻塞(这也意味着您需要一种方法来杀死另一个线程)。是的,只需从客户端执行一个简单的回显“Hello World”,并在从服务器和客户端的套接字读取数据时对此进行断言。您可以以自动化的方式进行所有设置,无需通过传递命令行参数手动设置服务器即可运行测试。
from select import select
import dpkt
import struct

class TunnelTestCase( unittest.TestCase):

    def setUp(self):

        self.tun = Tun(name='testtun',
                       addr='192.168.6.92',
                       dstaddr='192.168.6.93',
                       netmask='255.255.255.0', 
                       mtu=1500)
        self.tun.up()

    def _ip2str(self,ip):
        return '.'.join([str(i) for i in struct.unpack('!BBBB',ip)])

    def test_echo(self):
        reqPack = dpkt.ip.IP('E\x00\x00T\x00\x00@\x00@\x01\xac\x9f\xc0\xa8\x06]\xc0\xa8\x06\\\x08\x00\x1c\xae\t\xc7\x00\x01\x0f\x8adQq\xab\x01\x00\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./01234567')
        self.tun.write(reqPack.pack())

        r,_w,_ex = select([self.tun],[],[],4)
        if len(r) and r[0] == self.tun:
            replyPack = dpkt.ip.IP(self.tun.read())
            self.assertEqual(self._ip2str(replyPack.src), self.tun.addr)
            self.assertEqual(self._ip2str(replyPack.dst), self.tun.dstaddr)
            return

        self.assert_(False, 'ICMP Echo timeout, the tunnel interface may not works properly in your system.')