queue_runner_test.py revision 0cf9ed3a719c0782695154d5a0bca260001cec15
10cf9ed3a719c0782695154d5a0bca260001cec15A. Unique TensorFlower# Copyright 2015 The TensorFlow Authors. All Rights Reserved.
29c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur#
39c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# Licensed under the Apache License, Version 2.0 (the "License");
49c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# you may not use this file except in compliance with the License.
59c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# You may obtain a copy of the License at
69c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur#
79c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur#     http://www.apache.org/licenses/LICENSE-2.0
89c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur#
99c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# Unless required by applicable law or agreed to in writing, software
109c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# distributed under the License is distributed on an "AS IS" BASIS,
119c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
129c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# See the License for the specific language governing permissions and
139c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# limitations under the License.
149c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur# ==============================================================================
159c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur
16f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur"""Tests for QueueRunner."""
17f2102f4e2c1c87f1d1bf9ab856a2849c54478760Vijay Vasudevanfrom __future__ import absolute_import
18f2102f4e2c1c87f1d1bf9ab856a2849c54478760Vijay Vasudevanfrom __future__ import division
19f2102f4e2c1c87f1d1bf9ab856a2849c54478760Vijay Vasudevanfrom __future__ import print_function
20f2102f4e2c1c87f1d1bf9ab856a2849c54478760Vijay Vasudevan
21f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurimport time
22f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
23f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurimport tensorflow as tf
24f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
25f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
26f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurclass QueueRunnerTest(tf.test.TestCase):
27f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
28f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  def testBasic(self):
29f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    with self.test_session() as sess:
30f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # CountUpTo will raise OUT_OF_RANGE when it reaches the count.
31f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      zero64 = tf.constant(0, dtype=tf.int64)
32f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      var = tf.Variable(zero64)
33f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      count_up_to = var.count_up_to(3)
34f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      queue = tf.FIFOQueue(10, tf.float32)
35f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      tf.initialize_all_variables().run()
36f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      qr = tf.train.QueueRunner(queue, [count_up_to])
37f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      threads = qr.create_threads(sess)
38f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
39f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.start()
40f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
41f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.join()
42f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(0, len(qr.exceptions_raised))
43f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # The variable should be 3.
44f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(3, var.eval())
45f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
46f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  def testTwoOps(self):
47f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    with self.test_session() as sess:
48f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # CountUpTo will raise OUT_OF_RANGE when it reaches the count.
49f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      zero64 = tf.constant(0, dtype=tf.int64)
50f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      var0 = tf.Variable(zero64)
51f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      count_up_to_3 = var0.count_up_to(3)
52f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      var1 = tf.Variable(zero64)
53f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      count_up_to_30 = var1.count_up_to(30)
54f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      queue = tf.FIFOQueue(10, tf.float32)
55f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      qr = tf.train.QueueRunner(queue, [count_up_to_3, count_up_to_30])
56f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      threads = qr.create_threads(sess)
57f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      tf.initialize_all_variables().run()
58f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
59f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.start()
60f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
61f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.join()
62f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(0, len(qr.exceptions_raised))
63f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(3, var0.eval())
64f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(30, var1.eval())
65f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
66f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  def testExceptionsCaptured(self):
67f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    with self.test_session() as sess:
68f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      queue = tf.FIFOQueue(10, tf.float32)
69f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      qr = tf.train.QueueRunner(queue, ["i fail", "so fail"])
70f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      threads = qr.create_threads(sess)
71f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      tf.initialize_all_variables().run()
72f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
73f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.start()
74f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
75f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.join()
76f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      exceptions = qr.exceptions_raised
77f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(2, len(exceptions))
78f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertTrue("Operation not in the graph" in str(exceptions[0]))
79f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertTrue("Operation not in the graph" in str(exceptions[1]))
80f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
81f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  def testRealDequeueEnqueue(self):
82f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    with self.test_session() as sess:
83f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      q0 = tf.FIFOQueue(3, tf.float32)
84f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      enqueue0 = q0.enqueue((10.0,))
85f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      close0 = q0.close()
86f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      q1 = tf.FIFOQueue(30, tf.float32)
87f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      enqueue1 = q1.enqueue((q0.dequeue(),))
88f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      dequeue1 = q1.dequeue()
89f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      qr = tf.train.QueueRunner(q1, [enqueue1])
90f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      threads = qr.create_threads(sess)
91f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
92f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.start()
93f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # Enqueue 2 values, then close queue0.
94f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      enqueue0.run()
95f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      enqueue0.run()
96f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      close0.run()
97f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # Wait for the queue runner to terminate.
98f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
99f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.join()
100f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # It should have terminated cleanly.
101f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(0, len(qr.exceptions_raised))
102f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # The 2 values should be in queue1.
103f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(10.0, dequeue1.eval())
104f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(10.0, dequeue1.eval())
105f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # And queue1 should now be closed.
106f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      with self.assertRaisesRegexp(tf.errors.OutOfRangeError, "is closed"):
107f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        dequeue1.eval()
108f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
109f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  def testRespectCoordShouldStop(self):
110f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    with self.test_session() as sess:
111f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # CountUpTo will raise OUT_OF_RANGE when it reaches the count.
112f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      zero64 = tf.constant(0, dtype=tf.int64)
113f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      var = tf.Variable(zero64)
114f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      count_up_to = var.count_up_to(3)
115f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      queue = tf.FIFOQueue(10, tf.float32)
116f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      tf.initialize_all_variables().run()
117f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      qr = tf.train.QueueRunner(queue, [count_up_to])
118f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # As the coordinator to stop.  The queue runner should
119f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # finish immediately.
120f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      coord = tf.train.Coordinator()
121f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      coord.request_stop()
122f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      threads = qr.create_threads(sess, coord)
123f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
124f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.start()
125f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      coord.join(threads)
126f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(0, len(qr.exceptions_raised))
127f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # The variable should be 0.
128f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(0, var.eval())
129f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
130f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  def testRequestStopOnException(self):
131f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    with self.test_session() as sess:
132f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      queue = tf.FIFOQueue(10, tf.float32)
133f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      qr = tf.train.QueueRunner(queue, ["not an op"])
134f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      coord = tf.train.Coordinator()
135f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      threads = qr.create_threads(sess, coord)
136f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
137f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.start()
138f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # The exception should be re-raised when joining.
139f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      with self.assertRaisesRegexp(ValueError, "Operation not in the graph"):
140f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        coord.join(threads)
141f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
142f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  def testGracePeriod(self):
143f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    with self.test_session() as sess:
144f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # The enqueue will quickly block.
145f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      queue = tf.FIFOQueue(2, tf.float32)
146f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      enqueue = queue.enqueue((10.0,))
147f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      dequeue = queue.dequeue()
148f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      qr = tf.train.QueueRunner(queue, [enqueue])
149f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      coord = tf.train.Coordinator()
150f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      threads = qr.create_threads(sess, coord, start=True)
151f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # Dequeue one element and then request stop.
152f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      dequeue.op.run()
153f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      time.sleep(0.02)
154f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      coord.request_stop()
155f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # We should be able to join because the RequestStop() will cause
156f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # the queue to be closed and the enqueue to terminate.
157f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      coord.join(threads, stop_grace_period_secs=0.05)
158f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
159ea6b59a5c4aa0147cc7e333da95234464b21cf6fA. Unique TensorFlower  def testIgnoreMultiStarts(self):
160f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    with self.test_session() as sess:
161f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # CountUpTo will raise OUT_OF_RANGE when it reaches the count.
162f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      zero64 = tf.constant(0, dtype=tf.int64)
163f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      var = tf.Variable(zero64)
164f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      count_up_to = var.count_up_to(3)
165f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      queue = tf.FIFOQueue(10, tf.float32)
166f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      tf.initialize_all_variables().run()
167f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      coord = tf.train.Coordinator()
168f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      qr = tf.train.QueueRunner(queue, [count_up_to])
169f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      threads = []
170f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      threads.extend(qr.create_threads(sess, coord=coord))
171ea6b59a5c4aa0147cc7e333da95234464b21cf6fA. Unique TensorFlower      new_threads = qr.create_threads(sess, coord=coord)
172ea6b59a5c4aa0147cc7e333da95234464b21cf6fA. Unique TensorFlower      self.assertEqual([], new_threads)
173f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      coord.request_stop()
174f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      coord.join(threads, stop_grace_period_secs=0.5)
175f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
176f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  def testThreads(self):
177f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur    with self.test_session() as sess:
178f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      # CountUpTo will raise OUT_OF_RANGE when it reaches the count.
179f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      zero64 = tf.constant(0, dtype=tf.int64)
180f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      var = tf.Variable(zero64)
181f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      count_up_to = var.count_up_to(3)
182f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      queue = tf.FIFOQueue(10, tf.float32)
183f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      tf.initialize_all_variables().run()
184f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      qr = tf.train.QueueRunner(queue, [count_up_to, "bad op"])
185f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      threads = qr.create_threads(sess, start=True)
186f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
187f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.join()
188f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      exceptions = qr.exceptions_raised
189f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(1, len(exceptions))
190f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertTrue("Operation not in the graph" in str(exceptions[0]))
191f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
192f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      threads = qr.create_threads(sess, start=True)
193f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      for t in threads:
194f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur        t.join()
195f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      exceptions = qr.exceptions_raised
196f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertEqual(1, len(exceptions))
197f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur      self.assertTrue("Operation not in the graph" in str(exceptions[0]))
198f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
199cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower  def testName(self):
200cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower    with tf.name_scope("scope"):
201cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower      queue = tf.FIFOQueue(10, tf.float32, name="queue")
202cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower    qr = tf.train.QueueRunner(queue, [tf.no_op()])
203cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower    self.assertEqual("scope/queue", qr.name)
204cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower    tf.train.add_queue_runner(qr)
205cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower    self.assertEqual(1, len(tf.get_collection(tf.GraphKeys.QUEUE_RUNNERS,
206cd55d4606186357affea2f892f740de93c1bd0f7A. Unique TensorFlower                                              "scope")))
207f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
2085d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower  def testStartQueueRunners(self):
2095d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    # CountUpTo will raise OUT_OF_RANGE when it reaches the count.
2105d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    zero64 = tf.constant(0, dtype=tf.int64)
2115d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    var = tf.Variable(zero64)
2125d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    count_up_to = var.count_up_to(3)
2135d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    queue = tf.FIFOQueue(10, tf.float32)
2145d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    init_op = tf.initialize_all_variables()
2155d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    qr = tf.train.QueueRunner(queue, [count_up_to])
2165d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    tf.train.add_queue_runner(qr)
2175d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    with self.test_session() as sess:
2185d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      init_op.run()
2195d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      threads = tf.train.start_queue_runners(sess)
2205d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      for t in threads:
2215d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower        t.join()
2225d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      self.assertEqual(0, len(qr.exceptions_raised))
2235d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      # The variable should be 3.
2245d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      self.assertEqual(3, var.eval())
2255d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower
2265d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower  def testStartQueueRunnersNonDefaultGraph(self):
2275d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    # CountUpTo will raise OUT_OF_RANGE when it reaches the count.
2285d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    graph = tf.Graph()
2295d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    with graph.as_default():
2305d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      zero64 = tf.constant(0, dtype=tf.int64)
2315d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      var = tf.Variable(zero64)
2325d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      count_up_to = var.count_up_to(3)
2335d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      queue = tf.FIFOQueue(10, tf.float32)
2345d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      init_op = tf.initialize_all_variables()
2355d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      qr = tf.train.QueueRunner(queue, [count_up_to])
2365d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      tf.train.add_queue_runner(qr)
2375d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower    with self.test_session(graph=graph) as sess:
2385d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      init_op.run()
2395d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      threads = tf.train.start_queue_runners(sess)
2405d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      for t in threads:
2415d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower        t.join()
2425d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      self.assertEqual(0, len(qr.exceptions_raised))
2435d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      # The variable should be 3.
2445d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower      self.assertEqual(3, var.eval())
2455d2075f12b0b43a09a432e077334a87394933cd2A. Unique TensorFlower
246f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurif __name__ == "__main__":
247f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  tf.test.main()
248