1- #!/usr/bin/env python
2- # -*- coding: utf-8 -*-
3- from __future__ import unicode_literals
41import clamd
52from io import BytesIO
6- from contextlib import contextmanager
7- import tempfile
8- import shutil
9- import os
10- import stat
113
124import pytest
135
14- mine = (stat .S_IREAD | stat .S_IWRITE )
15- other = stat .S_IROTH
16- execute = (stat .S_IEXEC | stat .S_IXOTH )
176
18-
19- @contextmanager
20- def mkdtemp (* args , ** kwargs ):
21- temp_dir = tempfile .mkdtemp (* args , ** kwargs )
22- try :
23- yield temp_dir
24- finally :
25- shutil .rmtree (temp_dir )
26-
27-
28- class TestUnixSocket (object ):
7+ class TestNetworkSocket (object ):
8+ """
9+ Test suite expects ClamAV running at default host and port (localhost, 3310)
10+ """
2911 kwargs = {}
3012
13+ @pytest .fixture (autouse = True )
3114 def setup (self ):
32- self .cd = clamd .ClamdUnixSocket (** self .kwargs )
15+ self .cd = clamd .ClamdNetworkSocket (** self .kwargs )
3316
3417 def test_ping (self ):
35- assert self .cd .ping ()
18+ result = self .cd .ping ()
19+ assert result == "PONG"
3620
3721 def test_version (self ):
38- assert self .cd .version ().startswith ("ClamAV" )
22+ version = self .cd .version ()
23+ assert version == "ClamAV 1.5.1/27914/Mon Feb 16 07:24:56 2026"
3924
4025 def test_reload (self ):
4126 assert self .cd .reload () == 'RELOADING'
4227
43- def test_scan (self ):
44- with tempfile .NamedTemporaryFile ('wb' , prefix = "python-clamd" ) as f :
45- f .write (clamd .EICAR )
46- f .flush ()
47- os .fchmod (f .fileno (), (mine | other ))
48- expected = {f .name : ('FOUND' , 'Eicar-Test-Signature' )}
49-
50- assert self .cd .scan (f .name ) == expected
51-
52- def test_unicode_scan (self ):
53- with tempfile .NamedTemporaryFile ('wb' , prefix = u"python-clamdλ" ) as f :
54- f .write (clamd .EICAR )
55- f .flush ()
56- os .fchmod (f .fileno (), (mine | other ))
57- expected = {f .name : ('FOUND' , 'Eicar-Test-Signature' )}
58-
59- assert self .cd .scan (f .name ) == expected
60-
61- def test_multiscan (self ):
62- expected = {}
63- with mkdtemp (prefix = "python-clamd" ) as d :
64- for i in range (10 ):
65- with open (os .path .join (d , "file" + str (i )), 'wb' ) as f :
66- f .write (clamd .EICAR )
67- os .fchmod (f .fileno (), (mine | other ))
68- expected [f .name ] = ('FOUND' , 'Eicar-Test-Signature' )
69- os .chmod (d , (mine | other | execute ))
70-
71- assert self .cd .multiscan (d ) == expected
7228
7329 def test_instream (self ):
7430 expected = {'stream' : ('FOUND' , 'Eicar-Test-Signature' )}
@@ -78,10 +34,10 @@ def test_insteam_success(self):
7834 assert self .cd .instream (BytesIO (b"foo" )) == {'stream' : ('OK' , None )}
7935
8036
81- class TestUnixSocketTimeout (TestUnixSocket ):
37+ class TestUnixSocketTimeout (TestNetworkSocket ):
8238 kwargs = {"timeout" : 20 }
8339
8440
8541def test_cannot_connect ():
8642 with pytest .raises (clamd .ConnectionError ):
87- clamd .ClamdUnixSocket ( path = "/tmp/404 " ).ping ()
43+ clamd .ClamdNetworkSocket ( host = "another_host " ).ping ()
0 commit comments