[stem/master] Integration test for reading non-descriptor files

commit 9faad3255491642f87801926512c9cb6d334f6d8 Author: Damian Johnson <atagar@torproject.org> Date: Sat Mar 24 16:50:03 2012 -0700 Integration test for reading non-descriptor files Integ test for reading non-descriptor plaintext and binary data. --- stem/descriptor/reader.py | 7 ++++++- test/integ/descriptor/data/riddle | 20 ++++++++++++++++++++ test/integ/descriptor/data/tiny.png | Bin 0 -> 188 bytes test/integ/descriptor/reader.py | 18 ++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletions(-) diff --git a/stem/descriptor/reader.py b/stem/descriptor/reader.py index 511ba04..de39d54 100644 --- a/stem/descriptor/reader.py +++ b/stem/descriptor/reader.py @@ -94,7 +94,10 @@ class ParsingFailure(FileSkipped): self.exception = parsing_exception class UnrecognizedType(FileSkipped): - "File's mime type indicates that it isn't descriptor data." + """ + File doesn't contain descriptor data. This could either be due to its file + type or because it doens't conform to a recognizable descriptor type. + """ def __init__(self, mime_type): FileSkipped.__init__(self) @@ -369,6 +372,8 @@ class DescriptorReader: self._enqueue_descriptor(desc) self._iter_notice.set() except TypeError, exc: + self._notify_skip_listeners(target, UnrecognizedType(None)) + except ValueError, exc: self._notify_skip_listeners(target, ParsingFailure(exc)) except IOError, exc: self._notify_skip_listeners(target, ReadFailed(exc)) diff --git a/test/integ/descriptor/data/riddle b/test/integ/descriptor/data/riddle new file mode 100644 index 0000000..ac08f36 --- /dev/null +++ b/test/integ/descriptor/data/riddle @@ -0,0 +1,20 @@ +Riddle by Damian Johnson (May, 2009) + +Curtains raise, they take the stage, + mute actors that never age. +The clouds are cotton, the floor is pine, + the souls bound up in fine twine. + +Crowds will cheer, the players dance, + flowing scene to scene as in a trance. +The world is perfect, they never whine, + for there's not a single will, save mine. + +The play has ended, we take a bow, + but the viewers are the actors now. +When freed from decision, of thought and blame, + we'll walk to another drum just the same. + +answer: +http://www.atagar.com/riddles/answer10.php + diff --git a/test/integ/descriptor/data/tiny.png b/test/integ/descriptor/data/tiny.png new file mode 100644 index 0000000..e86715f Binary files /dev/null and b/test/integ/descriptor/data/tiny.png differ diff --git a/test/integ/descriptor/reader.py b/test/integ/descriptor/reader.py index cdc33c2..717a55b 100644 --- a/test/integ/descriptor/reader.py +++ b/test/integ/descriptor/reader.py @@ -287,6 +287,24 @@ class TestDescriptorReader(unittest.TestCase): self.assertEquals(expected_results, reader.get_processed_files()) + def test_skip_nondescriptor_contents(self): + """ + Checks that the reader properly reports when it skips both binary and + plaintext non-descriptor files. + """ + + skip_listener = SkipListener() + reader = stem.descriptor.reader.DescriptorReader([DESCRIPTOR_TEST_DATA]) + reader.register_skip_listener(skip_listener.listener) + + with reader: list(reader) # iterates over all of the descriptors + + self.assertTrue(2, len(skip_listener.results)) + + for skip_path, skip_exception in skip_listener.results: + self.assertTrue(os.path.basename(skip_path) in ("riddle", "tiny.png")) + self.assertTrue(isinstance(skip_exception, stem.descriptor.reader.UnrecognizedType)) + def test_skip_listener_already_read(self): """ Checks that calling set_processed_files() prior to reading makes us skip
participants (1)
-
atagar@torproject.org