commit 09350c2af6c3248f5543740796f3e73d23b3f7aa Author: Isis Lovecruft isis@torproject.org Date: Tue Feb 24 20:47:18 2015 +0000
Add additional unittests for uncovered portions of bridgedb.persistent. --- lib/bridgedb/persistent.py | 13 ++--- lib/bridgedb/test/test_persistentSaveAndLoad.py | 68 ++++++++++++++++++++++- 2 files changed, 73 insertions(+), 8 deletions(-)
diff --git a/lib/bridgedb/persistent.py b/lib/bridgedb/persistent.py index 8c65e78..f728bdd 100644 --- a/lib/bridgedb/persistent.py +++ b/lib/bridgedb/persistent.py @@ -17,7 +17,7 @@ import os.path
try: import cPickle as pickle -except (ImportError, NameError): +except (ImportError, NameError): # pragma: no cover import pickle
from twisted.python.reflect import safe_repr @@ -148,7 +148,7 @@ class State(jelly.Jellyable): fh.close() os.unlink(self._statefile) self._statefile = None - except (IOError, OSError) as error: + except (IOError, OSError) as error: # pragma: no cover logging.error("There was an error deleting the statefile: '%s'" % self._statefile)
@@ -178,7 +178,7 @@ class State(jelly.Jellyable): fh = statefile else: raise TypeError("Nothing worked.") - except (IOError, OSError) as error: + except (IOError, OSError) as error: # pragma: no cover err += "There was an error reading statefile " err += "'{0}':\n{1}".format(statefile, error) except (AttributeError, TypeError) as error: @@ -208,10 +208,9 @@ class State(jelly.Jellyable):
try: fh = open(statefile, 'w') - except MissingState as error: - err += error.message - except (IOError, OSError) as error: - err += "Error writing state file to '%s': %s" % (statefile, error) + except (IOError, OSError) as error: # pragma: no cover + logging.warn("Error writing state file to '%s': %s" + % (statefile, error)) else: try: pickle.dump(jelly.jelly(self), fh) diff --git a/lib/bridgedb/test/test_persistentSaveAndLoad.py b/lib/bridgedb/test/test_persistentSaveAndLoad.py index 7919df3..67585f6 100644 --- a/lib/bridgedb/test/test_persistentSaveAndLoad.py +++ b/lib/bridgedb/test/test_persistentSaveAndLoad.py @@ -67,6 +67,45 @@ class StateSaveAndLoadTests(unittest.TestCase): if savedStatefile: self.assertTrue(os.path.isfile(str(savedStatefile)))
+ def test_init_with_STATEFILE(self): + config = self.config + setattr(config, 'STATEFILE', '~/foo.state') + state = persistent.State(**config.__dict__) + self.loadedStateAssertions(state) + statefile = state.statefile + self.assertTrue(statefile.endswith('foo.state')) + + def test_init_without_config(self): + state = persistent.State(None) + self.loadedStateAssertions(state) + + def test_init_with_config(self): + state = persistent.State(self.config) + self.loadedStateAssertions(state) + + def test_get_statefile(self): + statefile = self.state._get_statefile() + self.assertIsInstance(statefile, basestring) + + def test_set_statefile(self): + self.state._set_statefile('~/bar.state') + statefile = self.state._get_statefile() + self.assertIsInstance(statefile, basestring) + + def test_set_statefile_new_dir(self): + config = self.config + setattr(config, 'STATEFILE', 'statefiles/foo.state') + state = persistent.State(**config.__dict__) + self.loadedStateAssertions(state) + statefile = state.statefile + self.assertTrue(statefile.endswith('foo.state')) + + def test_del_statefile(self): + self.state._set_statefile('baz.state') + self.state._del_statefile() + statefile = self.state._get_statefile() + self.assertIsNone(statefile) + def test_save(self): self.state.save() self.savedStateAssertions() @@ -93,5 +132,32 @@ class StateSaveAndLoadTests(unittest.TestCase):
def test_load(self): self.state.save() - loadedState = persistent.load() + loadedState = persistent.load() + self.loadedStateAssertions(loadedState) + + def test_load_with_state(self): + loadedState = persistent.load(self.state) self.loadedStateAssertions(loadedState) + + def test_load_with_None(self): + persistent._setState(None) + self.assertRaises(persistent.MissingState, + persistent.load, None) + + def test_load_with_statefile(self): + self.assertRaises(persistent.MissingState, + self.state.load, 'quux.state') + + def test_load_with_statefile_opened(self): + fh = open('quux.state', 'w+') + self.assertRaises(persistent.MissingState, self.state.load, fh) + fh.close() + + def test_load_with_statefile_object(self): + self.assertRaises(persistent.MissingState, self.state.load, object) + + def test_load_without_statefile(self): + persistent._setState(None) + self.state.statefile = None + self.assertRaises(persistent.MissingState, + persistent.load)