Skip to content

Commit

Permalink
Merge pull request #30 from timothyryanwalsh/dev-nohash
Browse files Browse the repository at this point in the history
dev-1.6.0
  • Loading branch information
Tim Walsh authored Aug 31, 2017
2 parents 25000da + bada231 commit 0f0f7c4
Show file tree
Hide file tree
Showing 10 changed files with 554 additions and 287 deletions.
17 changes: 17 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
language: python
python:
- "2.7"
- "3.4"
- "3.5"
- "3.6"
before_install:
- wget -qO - https://bintray.com/user/downloadSubjectPublicKey?username=bintray | sudo apt-key add -
- echo "deb http://dl.bintray.com/siegfried/debian wheezy main" | sudo tee -a /etc/apt/sources.list
- sudo apt-get update && sudo apt-get install siegfried
- sudo apt-get install clamav && sudo freshclam
- sudo apt-get install tree
- git clone git://github.com/sleuthkit/sleuthkit.git
- cd sleuthkit && ./bootstrap && ./configure && make && sudo make install && sudo ldconfig
- cd ..
script:
- python test.py
130 changes: 92 additions & 38 deletions README.md

Large diffs are not rendered by default.

568 changes: 356 additions & 212 deletions brunnhilde.py

Large diffs are not rendered by default.

7 changes: 3 additions & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

