Changeset 6625


Ignore:
Timestamp:
Mar 26, 2009, 11:15:20 AM (15 years ago)
Author:
rwilson
Message:

Added file digest functions and test code.

Location:
anuga_core/source/anuga/utilities
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • anuga_core/source/anuga/utilities/system_tools.py

    r6620 r6625  
    1010import getpass
    1111import tarfile
     12import md5
    1213
    1314
     
    387388        o.extract(member, target_dir)
    388389    o.close()
     390
     391
     392##
     393# @brief Return a hex digest (MD5) of a given file.
     394# @param filename Path to the file of interest.
     395# @return A hex digest string (16 bytes).
     396# @note Uses MD5 digest.
     397def get_file_hexdigest(filename):
     398    '''Get a hex digest of a file.'''
     399   
     400    BLOCKSIZE = 1024*1024*10
     401
     402    m = md5.new()
     403    fd = open(filename, 'r')
     404   
     405    while True:
     406        data = fd.read(BLOCKSIZE)
     407        if len(data) == 0:
     408            break
     409        m.update(data)
     410       
     411    fd.close()
     412    return m.hexdigest()
     413
     414
     415##
     416# @brief Create a file containing a hexdigest string of a data file.
     417# @param data_file Path to the file to get the hexdigest from.
     418# @param digest_file Path to hexdigest file to create.
     419# @note Uses MD5 digest.
     420def make_digest_file(data_file, digest_file):
     421    '''Create a file containing the hex digest string of a data file.'''
     422   
     423    hexdigest = get_file_hexdigest(data_file)
     424    fd = open(digest_file, 'w')
     425    fd.write(hexdigest)
     426    fd.close()
     427
     428
  • anuga_core/source/anuga/utilities/test_system_tools.py

    r6615 r6625  
    164164        test_it(source, expected)
    165165
     166
    166167    def test_tar_untar_files(self):
    167168        '''Test that tarring & untarring files is OK.'''
     
    209210        os.remove(tar_filename)
    210211
     212
     213    def test_file_digest(self):
     214        '''Test that file digest functions give 'correct' answer.
     215       
     216        Not a good test as we get 'expected_digest' from a digest file,
     217        but *does* alert us if the digest algorithm gives us a different string.
     218        '''
     219
     220        # we expect this digest string from the data file
     221        expected_digest = '831a1dde6edd365ec4163a47871fa21b'
     222
     223        # prepare test directory and filenames
     224        tmp_dir = tempfile.mkdtemp()
     225        data_file = os.path.join(tmp_dir, 'test.data')
     226        digest_file = os.path.join(tmp_dir, 'test.digest')
     227
     228        # create the data file
     229        data_line = 'The quick brown fox jumps over the lazy dog. 0123456789\n'
     230        fd = open(data_file, 'w')
     231        for line in range(100):
     232            fd.write(data_line)
     233        fd.close()
     234
     235        # create the digest file
     236        make_digest_file(data_file, digest_file)
     237
     238        # get digest string for the data file
     239        digest = get_file_hexdigest(data_file)
     240
     241        # check that digest is as expected, string
     242        msg = ("Digest string wrong, got '%s', expected '%s'"
     243               % (digest, expected_digest))
     244        self.failUnless(expected_digest == digest, msg)
     245
     246        # check that digest is as expected, file
     247        msg = ("Digest file wrong, got '%s', expected '%s'"
     248               % (digest, expected_digest))
     249        fd = open(digest_file, 'r')
     250        digest = fd.readline()
     251        fd.close()
     252        self.failUnless(expected_digest == digest, msg)
     253
     254
    211255#-------------------------------------------------------------
    212256if __name__ == "__main__":
Note: See TracChangeset for help on using the changeset viewer.