From 129fa4d45409463c6123d04cbff97a319a4d26c4 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Sat, 1 Feb 2020 18:07:05 +0000 Subject: [PATCH] [Test] Add avast test cases --- test/functional/cases/160_antivirus.robot | 33 ++++++++++++++ test/functional/configs/antivirus.conf | 6 +++ test/functional/lib/vars.py | 1 + test/functional/util/dummy_avast.py | 55 +++++++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100755 test/functional/util/dummy_avast.py diff --git a/test/functional/cases/160_antivirus.robot b/test/functional/cases/160_antivirus.robot index c34121dfd..a3e807917 100644 --- a/test/functional/cases/160_antivirus.robot +++ b/test/functional/cases/160_antivirus.robot @@ -70,6 +70,29 @@ FPROT CACHE MISS ${result} = Scan Message With Rspamc ${MESSAGE2} Check Rspamc ${result} FPROT_VIRUS inverse=1 +AVAST MISS + Run Dummy Avast ${PORT_AVAST} + ${result} = Scan Message With Rspamc ${MESSAGE} + Check Rspamc ${result} AVAST_VIRUS inverse=1 + Shutdown avast + +AVAST HIT + Run Dummy Avast ${PORT_AVAST} 1 + ${result} = Scan Message With Rspamc ${MESSAGE2} + Check Rspamc ${result} AVAST_VIRUS + Should Not Contain ${result.stdout} AVAST_VIRUS_FAIL + Shutdown avast + +AVAST CACHE HIT + ${result} = Scan Message With Rspamc ${MESSAGE2} + Check Rspamc ${result} AVAST_VIRUS + Should Not Contain ${result.stdout} AVAST_VIRUS_FAIL + +AVAST CACHE MISS + ${result} = Scan Message With Rspamc ${MESSAGE} + Check Rspamc ${result} AVAST_VIRUS inverse=1 + Should Not Contain ${result.stdout} AVAST_VIRUS_FAIL + *** Keywords *** Antivirus Setup ${PLUGIN_CONFIG} = Get File ${TESTDIR}/configs/antivirus.conf @@ -82,6 +105,7 @@ Antivirus Teardown Shutdown Process With Children ${REDIS_PID} Shutdown clamav Shutdown fport + Shutdown avast Terminate All Processes kill=True Shutdown clamav @@ -96,6 +120,10 @@ Shutdown fport duplicate ${fport_pid} = Get File if exists /tmp/dummy_fprot_dupe.pid Run Keyword if ${fport_pid} Shutdown Process With Children ${fport_pid} +Shutdown avast + ${avast_pid} = Get File if exists /tmp/dummy_avast.pid + Run Keyword if ${avast_pid} Shutdown Process With Children ${avast_pid} + Run Dummy Clam [Arguments] ${port} ${found}= ${result} = Start Process ${TESTDIR}/util/dummy_clam.py ${port} ${found} @@ -105,3 +133,8 @@ Run Dummy Fprot [Arguments] ${port} ${found}= ${pid}=/tmp/dummy_fprot.pid Start Process ${TESTDIR}/util/dummy_fprot.py ${port} ${found} ${pid} Wait Until Created ${pid} + +Run Dummy Avast + [Arguments] ${port} ${found}= + ${result} = Start Process ${TESTDIR}/util/dummy_avast.py ${port} ${found} + Wait Until Created /tmp/dummy_avast.pid diff --git a/test/functional/configs/antivirus.conf b/test/functional/configs/antivirus.conf index 9aba7bb64..d38c69a42 100644 --- a/test/functional/configs/antivirus.conf +++ b/test/functional/configs/antivirus.conf @@ -32,4 +32,10 @@ antivirus { FPROT2_VIRUS_DUPLICATE_NOPE5 = "^EICAR_"} ]; } + avast { + attachments_only = false; + symbol = "AVAST_VIRUS"; + type = "avast"; + servers = "127.0.0.1:${PORT_AVAST}"; + } } diff --git a/test/functional/lib/vars.py b/test/functional/lib/vars.py index 4559db205..d29c31c7b 100644 --- a/test/functional/lib/vars.py +++ b/test/functional/lib/vars.py @@ -15,6 +15,7 @@ PORT_PROXY = 56795 PORT_CLAM = 56796 PORT_FPROT = 56797 PORT_FPROT2_DUPLICATE = 56798 +PORT_AVAST = 56799 P0F_SOCKET = '/tmp/p0f.sock' REDIS_ADDR = u'127.0.0.1' REDIS_PORT = 56379 diff --git a/test/functional/util/dummy_avast.py b/test/functional/util/dummy_avast.py new file mode 100755 index 000000000..55945d8dc --- /dev/null +++ b/test/functional/util/dummy_avast.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +PID = "/tmp/dummy_avast.pid" + +import os +import sys +import socket +import dummy_killer +try: + import SocketServer as socketserver +except: + import socketserver + +class MyTCPHandler(socketserver.BaseRequestHandler): + + def handle(self): + self.request.sendall(b"220 DAEMON\r\n") + self.data = self.request.recv(1024).strip() + self.request.sendall(b"210 SCAN DATA\r\n") + if self.server.foundvirus: + self.request.sendall(b"SCAN /some/path/malware/xpaj/00908235ee9e267fa2f4c83fb4304c63af976cbc\t[L]0.0\t0 Eicar\\ [Heur]\r\n") + else: + self.request.sendall(b"SCAN /some/path/malware/xpaj/00908235ee9e267fa2f4c83fb4304c63af976cbc\t[+]\r\n") + self.request.sendall(b"200 SCAN OK\r\n") + self.request.close() + +if __name__ == "__main__": + HOST = "localhost" + + alen = len(sys.argv) + if alen > 1: + port = int(sys.argv[1]) + if alen >= 3: + foundvirus = bool(sys.argv[2]) + else: + foundvirus = False + else: + port = 3310 + foundvirus = False + + server = socketserver.TCPServer((HOST, port), MyTCPHandler, bind_and_activate=False) + server.allow_reuse_address = True + server.foundvirus = foundvirus + server.server_bind() + server.server_activate() + + dummy_killer.setup_killer(server) + dummy_killer.write_pid(PID) + + try: + server.handle_request() + except socket.error: + print "Socket closed" + + server.server_close() -- 2.39.5