]> source.dussan.org Git - rspamd.git/commitdiff
[Test] Add avast test cases
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 1 Feb 2020 18:07:05 +0000 (18:07 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 1 Feb 2020 18:07:05 +0000 (18:07 +0000)
test/functional/cases/160_antivirus.robot
test/functional/configs/antivirus.conf
test/functional/lib/vars.py
test/functional/util/dummy_avast.py [new file with mode: 0755]

index c34121dfd8b7bb176c35d534acc297021e0f11f1..a3e807917bea53f8759f9b4300ee6554117060d6 100644 (file)
@@ -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
index 9aba7bb643d2b09cd02385ed98c9e1bdfced417e..d38c69a42710d150720322a962bca5456a9db617 100644 (file)
@@ -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}";
+  }
 }
index 4559db2052c8ffb15c956733d03e30d23e1f5784..d29c31c7b76039e4597d7877baa5382e04f7e164 100644 (file)
@@ -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 (executable)
index 0000000..55945d8
--- /dev/null
@@ -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()