[tor-commits] [stem/master] Finishing basic DescriptorReader implementation

atagar at torproject.org atagar at torproject.org
Mon Mar 26 00:10:01 UTC 2012


commit 0aba5ba4704acb620915ba5f2115b7d036c9477a
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Mar 10 22:55:50 2012 -0800

    Finishing basic DescriptorReader implementation
    
    Fixing the minor issue that was preventing the DescriptorReader from working
    and making its first integration test do automated verification, rather than
    needing a manual check.
---
 stem/descriptor/reader.py       |    8 +++++---
 test/integ/descriptor/reader.py |   22 ++++++++++++++++++++--
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/stem/descriptor/reader.py b/stem/descriptor/reader.py
index 8bdb5b4..0784ce4 100644
--- a/stem/descriptor/reader.py
+++ b/stem/descriptor/reader.py
@@ -171,6 +171,7 @@ class DescriptorReader(threading.Thread):
     # TODO: implement
     # flag that's set when we're done
     self._stop_event = threading.Event()
+    self._finished_reading = threading.Event()
   
   def get_processed_files(self):
     """
@@ -266,9 +267,7 @@ class DescriptorReader(threading.Thread):
           elif target_type[1] == 'bzip2':
             pass # TODO: implement
     
-    # TODO: bug: __iter__ should finish with the _unreturned_descriptors
-    # contents. Could be fixed by adding a 'is done reading' event.
-    self._stop_event.set()
+    self._finished_reading.set()
     self._iter_notice.set()
   
   def __iter__(self):
@@ -277,6 +276,9 @@ class DescriptorReader(threading.Thread):
         try:
           yield self._unreturned_descriptors.get_nowait()
         except Queue.Empty:
+          # if we've finished and there aren't any descriptors then we're done
+          if self._finished_reading.isSet(): break
+          
           self._iter_notice.wait()
           self._iter_notice.clear()
   
diff --git a/test/integ/descriptor/reader.py b/test/integ/descriptor/reader.py
index 4ab2792..ca77e26 100644
--- a/test/integ/descriptor/reader.py
+++ b/test/integ/descriptor/reader.py
@@ -108,12 +108,30 @@ class TestDescriptorReader(unittest.TestCase):
   def test_basic_example(self):
     """
     Exercises something similar to the first example in the header
-    documentation, checking that the contetns match the actual file.
+    documentation, checking that some of the contents match what we'd expect.
     """
     
+    # snag some of the plaintext descriptors so we can later make sure that we
+    # iterate over them
+    
+    descriptor_entries = []
+    
+    descriptor_path = os.path.join(DESCRIPTOR_TEST_DATA, "example_descriptor")
+    with open(descriptor_path) as descriptor_file:
+      descriptor_entries.append(descriptor_file.read())
+    
     reader = stem.descriptor.reader.DescriptorReader([DESCRIPTOR_TEST_DATA])
     
     with reader:
       for descriptor in reader:
-        print descriptor # TODO: change to be an automated check
+        descriptor_str = str(descriptor)
+        
+        if descriptor_str in descriptor_entries:
+          descriptor_entries.remove(descriptor_str)
+        else:
+          # iterator is providing output that we didn't expect
+          self.fail()
+    
+    # check that we've seen all of the descriptor_entries
+    self.assertTrue(len(descriptor_entries) == 0)
 





More information about the tor-commits mailing list