setup(
name = 'brunnhilde',
version = '1.5.3',
version = '1.6.0',
url = 'https://github.com/timothyryanwalsh/brunnhilde',
author = 'Tim Walsh',
author_email = '[email protected]',
py_modules = ['brunnhilde'],
scripts = ['brunnhilde.py'],
description = 'A Siegfried-based digital archives reporting tool for directories and disk images',
keywords = 'archives reporting characterization identification diskimages',
platforms = ['POSIX'],
platforms = ['POSIX', 'Windows'],
test_suite='test',
classifiers = [
'Development Status :: 5 - Production/Stable',
Expand All @@ -21,11 +21,10 @@
'Operating System :: MacOS',
'Operating System :: MacOS :: MacOS X',
'Operating System :: POSIX :: Linux',
'Topic :: Communications :: File Sharing',
'Operating System :: Microsoft :: Windows',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Topic :: Database',
'Topic :: System :: Archiving',
'Topic :: System :: Filesystems',
'Topic :: Utilities'
Expand Down
Binary file added test-data/diskimages/sample-floppy-fat.dd
Binary file not shown.
File renamed without changes.
File renamed without changes.
File renamed without changes
File renamed without changes
119 changes: 86 additions & 33 deletions test.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import sys
import tempfile
import unittest
from os.path import join as j


logging.basicConfig(filename='test.log', level=logging.DEBUG)
Expand All @@ -20,28 +21,21 @@
def is_non_zero_file(fpath):
return os.path.isfile(fpath) and os.path.getsize(fpath) > 0


class SelfCleaningTestCase(unittest.TestCase):
"""TestCase subclass which cleans up self.tmpdir after each test"""

def setUp(self):
super(SelfCleaningTestCase, self).setUp()

# tempdir for sample data
self.src_tmpdir = tempfile.mkdtemp()
if os.path.isdir(self.src_tmpdir):
shutil.rmtree(self.src_tmpdir)
shutil.copytree('test-data', self.src_tmpdir)

# tempdir for brunnhilde outputs
self.dest_tmpdir = tempfile.mkdtemp()
if not os.path.isdir(self.dest_tmpdir):
os.mkdirs(self.dest_tmpdir)

def tearDown(self):
for temp_dir in self.src_tmpdir, self.dest_tmpdir:
if os.path.isdir(temp_dir):
shutil.rmtree(temp_dir)

if os.path.isdir(self.dest_tmpdir):
shutil.rmtree(self.dest_tmpdir)

super(SelfCleaningTestCase, self).tearDown()

Expand All @@ -52,50 +46,109 @@ class TestBrunnhildeIntegration(SelfCleaningTestCase):
"""

def test_integration_outputs_created(self):
subprocess.call("python ./brunnhilde.py %s %s brunnhilde_test" % (self.src_tmpdir,
self.dest_tmpdir), shell=True)
subprocess.call('python brunnhilde.py -n ./test-data/files/ "%s" test' % (self.dest_tmpdir),
shell=True)
# siegfried csv and sqlite db
self.assertTrue(is_non_zero_file(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'siegfried.csv')))
self.assertTrue(is_non_zero_file(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'siegfried.sqlite')))
# html report
self.assertTrue(is_non_zero_file(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
'brunnhilde_test.html')))
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'test.html')))
# csv reports
self.assertTrue(is_non_zero_file(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'duplicates.csv')))
self.assertTrue(is_non_zero_file(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'errors.csv')))
self.assertTrue(is_non_zero_file(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'formats.csv')))
self.assertTrue(is_non_zero_file(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'formatVersions.csv')))
self.assertTrue(is_non_zero_file(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'mimetypes.csv')))
self.assertTrue(is_non_zero_file(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'unidentified.csv')))
self.assertTrue(is_non_zero_file(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'warnings.csv')))
self.assertTrue(is_non_zero_file(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'years.csv')))
# tree.txt
self.assertTrue(os.path.isfile(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
'tree.txt')))
# virus check log
self.assertTrue(os.path.isfile(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
'logs', 'viruscheck-log.txt')))
if not sys.platform.startswith('win'):
self.assertTrue(os.path.isfile(j(self.dest_tmpdir, 'test',
'tree.txt')))

def test_integration_outputs_created_diskimage(self):
subprocess.call('python brunnhilde.py -nd ./test-data/diskimages/sample-floppy-fat.dd "%s" test' % (self.dest_tmpdir),
shell=True)
# siegfried csv and sqlite db
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'siegfried.csv')))
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'siegfried.sqlite')))
# html report
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'test.html')))
# csv reports
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'duplicates.csv')))
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'errors.csv')))
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'formats.csv')))
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'formatVersions.csv')))
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'mimetypes.csv')))
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'unidentified.csv')))
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'warnings.csv')))
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'csv_reports', 'years.csv')))
# tree.txt
if not sys.platform.startswith('win'):
self.assertTrue(os.path.isfile(j(self.dest_tmpdir, 'test',
'tree.txt')))
# dfxml
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'dfxml.xml')))
# carved_files
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'carved_files', 'file1.txt.txt')))
self.assertTrue(is_non_zero_file(j(self.dest_tmpdir, 'test',
'carved_files', 'Tulips.jpg')))

def test_integration_temp_files_deleted(self):
subprocess.call("python ./brunnhilde.py %s %s brunnhilde_test" % (self.src_tmpdir,
self.dest_tmpdir), shell=True)
subprocess.call('python brunnhilde.py -n ./test-data/files/ "%s" test' % (self.dest_tmpdir),
shell=True)
# temp.html
self.assertFalse(os.path.isfile(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertFalse(os.path.isfile(j(self.dest_tmpdir, 'test',
'temp.html')))
# uniqueyears.csv
self.assertFalse(os.path.isfile(os.path.join(self.dest_tmpdir, 'brunnhilde_test',
self.assertFalse(os.path.isfile(j(self.dest_tmpdir, 'test',
'csv_reports', 'uniqueyears.csv')))

def test_integration_clamav(self):
subprocess.call('python brunnhilde.py ./test-data/files/ "%s" test' % (self.dest_tmpdir),
shell=True)
# virus log correctly written
virus_log = j(self.dest_tmpdir, 'test', 'logs', 'viruscheck-log.txt')
with open(virus_log, 'r') as f:
self.assertTrue("Scanned files: 4" in f.read())
with open(virus_log, 'r') as f:
self.assertTrue("Infected files: 0" in f.read())

def test_integration_clamav_diskimage(self):
subprocess.call('python brunnhilde.py -d ./test-data/diskimages/sample-floppy-fat.dd "%s" test' % (self.dest_tmpdir),
shell=True)
# virus log correctly written
virus_log = j(self.dest_tmpdir, 'test', 'logs', 'viruscheck-log.txt')
with open(virus_log, 'r') as f:
self.assertTrue("Scanned files: 2" in f.read())
with open(virus_log, 'r') as f:
self.assertTrue("Infected files: 0" in f.read())


if __name__ == '__main__':
unittest.main()

0 comments on commit 0f0f7c4

Please sign in to comment.