1*** Settings ***
2Suite Teardown  Antivirus Teardown
3Library         Process
4Library         ${RSPAMD_TESTDIR}/lib/rspamd.py
5Resource        ${RSPAMD_TESTDIR}/lib/rspamd.robot
6Variables       ${RSPAMD_TESTDIR}/lib/vars.py
7
8*** Variables ***
9${MESSAGE2}         ${RSPAMD_TESTDIR}/messages/freemail.eml
10${MESSAGE}          ${RSPAMD_TESTDIR}/messages/spam_message.eml
11${SETTINGS_AVAST}   {symbols_enabled = [AVAST_VIRUS]}
12${SETTINGS_CLAM}    {symbols_enabled = [CLAM_VIRUS]}
13${SETTINGS_FPROT}   {symbols_enabled = [FPROT_VIRUS, FPROT2_VIRUS_DUPLICATE_DEFAULT]}
14
15*** Test Cases ***
16CLAMAV MISS
17  Run Dummy Clam  ${RSPAMD_PORT_CLAM}
18  Scan File  ${MESSAGE}
19  ...  Settings=${SETTINGS_CLAM}
20  Do Not Expect Symbol  CLAM_VIRUS
21  Shutdown clamav
22
23CLAMAV HIT
24  Run Dummy Clam  ${RSPAMD_PORT_CLAM}  1
25  Scan File  ${MESSAGE2}
26  ...  Settings=${SETTINGS_CLAM}
27  Expect Symbol  CLAM_VIRUS
28  Do Not Expect Symbol  CLAMAV_VIRUS_FAIL
29  Shutdown clamav
30
31CLAMAV CACHE HIT
32  Scan File  ${MESSAGE2}
33  ...  Settings=${SETTINGS_CLAM}
34  Expect Symbol  CLAM_VIRUS
35  Do Not Expect Symbol  CLAMAV_VIRUS_FAIL
36
37CLAMAV CACHE MISS
38  Scan File  ${MESSAGE}
39  ...  Settings=${SETTINGS_CLAM}
40  Do Not Expect Symbol  CLAM_VIRUS
41  Do Not Expect Symbol  CLAMAV_VIRUS_FAIL
42
43FPROT MISS
44  Run Dummy Fprot  ${RSPAMD_PORT_FPROT}
45  Scan File  ${MESSAGE2}
46  ...  Settings=${SETTINGS_FPROT}
47  Do Not Expect Symbol  FPROT_VIRUS
48  Do Not Expect Symbol  FPROT_EICAR
49  Shutdown fport
50
51FPROT HIT - PATTERN
52  Run Dummy Fprot  ${RSPAMD_PORT_FPROT}  1
53  Run Dummy Fprot  ${RSPAMD_PORT_FPROT2_DUPLICATE}  1  /tmp/dummy_fprot_dupe.pid
54  Scan File  ${MESSAGE}
55  ...  Settings=${SETTINGS_FPROT}
56  Expect Symbol  FPROT_EICAR
57  # Also check ordered pattern match
58  Expect Symbol  FPROT2_VIRUS_DUPLICATE_PATTERN
59  Do Not Expect Symbol  FPROT2_VIRUS_DUPLICATE_DEFAULT
60  Do Not Expect Symbol  FPROT2_VIRUS_DUPLICATE_NOPE
61  Shutdown fport
62  Shutdown fport duplicate
63
64FPROT CACHE HIT
65  Scan File  ${MESSAGE}
66  ...  Settings=${SETTINGS_FPROT}
67  Expect Symbol  FPROT_EICAR
68  Do Not Expect Symbol  CLAMAV_VIRUS
69  # Also check ordered pattern match
70  Expect Symbol  FPROT2_VIRUS_DUPLICATE_PATTERN
71  Do Not Expect Symbol  FPROT2_VIRUS_DUPLICATE_DEFAULT
72
73FPROT CACHE MISS
74  Scan File  ${MESSAGE2}
75  ...  Settings=${SETTINGS_FPROT}
76  Do Not Expect Symbol  FPROT_VIRUS
77
78AVAST MISS
79  Run Dummy Avast  ${RSPAMD_PORT_AVAST}
80  Scan File  ${MESSAGE}
81  ...  Settings=${SETTINGS_AVAST}
82  Do Not Expect Symbol  AVAST_VIRUS
83  Shutdown avast
84
85AVAST HIT
86  Run Dummy Avast  ${RSPAMD_PORT_AVAST}  1
87  Scan File  ${MESSAGE2}
88  ...  Settings=${SETTINGS_AVAST}
89  Expect Symbol  AVAST_VIRUS
90  Do Not Expect Symbol  AVAST_VIRUS_FAIL
91  Shutdown avast
92
93AVAST CACHE HIT
94  Scan File  ${MESSAGE2}
95  ...  Settings=${SETTINGS_AVAST}
96  Expect Symbol  AVAST_VIRUS
97  Do Not Expect Symbol  AVAST_VIRUS_FAIL
98
99AVAST CACHE MISS
100  Scan File  ${MESSAGE}
101  ...  Settings=${SETTINGS_AVAST}
102  Do Not Expect Symbol  AVAST_VIRUS
103  Do Not Expect Symbol  AVAST_VIRUS_FAIL
104
105*** Keywords ***
106Antivirus Teardown
107  Shutdown clamav
108  Shutdown fport
109  Shutdown avast
110
111Shutdown clamav
112  ${clamav_pid} =  Get File if exists  /tmp/dummy_clamav.pid
113  Run Keyword if  ${clamav_pid}  Shutdown Process With Children  ${clamav_pid}
114
115Shutdown fport
116  ${fport_pid} =  Get File if exists  /tmp/dummy_fprot.pid
117  Run Keyword if  ${fport_pid}  Shutdown Process With Children  ${fport_pid}
118
119Shutdown fport duplicate
120  ${fport_pid} =  Get File if exists  /tmp/dummy_fprot_dupe.pid
121  Run Keyword if  ${fport_pid}  Shutdown Process With Children  ${fport_pid}
122
123Shutdown avast
124  ${avast_pid} =  Get File if exists  /tmp/dummy_avast.pid
125  Run Keyword if  ${avast_pid}  Shutdown Process With Children  ${avast_pid}
126
127Run Dummy
128  [Arguments]  @{varargs}
129  ${process} =  Start Process  @{varargs}
130  ${pid} =  Get From List  ${varargs}  -1
131  ${pass} =  Run Keyword And Return Status  Wait Until Created  ${pid}
132  Run Keyword If  ${pass}  Return From Keyword
133  Wait For Process  ${process}
134  ${res} =  Get Process Result  ${process}
135  Log To Console  ${res.stdout}
136  Log To Console  ${res.stderr}
137  Fail  Dummy server failed to start
138
139Run Dummy Clam
140  [Arguments]  ${port}  ${found}=  ${pid}=/tmp/dummy_clamav.pid
141  Run Dummy  ${RSPAMD_TESTDIR}/util/dummy_clam.py  ${port}  ${found}  ${pid}
142
143Run Dummy Fprot
144  [Arguments]  ${port}  ${found}=  ${pid}=/tmp/dummy_fprot.pid
145  Run Dummy  ${RSPAMD_TESTDIR}/util/dummy_fprot.py  ${port}  ${found}  ${pid}
146
147Run Dummy Avast
148  [Arguments]  ${port}  ${found}=  ${pid}=/tmp/dummy_avast.pid
149  Run Dummy  ${RSPAMD_TESTDIR}/util/dummy_avast.py  ${port}  ${found}  ${pid}
150