Skip to content

Commit

Permalink
add unit tests of util.py
Browse files Browse the repository at this point in the history
  • Loading branch information
weaverba137 committed Nov 19, 2018
1 parent 9663ba7 commit b18c2fe
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 8 deletions.
65 changes: 59 additions & 6 deletions hpsspy/test/test_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@
from .. import HpssOSError
from ..util import HpssFile, get_hpss_dir, get_tmpdir, hsi, htar

mock_available = True
try:
from unittest.mock import patch, MagicMock
except:
mock_available = False

class MockHpss(unittest.TestCase):
"""Provide access to mock HPSS commands.
Expand Down Expand Up @@ -127,6 +132,58 @@ def test_HpssFile(self):
else:
self.assertIsNone(f.htar_contents())
self.assertEqual(f.st_mtime, int(mtimes[i].strftime('%s')))
#
# Test funky modes.
#
f = HpssFile(lspath, 's', 'rw-rw----', 1, 'bweaver', 'bweaver',
1000, 'Feb', 2, '2016', 'fake.socket')
with self.assertRaises(AttributeError) as err:
m = f.st_mode
self.assertEqual(str(err.exception),
"Unknown file type, s, for fake.socket!")

@unittest.skipUnless(mock_available, "Skipping test that requires unittest.mock.")
def test_HpssFile_isdir(self):
"""Test the isdir property on symbolic links.
"""
lspath = '/home/b/bweaver'
with patch('hpsspy.os.stat') as s:
m = MagicMock()
m.isdir = True
s.return_value = m
f = HpssFile(lspath, 'l', 'rwxrwxrwx', 1, 'bweaver', 'bweaver',
21, 'Aug', 22, '2014', 'cosmo@ -> /nersc/projects/cosmo')
self.assertTrue(f.islink)
self.assertTrue(f.isdir)
s.assert_called_with('/nersc/projects/cosmo')
with patch('hpsspy.os.stat') as s:
m = MagicMock()
m.isdir = False
s.return_value = m
f = HpssFile(lspath, 'l', 'rwxrwxrwx', 1, 'bweaver', 'bweaver',
21, 'Aug', 22, '2014', 'cosmo@ -> cosmo.txt')
self.assertTrue(f.islink)
self.assertFalse(f.isdir)
s.assert_called_with('/home/b/bweaver/cosmo.txt')

@unittest.skipUnless(mock_available, "Skipping test that requires unittest.mock.")
def test_HpssFile_htar_contents(self):
"""Test retrieval of htar file contents.
"""
lspath = '/home/b/bweaver'
f = HpssFile(lspath, '-', 'rw-rw-r--', 1, 'bweaver', 'bweaver',
12345, 'Aug', 22, '2014', 'bundle.tar')
self.assertIsNone(f.htar_contents())
f.ishtar = True
f._contents = ['foo.txt']
self.assertListEqual(f.htar_contents(), ['foo.txt'])
f._contents = None
with patch('hpsspy.util.htar') as h:
h.return_value = ('HTAR: -rw-rw-r-- bweaver/bweaver 100 2012-07-03 12:00 foo.txt\nHTAR: -rw-rw-r-- bweaver/bweaver 100 2012-07-03 12:00 bar.txt', '')
self.assertListEqual(f.htar_contents(),
[('-', 'rw-rw-r--', 'bweaver', 'bweaver', '100', '2012', '07', '03', '12:00', 'foo.txt'),
('-', 'rw-rw-r--', 'bweaver', 'bweaver', '100', '2012', '07', '03', '12:00', 'bar.txt')])
h.assert_called_with('-t', '-f', '/home/b/bweaver/bundle.tar')

def test_get_hpss_dir(self):
"""Test searching for the HPSS_DIR variable.
Expand Down Expand Up @@ -162,12 +219,8 @@ def test_htar(self):
"""
command = ['-cvf', 'foo/bar.tar', '-H', 'crc:verify=all', 'bar']
out, err = htar(*command)
if self.PY3:
self.assertEqual(out.decode('utf8').strip(), ' '.join(command))
self.assertEqual(err.decode('utf8').strip(), '')
else:
self.assertEqual(out.strip(), ' '.join(command))
self.assertEqual(err.strip(), '')
self.assertEqual(out.strip(), ' '.join(command))
self.assertEqual(err.strip(), '')


def test_suite():
Expand Down
4 changes: 2 additions & 2 deletions hpsspy/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ def st_mode(self):
try:
mode = self._file_modes[self.raw_type]
except KeyError:
raise
raise AttributeError("Unknown file type, {0.raw_type}, for {0.name}!".format(self))
if self.raw_permission[0] == 'r':
mode |= stat.S_IRUSR
if self.raw_permission[1] == 'w':
Expand Down Expand Up @@ -341,4 +341,4 @@ def htar(*args):
err = errfile.read()
outfile.close()
errfile.close()
return (out, err)
return (out.decode('utf8'), err.decode('utf8'))

0 comments on commit b18c2fe

Please sign in to comment.