def test_NEW_file_already_in_db_not_exists( self ): self.engine.db.add( file = 'filename', hash = 'xxx' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) ev.action = Event.ACTION.MISSING # Функция должна обнаружить пропажу файла, так как в базе он есть ev.isInDB = True self.assertEqual( ev, newEv )
def test_MISSING_file_not_in_db_exists( self ): ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.MISSING with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) ev.action = Event.ACTION.NEW # Пришло событие об удалении файла, а он есть, добавляем в базу. ev.isInDB = False ev.info = None self.assertEqual( ev, newEv )
def test_MISSING_file_already_in_db_exists_bad_hash( self ): self.engine.db.add( file = 'filename', hash = 'xxx' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.MISSING with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) ev.isInDB = True ev.action = Event.ACTION.BAD_HASH # Файл на диске есть, в базе есть, но они не совпали. ev.info = self.engine.db.find( file = 'filename' ) self.assertEqual( ev, newEv )
def test_NEW_file_already_in_db_exists_bad_hash( self ): self.engine.db.add( file = 'filename', hash = 'xxx' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) ev.isInDB = True ev.action = Event.ACTION.BAD_HASH # Так как оказывается, что тот файл, который сейчас на диске не совпадает с тем, что в базе. ev.info = self.engine.db.find( file = 'filename' ) self.assertEqual( ev, newEv )
def test_MISSING_file_already_in_db_not_exists( self ): self.engine.db.add( file = 'filename' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.MISSING newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) ev.isInDB = True self.assertEqual( ev, newEv ) # Файла на диске нет, а в базе есть - пропажа файла.
def test_UPDATED_file_not_in_db( self ): ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.UPDATED with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) self.assertEqual( newEv.action, Event.ACTION.NEW ) self.assertEqual( newEv.isInDB, False )
def test_MISSING_file_already_in_db_exists_good_hash( self ): self.engine.db.add( file = 'filename', hash = None ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.MISSING with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) self.assertEqual( Event.ACTION.NOT_PROCESSING, newEv.action ) # Файл на диске совпал с тем, что в базе - игнорируем.
def test_UPDATED_file( self ): self.engine.db.add( file = 'filename', hash = 'xxx' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0], 'new_hash' ) ev.action = Event.ACTION.UPDATED self.engine.processEvent( ev ) elem = self.engine.db.find( hash = 'new_hash' ) self.assertEqual( len( self.engine.db.find( hash = 'xxx' ) ), 0 ) self.assertEqual( len( elem ), 1 ) self.assertEqual( elem[0]['file'], ev.fileName )
def test_RENAMED_file_not_in_db( self ): ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.RENAMED with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: new_path = os.path.join( self.DEFAULT_CFG[0], 'new_filename' ) newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action, new_path ) exists_test.assert_called_once_with( ev.path ) self.assertEqual( Event.ACTION.NEW, newEv.action ) # Файл был переименован, но в базе его нет - новый файл self.assertEqual( new_path, newEv.path )
def test_RENAMED_dir( self ): ev = Event( '', 'dir', True, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.RENAMED with unittest.mock.patch( 'os.path.isdir', return_value = True ) as isdir_test: new_path = os.path.join( self.DEFAULT_CFG[0], 'new_dir' ) newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action, new_path ) isdir_test.assert_called_once_with( ev.path ) self.assertEqual( Event.ACTION.RENAMED, newEv.action ) # Папка была переименована, в базе есть - нужно обновить базу self.assertEqual( new_path, newEv.info )
def test_NEW_file_not_in_db_exists( self ): ev = Event( 'filename', '', False,self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) ev.isInDB = False ev.info = None self.assertEqual( ev, newEv )
def test_UPDATED_file_already_in_db_diff_hash( self ): self.engine.db.add( file = 'filename', hash = 'same' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.UPDATED with unittest.mock.patch( 'fileutils.get_hash', return_value = 'same' ) as hash_test: with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) exists_test.assert_called_once_with( ev.path ) hash_test.assert_called_once_with( ev.path ) self.assertEqual( newEv.action, Event.ACTION.NOT_PROCESSING )
def test_NEW_file_not_in_db_another_file_in_db_with_same_hash( self ): self.engine.db.add( file = 'duplicate', hash = 'xxx' ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: with unittest.mock.patch( 'fileutils.get_hash', return_value = 'xxx' ) as get_hash_patch: newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) get_hash_patch.assert_called_once_with( ev.path ) exists_test.assert_called_once_with( ev.path ) self.assertEqual( Event.ACTION.DUPLICATE, newEv.action ) # Файл на диске имеет такой же хэш как и файл в базе - дубликат self.assertEqual( self.engine.db.find( file = 'duplicate' ), newEv.info )
def test_RENAMED_file_already_in_db( self ): self.engine.db.add( file = 'filename', hash = None ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.RENAMED with unittest.mock.patch( 'os.path.exists', return_value = True ) as exists_test: new_path = os.path.join( self.DEFAULT_CFG[0], 'new_filename' ) newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action, new_path ) exists_test.assert_called_once_with( ev.path ) self.assertEqual( Event.ACTION.RENAMED, newEv.action ) # Файл был переименован, в базе есть - нужно обновить базу self.assertEqual( ev.path, newEv.path ) self.assertEqual( get_file_and_dir( new_path, self.DEFAULT_CFG[0], False ), newEv.info )
def construct_event( self, action, d = '', isdir = False, name = 'filename' ): ev = Event( name, d, isdir, self.DEFAULT_CFG[0] ) ev.action = action return ev
def test_NEW_file_not_in_db_not_exists( self ): ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) self.assertEqual( newEv.action, Event.ACTION.NOT_PROCESSING )
def test_MISSING_file_not_in_db_not_exists( self ): ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.MISSING newEv = self.engine.prepareEvent( ev.path, self.DEFAULT_CFG[0], ev.action ) self.assertEqual( newEv.action, Event.ACTION.NOT_PROCESSING ) # Файл, который удалили, и так не было в базе - не обрабатываем его.
def test_double_item_in_db( self ): self.engine.db.add( file = 'filename', hash = None ) self.engine.db.add( file = 'filename', hash = None ) ev = Event( 'filename', '', False, self.DEFAULT_CFG[0] ) ev.action = Event.ACTION.NEW self.assertRaises( RuntimeError, self.engine.prepareEvent, ev.path, self.DEFAULT_CFG[0], ev.action )