def test_put(self): # single attribute t = Task("testTask", self.proc) resp = Return(0, None, None) resp.set_value('testVal') # cheat and add the response before the blocking call to put t.q.put(resp) t.stop() t.put(self.attr, "testValue") self.assertEqual(len(t._futures), 0) self.assertEqual(self.proc.q.qsize(), 1)
def test_Return(self): context = Mock() r = Return(123, context) self.assertEquals(123, r.id_) self.assertEquals("malcolm:core/Return:1.0", r.typeid) self.assertEquals(context, r.context) self.assertIsNone(r.value) r = Return(123, Mock(), {"key": "value"}) self.assertEquals({"key": "value"}, r.value) r.set_value({"key": "value2"}) self.assertEquals({"key": "value2"}, r.value)
def test_post(self): t = Task("testTask", self.proc) resp1 = Return(0, None, None) resp1.set_value('testVal') resp2 = Error(1, None, None) # cheat and add the responses before the blocking call to put t.q.put(resp1) t.q.put(resp2) t.stop() t.post(self.method, "testParm") t.post(self.method, "testParm2") self.assertEqual(len(t._futures), 0) self.assertEqual(self.proc.q.qsize(), 2)
def test_post(self): t = Task("testTask", self.proc) resp1 = Return(1, None, None) resp1.set_value(dict(ret='testVal')) resp2 = Error(2, None, "") # cheat and add the responses before the blocking call to put t.q.put(resp1) t.q.put(resp2) t.stop() t.post(self.method, {"a": "testParm"}) self.assertRaises(ResponseError, t.post, self.method, {"a": "testParm2"}) self.assertEqual(len(t._futures), 0) self.assertEqual(self.proc.q.qsize(), 2)
def test_post(self): t = Task("testTask", self.proc) resp1 = Return(0, None, None) resp1.set_value('testVal') resp2 = Error(1, None, None) # cheat and add the responses before the blocking call to put t.q.put(resp1) t.q.put(resp2) t.stop() t.post(self.method, {"a": "testParm"}) self.assertRaises(ValueError, t.post, self.method, {"a": "testParm2"}) self.assertEqual(len(t._futures), 0) self.assertEqual(self.proc.q.qsize(), 2)
def test_exception(self): # timeout due to no response arriving f0 = Future(self.task) f1 = Future(self.task) self.task._futures = {0: f0, 1: f1} self.assertRaises(queue.Empty, f0.exception, 0) # return after waiting for response object resp0 = Return(0, None, None) resp0.set_value('testVal') resp1 = Error(1, None, None) resp1.set_message('test Error') self.task.q.put(resp0) self.task.q.put(resp1) self.assertEqual(f1.exception(), 'test Error')
def test_result(self): # timeout due to no response arriving f0 = Future(self.task) f1 = Future(self.task) self.task._futures = {0: f0, 1: f1} self.assertRaises(queue.Empty, f0.result, 0) # return after waiting for response object resp0 = Return(0, None, None) resp0.set_value('testVal') resp1 = Error(1, None, "test Error") resp1.set_message('test Error') self.task.q.put(resp0) self.task.q.put(resp1) self.assertEqual(f0.result(), 'testVal')
def test_put_many(self): # many attributes t = Task("testTask", self.proc) resp1 = Return(1, None, None) resp1.set_value('testVal1') resp2 = Return(2, None, None) resp2.set_value('testVal2') # cheat and add the response before the blocking call to put t.q.put(resp1) t.q.put(resp2) t.stop() t.put_many(self.block, dict( testAttr="testValue", testAttr2="testValue2")) self.assertEqual(len(t._futures), 0) self.assertEqual(self.proc.q.qsize(), 2)
def test_put_many(self): # many attributes t = Task("testTask", self.proc) resp1 = Return(1, None, None) resp1.set_value('testVal1') resp2 = Return(2, None, None) resp2.set_value('testVal2') # cheat and add the response before the blocking call to put t.q.put(resp1) t.q.put(resp2) t.stop() t.put_many(self.block, dict(testAttr="testValue", testAttr2="testValue2")) self.assertEqual(len(t._futures), 0) self.assertEqual(self.proc.q.qsize(), 2)
def test_exception(self): # timeout due to no response arriving f0 = Future(self.task) f1 = Future(self.task) self.task._futures = {0: f0, 1: f1} self.assertRaises(queue.Empty, f0.exception, 0) # return after waiting for response object resp0 = Return(0, None, None) resp0.set_value('testVal') resp1 = Error(1, None, None) resp1.set_message('test Error') self.task.q.put(resp0) self.task.q.put(resp1) with self.assertRaises(ValueError) as cm: f1.exception() self.assertEqual(str(cm.exception), 'test Error')
def test_wait_all(self): t = Task("testTask", self.proc) f1 = Future(t) f2 = Future(t) f3 = Future(t) f0 = Future(t) t._futures = {0: f0, 1: f1, 2: f2, 3: f3} f_wait1 = [f2, f0] self.assertRaises(queue.Empty, t.wait_all, f_wait1, 0) resp0 = Return(0, None, None) resp0.set_value('testVal') resp2 = Error(2, None, None) t.q.put(resp0) t.q.put(resp2) t.wait_all( f_wait1, 0) self.assertEqual(t._futures, {1: f1, 3: f3}) self.assertEqual(f0.done(), True) self.assertEqual(f1.done(), False) self.assertEqual(f2.done(), True) self.assertEqual(f3.done(), False) self.assertEqual(self.proc.q.qsize(), 0) resp3 = Delta(3, None, None) t.q.put(resp3) f_wait1 = [f3] self.assertRaises(ValueError, t.wait_all, f_wait1, 0.01) t.stop() self.assertRaises(RuntimeWarning, t.wait_all, f_wait1, 0.01) resp1 = Return(1, None, None) resp1.set_value('testVal') t.q.put(resp1) self.assertRaises(queue.Empty, t.wait_all, f_wait1, 0.01) self.assertEqual(t._futures, {}) t._futures = {0: f0, 1: f1, 2: f2} t.q.put(resp1) t.q.put(Task.TASK_STOP) self.assertEqual(f1.result(), 'testVal')
def test_wait_all(self): t = Task("testTask", self.proc) f1 = Future(t) f2 = Future(t) f3 = Future(t) f0 = Future(t) t._futures = {0: f0, 1: f1, 2: f2, 3: f3} f_wait1 = [f2, f0] self.assertRaises(queue.Empty, t.wait_all, f_wait1, 0) resp0 = Return(0, None, None) resp0.set_value('testVal') resp2 = Error(2, None, None) t.q.put(resp0) t.q.put(resp2) self.assertRaises(ValueError, t.wait_all, f_wait1, 0) self.assertEqual(t._futures, {1: f1, 3: f3}) self.assertEqual(f0.done(), True) self.assertEqual(f1.done(), False) self.assertEqual(f2.done(), True) self.assertEqual(f3.done(), False) self.assertEqual(self.proc.q.qsize(), 0) resp3 = Delta(3, None, None) t.q.put(resp3) f_wait1 = [f3] self.assertRaises(ValueError, t.wait_all, f_wait1, 0.01) t.stop() self.assertRaises(StopIteration, t.wait_all, f_wait1, 0.01) resp1 = Return(1, None, None) resp1.set_value('testVal') t.q.put(resp1) self.assertRaises(queue.Empty, t.wait_all, f_wait1, 0.01) self.assertEqual(t._futures, {}) t._futures = {0: f0, 1: f1, 2: f2} t.q.put(resp1) t.q.put(Spawnable.STOP) self.assertEqual(f1.result(), 'testVal')