spec/unit/clamav_spec.rb in clamav-0.2.2 vs spec/unit/clamav_spec.rb in clamav-0.3.0
- old
+ new
@@ -1,41 +1,128 @@
require File.dirname(__FILE__) + '/../spec_helper'
class ClamAV
- describe "class" do
+ describe "ClamAV" do
- before(:each) do
- @clam = ClamAV.new()
- end
-
- it "should be instance of Clamav" do
- @clam.should be_instance_of(ClamAV)
- end
-
FILES = {
'robots.txt' => CL_CLEAN,
'eicar.com' => 'Eicar-Test-Signature', # EICAR
'test.txt' => 'Eicar-Test-Signature', # EICAR in text/plain
'clam.cab' => 'ClamAV-Test-File',
'clam.exe' => 'ClamAV-Test-File',
'clam.exe.bz2' => 'ClamAV-Test-File',
'clam.zip' => 'ClamAV-Test-File',
'clam-v2.rar' => 'ClamAV-Test-File',
'clam-v3.rar' => 'ClamAV-Test-File',
- 'clam-p.rar' => 'Encrypted.RAR', # encripted RAR
- # Bug in ClamAV https://wwws.clamav.net/bugzilla/show_bug.cgi?id=1134
- # Fixed in 0.94
- 'clam-ph.rar' => 'Encrypted.RAR', # encripted RAR with encrypted both file data and headers
+ 'clam-p.rar' => CL_CLEAN, # encripted RAR
+ 'clam-ph.rar' => CL_CLEAN, # encripted RAR with encrypted both file data and headers
'program.doc' => 'W97M.Class.EB',
'Программа.doc' => 'W97M.Class.EB', # filename in UTF-8
}
- FILES.each do |file, result|
- it "should scan #{file} with result #{result.to_s}" do
- @clam.scanfile(File.join(File.dirname(__FILE__), "../clamav-testfiles/", file),
- CL_SCAN_STDOPT | CL_SCAN_BLOCKENCRYPTED).should == result
+ FILES_ENCRYPTED = {
+ 'clam-p.rar' => 'Encrypted.RAR', # encripted RAR
+ 'clam-ph.rar' => 'Encrypted.RAR', # encripted RAR with encrypted both file data and headers
+ }
+
+ describe "with default options" do
+ before(:all) do
+ @clam = ClamAV.new
end
+
+ it "should be instance of Clamav" do
+ @clam.should be_instance_of(ClamAV)
+ end
+
+
+ FILES.each do |file, result|
+ it "should scan #{file} with result #{result.to_s}" do
+ @clam.scanfile(File.join(File.dirname(__FILE__), "../clamav-testfiles/", file)).should == result
+ end
+ end
+
+ FILES_ENCRYPTED.each do |file, result|
+ it "should scan encrypted #{file} with result #{result.to_s}" do
+ @clam.scanfile(File.join(File.dirname(__FILE__), "../clamav-testfiles/", file),
+ CL_SCAN_STDOPT | CL_SCAN_BLOCKENCRYPTED).should == result
+ end
+ end
+
+ it "should return signatures count" do
+ @clam.signo.should >= 538736 # on 7/04/09
+ end
+
+ it "should not reload db when fresh" do
+ @clam.reload.should == 0
+ end
+
+ end
+
+ describe "with custom options" do
+
+ before(:all) do
+ @clam = ClamAV.new(CL_SCAN_STDOPT | CL_SCAN_BLOCKENCRYPTED)
+ end
+
+ it "should scan encrypted file with detect" do
+ @clam.scanfile(File.join(File.dirname(__FILE__), "../clamav-testfiles/",
+ 'clam-v3.rar')).should == 'ClamAV-Test-File'
+ end
+
+ it "should scan OLE2 file with not detect" do
+ @clam.scanfile(File.join(File.dirname(__FILE__), "../clamav-testfiles/", 'program.doc'),
+ CL_SCAN_RAW).should == CL_CLEAN
+ end
+
+ end
+
+ describe "with custom db options" do
+
+ before(:all) do
+ @clam = ClamAV.new(CL_SCAN_STDOPT, CL_DB_STDOPT | CL_DB_PUA)
+ end
+
+ it "should detect PUA" do
+ @clam.scanfile(File.join(File.dirname(__FILE__), "../clamav-testfiles/",
+ 'jquery.tooltip.pack.js')).should == 'PUA.Script.Packed-2'
+ end
+
+ end
+
+
+ describe "limits" do
+ before(:each) do
+ @clam = ClamAV.new
+ end
+
+ it "should set limit" do
+ @clam.setlimit(CL_ENGINE_MAX_FILES, 1).should == CL_SUCCESS
+ end
+
+ it "should do not check archive with two files" do
+ @clam.setlimit(CL_ENGINE_MAX_FILES, 1)
+ @clam.scanfile(File.join(File.dirname(__FILE__), "../clamav-testfiles/", 'multi.zip')).
+ should == CL_CLEAN
+ end
+
+ it "should get limit" do
+ @clam.getlimit(CL_ENGINE_MAX_FILES).should == 10000
+ end
+
+ it "should get db time" do
+ Time.at(@clam.getlimit(CL_ENGINE_DB_TIME)).should >= Time.now - 60*60*24 # 1 day
+ end
+
+ it "should get tmpdir == nil" do
+ @clam.getstring(CL_ENGINE_TMPDIR).should be_nil
+ end
+
+ it "should set tmpdir" do
+ @clam.setstring(CL_ENGINE_TMPDIR, '/tmp').should == CL_SUCCESS
+ @clam.getstring(CL_ENGINE_TMPDIR).should == '/tmp'
+ end
+
end
end
end