Use Event in streaming test

Based on comments in Ia153e2d436855dcce256d5fc91d0fd4c47116042 we
add some synchronization around the streaming thread used in the
TestStreaming.test_streaming unit test.

Also fix a style nit.

Change-Id: I673611c01862137f5169f768a30f1b3a60bfbd7d
This commit is contained in:
David Shrewsbury 2017-06-19 15:41:22 -04:00
parent 2145418c55
commit f8c73c3a19
1 changed files with 7 additions and 5 deletions

View File

@ -64,6 +64,7 @@ class TestStreaming(tests.base.AnsibleZuulTestCase):
self.streamer = None
self.stop_streamer = False
self.streaming_data = ''
self.test_streaming_event = threading.Event()
def stopStreamer(self):
self.stop_streamer = True
@ -79,6 +80,7 @@ class TestStreaming(tests.base.AnsibleZuulTestCase):
req = '%s\n' % build_uuid
s.sendall(req.encode('utf-8'))
self.test_streaming_event.set()
while not self.stop_streamer:
data = s.recv(2048)
@ -130,6 +132,7 @@ class TestStreaming(tests.base.AnsibleZuulTestCase):
)
streamer_thread.start()
self.addCleanup(self.stopStreamer)
self.test_streaming_event.wait()
# Allow the job to complete, which should close the streaming
# connection (and terminate the thread) as well since the log file
@ -142,11 +145,10 @@ class TestStreaming(tests.base.AnsibleZuulTestCase):
# Now that the job is finished, the log file has been closed by the
# job and deleted. However, we still have a file handle to it, so we
# can make sure that we read the entire contents at this point.
file_contents = logfile.readlines()
# Compact the returned lines into a single string for easy comparison.
file_contents = ''.join(logfile.readlines())
logfile.close()
# Compact the returned lines into a single string for easy comparison.
orig = ''.join(file_contents)
self.log.debug("\n\nFile contents: %s\n\n", orig)
self.log.debug("\n\nFile contents: %s\n\n", file_contents)
self.log.debug("\n\nStreamed: %s\n\n", self.streaming_data)
self.assertEqual(orig, self.streaming_data)
self.assertEqual(file_contents, self.streaming_data)