@ -685,6 +685,92 @@ class TC(testcase.TestCase):
# verify stderr
self . verify_output ( output . err , unexpected = unexpected_results )
def test_freshclam_08_cdiff_update_twice ( self ) :
self . step_name ( ' Verify that freshclam can update from an older CVD to a newer with CDIFF patches, and then update from an older CLD to the latest with more CDIFF patches ' )
# start with this CVD
shutil . copy ( str ( TC . path_source / ' unit_tests ' / ' input ' / ' freshclam_testfiles ' / ' test-1.cvd ' ) , str ( TC . path_db / ' test.cvd ' ) )
# advertise this CVD FIRST (by sending the header response to Range requests)
shutil . copy ( str ( TC . path_source / ' unit_tests ' / ' input ' / ' freshclam_testfiles ' / ' test-3.cvd ' ) , str ( TC . path_www / ' test.cvd.advertised ' ) )
# using these CDIFFs
shutil . copy ( str ( TC . path_source / ' unit_tests ' / ' input ' / ' freshclam_testfiles ' / ' test-2.cdiff ' ) , str ( TC . path_www ) )
shutil . copy ( str ( TC . path_source / ' unit_tests ' / ' input ' / ' freshclam_testfiles ' / ' test-3.cdiff ' ) , str ( TC . path_www ) )
handler = partial ( WebServerHandler_WWW , TC . path_www )
TC . mock_mirror = Process ( target = mock_database_mirror , args = ( handler , TC . mock_mirror_port ) )
TC . mock_mirror . start ( )
if TC . freshclam_config . exists ( ) :
os . remove ( str ( TC . freshclam_config ) )
TC . freshclam_config . write_text ( '''
DatabaseMirror http : / / localhost : { port }
DNSDatabaseInfo no
PidFile { freshclam_pid }
LogVerbose yes
LogFileMaxSize 0
LogTime yes
DatabaseDirectory { path_db }
DatabaseOwner { user }
''' .format(
freshclam_pid = TC . freshclam_pid ,
path_db = TC . path_db ,
port = TC . mock_mirror_port ,
user = getpass . getuser ( ) ,
) )
#
# Now run the update for the first set up updates.
#
command = ' {valgrind} {valgrind_args} {freshclam} --config-file= {freshclam_config} --update-db=test ' . format (
valgrind = TC . valgrind , valgrind_args = TC . valgrind_args , freshclam = TC . freshclam , freshclam_config = TC . freshclam_config
)
output = self . execute_command ( command )
assert output . ec == 0 # success
expected_stdout = [
' test.cld updated ' ,
]
unexpected_results = [
' already up-to-date '
]
# verify stdout
self . verify_output ( output . out , expected = expected_stdout , unexpected = unexpected_results )
# verify stderr
self . verify_output ( output . err , unexpected = unexpected_results )
# advertise this newer CVD SECOND (by sending the header response to Range requests)
shutil . copy ( str ( TC . path_source / ' unit_tests ' / ' input ' / ' freshclam_testfiles ' / ' test-6.cvd ' ) , str ( TC . path_www / ' test.cvd.advertised ' ) )
# using these CDIFFs
shutil . copy ( str ( TC . path_source / ' unit_tests ' / ' input ' / ' freshclam_testfiles ' / ' test-4.cdiff ' ) , str ( TC . path_www ) )
shutil . copy ( str ( TC . path_source / ' unit_tests ' / ' input ' / ' freshclam_testfiles ' / ' test-5.cdiff ' ) , str ( TC . path_www ) )
shutil . copy ( str ( TC . path_source / ' unit_tests ' / ' input ' / ' freshclam_testfiles ' / ' test-6.cdiff ' ) , str ( TC . path_www ) )
#
# Now re-run the update for more updates.
#
command = ' {valgrind} {valgrind_args} {freshclam} --config-file= {freshclam_config} --update-db=test ' . format (
valgrind = TC . valgrind , valgrind_args = TC . valgrind_args , freshclam = TC . freshclam , freshclam_config = TC . freshclam_config
)
output = self . execute_command ( command )
assert output . ec == 0 # success
expected_stdout = [
' test.cld updated ' ,
]
unexpected_results = [
' already up-to-date '
]
def mock_database_mirror ( handler , port = 8001 ) :
'''
Process entry point for our HTTP Server to mock a database mirror .