11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport random
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport sys
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport time
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport unittest
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# pylint: disable=F0401
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport mojo.embedder
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom mojo import system
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDATA_SIZE = 1024
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccidef _GetRandomBuffer(size):
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  random.seed(size)
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return bytearray(''.join(chr(random.randint(0, 255)) for i in xrange(size)))
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass BaseMojoTest(unittest.TestCase):
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def setUp(self):
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    mojo.embedder.Init()
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass CoreTest(BaseMojoTest):
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testResults(self):
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_OK, 0)
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_CANCELLED, 0)
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_UNKNOWN, 0)
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_INVALID_ARGUMENT, 0)
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_DEADLINE_EXCEEDED, 0)
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_NOT_FOUND, 0)
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_ALREADY_EXISTS, 0)
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_PERMISSION_DENIED, 0)
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_RESOURCE_EXHAUSTED, 0)
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_FAILED_PRECONDITION, 0)
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_ABORTED, 0)
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_OUT_OF_RANGE, 0)
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_UNIMPLEMENTED, 0)
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_INTERNAL, 0)
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_UNAVAILABLE, 0)
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_DATA_LOSS, 0)
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_BUSY, 0)
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertLess(system.RESULT_SHOULD_WAIT, 0)
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testConstants(self):
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.DEADLINE_INDEFINITE, 0)
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.HANDLE_SIGNAL_NONE, 0)
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.HANDLE_SIGNAL_READABLE, 0)
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.HANDLE_SIGNAL_WRITABLE, 0)
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.WRITE_MESSAGE_FLAG_NONE, 0)
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.READ_MESSAGE_FLAG_NONE, 0)
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.READ_MESSAGE_FLAG_MAY_DISCARD, 0)
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.WRITE_DATA_FLAG_NONE, 0)
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.WRITE_DATA_FLAG_ALL_OR_NONE, 0)
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.READ_DATA_FLAG_NONE, 0)
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.READ_DATA_FLAG_ALL_OR_NONE, 0)
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.READ_DATA_FLAG_DISCARD, 0)
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.READ_DATA_FLAG_QUERY, 0)
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(system.MAP_BUFFER_FLAG_NONE, 0)
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testGetTimeTicksNow(self):
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    pt1 = time.time()
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    v1 = system.GetTimeTicksNow()
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    time.sleep(1e-3)
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    v2 = system.GetTimeTicksNow()
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    pt2 = time.time()
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreater(v1, 0)
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreater(v2, v1 + 1000)
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreater(1e6 * (pt2 - pt1), v2 - v1)
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def _testHandlesCreation(self, *args):
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for handle in args:
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      self.assertTrue(handle.IsValid())
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      handle.Close()
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      self.assertFalse(handle.IsValid())
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def _TestMessageHandleCreation(self, handles):
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._testHandlesCreation(handles.handle0, handles.handle1)
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateMessagePipe(self):
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._TestMessageHandleCreation(system.MessagePipe())
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateMessagePipeWithNoneOptions(self):
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._TestMessageHandleCreation(system.MessagePipe(None))
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateMessagePipeWithOptions(self):
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._TestMessageHandleCreation(
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        system.MessagePipe(system.CreateMessagePipeOptions()))
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testWaitOverMessagePipe(self):
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handles = system.MessagePipe()
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handle = handles.handle0
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_OK, handle.Wait(
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        system.HANDLE_SIGNAL_WRITABLE, system.DEADLINE_INDEFINITE))
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_DEADLINE_EXCEEDED,
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      handle.Wait(system.HANDLE_SIGNAL_READABLE, 0))
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handles.handle1.WriteMessage()
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        system.RESULT_OK,
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        handle.Wait(
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            system.HANDLE_SIGNAL_READABLE,
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            system.DEADLINE_INDEFINITE))
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testWaitOverManyMessagePipe(self):
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handles = system.MessagePipe()
1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handle0 = handles.handle0
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handle1 = handles.handle1
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        0,
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        system.WaitMany(
1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            [(handle0, system.HANDLE_SIGNAL_WRITABLE),
1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci             (handle1, system.HANDLE_SIGNAL_WRITABLE)],
1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            system.DEADLINE_INDEFINITE))
1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(
1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        system.RESULT_DEADLINE_EXCEEDED,
1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        system.WaitMany(
1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            [(handle0, system.HANDLE_SIGNAL_READABLE),
1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci             (handle1, system.HANDLE_SIGNAL_READABLE)], 0))
1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handle0.WriteMessage()
1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        1,
1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        system.WaitMany(
1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            [(handle0, system.HANDLE_SIGNAL_READABLE),
1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci             (handle1, system.HANDLE_SIGNAL_READABLE)],
1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            system.DEADLINE_INDEFINITE))
1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testSendBytesOverMessagePipe(self):
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handles = system.MessagePipe()
1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    data = _GetRandomBuffer(DATA_SIZE)
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handles.handle0.WriteMessage(data)
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    (res, buffers, next_message) = handles.handle1.ReadMessage()
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_RESOURCE_EXHAUSTED, res)
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(None, buffers)
1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals((DATA_SIZE, 0), next_message)
1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    result = bytearray(DATA_SIZE)
1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    (res, buffers, next_message) = handles.handle1.ReadMessage(result)
1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_OK, res)
1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(None, next_message)
1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals((data, []), buffers)
1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testSendEmptyDataOverMessagePipe(self):
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handles = system.MessagePipe()
1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handles.handle0.WriteMessage(None)
1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    (res, buffers, next_message) = handles.handle1.ReadMessage()
1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_OK, res)
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(None, next_message)
1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals((None, []), buffers)
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testSendHandleOverMessagePipe(self):
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handles = system.MessagePipe()
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handles_to_send = system.MessagePipe()
1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handles.handle0.WriteMessage(handles=[handles_to_send.handle0,
1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                           handles_to_send.handle1])
1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    (res, buffers, next_message) = handles.handle1.ReadMessage(
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        max_number_of_handles=2)
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertFalse(handles_to_send.handle0.IsValid())
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertFalse(handles_to_send.handle1.IsValid())
1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_OK, res)
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(None, next_message)
1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(None, buffers[0])
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(2, len(buffers[1]))
1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handles = buffers[1]
1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for handle in handles:
1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      self.assertTrue(handle.IsValid())
1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      (res, buffers, next_message) = handle.ReadMessage()
1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      self.assertEquals(system.RESULT_SHOULD_WAIT, res)
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for handle in handles:
1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      handle.WriteMessage()
1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for handle in handles:
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      (res, buffers, next_message) = handle.ReadMessage()
1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      self.assertEquals(system.RESULT_OK, res)
1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def _TestDataHandleCreation(self, handles):
1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._testHandlesCreation(
1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        handles.producer_handle, handles.consumer_handle)
1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateDataPipe(self):
1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._TestDataHandleCreation(system.DataPipe())
1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateDataPipeWithNoneOptions(self):
1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._TestDataHandleCreation(system.DataPipe(None))
1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateDataPipeWithDefaultOptions(self):
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._TestDataHandleCreation(
2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        system.DataPipe(system.CreateDataPipeOptions()))
2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateDataPipeWithDiscardFlag(self):
2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    options = system.CreateDataPipeOptions()
2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    options.flags = system.CreateDataPipeOptions.FLAG_MAY_DISCARD
2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._TestDataHandleCreation(system.DataPipe(options))
2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateDataPipeWithElementSize(self):
2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    options = system.CreateDataPipeOptions()
2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    options.element_num_bytes = 5
2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._TestDataHandleCreation(system.DataPipe(options))
2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateDataPipeWithCapacity(self):
2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    options = system.CreateDataPipeOptions()
2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    options.element_capacity_num_bytes = DATA_SIZE
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._TestDataHandleCreation(system.DataPipe(options))
2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateDataPipeWithIncorrectParameters(self):
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    options = system.CreateDataPipeOptions()
2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    options.element_num_bytes = 5
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    options.capacity_num_bytes = DATA_SIZE
2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    with self.assertRaises(system.MojoException) as cm:
2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      self._TestDataHandleCreation(system.DataPipe(options))
2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_INVALID_ARGUMENT, cm.exception.mojo_result)
2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testSendEmptyDataOverDataPipe(self):
2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    pipes = system.DataPipe()
2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals((system.RESULT_OK, 0), pipes.producer_handle.WriteData())
2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(
2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        (system.RESULT_OK, None), pipes.consumer_handle.ReadData())
2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testSendDataOverDataPipe(self):
2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    pipes = system.DataPipe()
2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    data = _GetRandomBuffer(DATA_SIZE)
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals((system.RESULT_OK, DATA_SIZE),
2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      pipes.producer_handle.WriteData(data))
2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals((system.RESULT_OK, data),
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      pipes.consumer_handle.ReadData(bytearray(DATA_SIZE)))
2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testTwoPhaseWriteOnDataPipe(self):
2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    pipes = system.DataPipe()
2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    (res, buf) = pipes.producer_handle.BeginWriteData(DATA_SIZE)
2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_OK, res)
2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertGreaterEqual(len(buf.buffer), DATA_SIZE)
2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    data = _GetRandomBuffer(DATA_SIZE)
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    buf.buffer[0:DATA_SIZE] = data
2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_OK, buf.End(DATA_SIZE))
2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals((system.RESULT_OK, data),
2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      pipes.consumer_handle.ReadData(bytearray(DATA_SIZE)))
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testTwoPhaseReadOnDataPipe(self):
2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    pipes = system.DataPipe()
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    data = _GetRandomBuffer(DATA_SIZE)
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals((system.RESULT_OK, DATA_SIZE),
2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      pipes.producer_handle.WriteData(data))
2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    (res, buf) = pipes.consumer_handle.BeginReadData()
2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_OK, res)
2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(DATA_SIZE, len(buf.buffer))
2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(data, buf.buffer)
2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_OK, buf.End(DATA_SIZE))
2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateSharedBuffer(self):
2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._testHandlesCreation(system.CreateSharedBuffer(DATA_SIZE))
2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateSharedBufferWithNoneOptions(self):
2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._testHandlesCreation(system.CreateSharedBuffer(DATA_SIZE, None))
2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testCreateSharedBufferWithDefaultOptions(self):
2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._testHandlesCreation(
2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        system.CreateSharedBuffer(
2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            DATA_SIZE,
2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            system.CreateSharedBufferOptions()))
2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testDuplicateSharedBuffer(self):
2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handle = system.CreateSharedBuffer(DATA_SIZE)
2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._testHandlesCreation(handle.Duplicate())
2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testDuplicateSharedBufferWithNoneOptions(self):
2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handle = system.CreateSharedBuffer(DATA_SIZE)
2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._testHandlesCreation(handle.Duplicate(None))
2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testDuplicateSharedBufferWithDefaultOptions(self):
2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handle = system.CreateSharedBuffer(DATA_SIZE)
2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self._testHandlesCreation(
2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        handle.Duplicate(system.DuplicateSharedBufferOptions()))
2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testSendBytesOverSharedBuffer(self):
2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    handle = system.CreateSharedBuffer(DATA_SIZE)
2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    duplicated = handle.Duplicate()
2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    data = _GetRandomBuffer(DATA_SIZE)
2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    (res1, buf1) = handle.Map(0, DATA_SIZE)
2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    (res2, buf2) = duplicated.Map(0, DATA_SIZE)
2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_OK, res1)
2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(system.RESULT_OK, res2)
2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(DATA_SIZE, len(buf1.buffer))
2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(DATA_SIZE, len(buf2.buffer))
2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(buf1.buffer, buf2.buffer)
2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    buf1.buffer[:] = data
3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(data, buf1.buffer)
3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(data, buf2.buffer)
3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(buf1.buffer, buf2.buffer)
3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciif __name__ == '__main__':
3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  suite = unittest.TestLoader().loadTestsFromTestCase(CoreTest)
3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  test_results = unittest.TextTestRunner(verbosity=0).run(suite)
3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if not test_results.wasSuccessful():
3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    sys.exit(1)
3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  sys.exit(0)
311