def test_processData(self, data): doc, encoding, bom = data payload = RTPPayload_TTML(userDataWords=doc, encoding=encoding, bom=bom).toBytearray() packet = RTP(payload=payload, marker=True) packetBytes = packet.toBytes() with mock.patch("rtpTTML.ttmlReceiver.RTPPayload_TTML") as mockTTML: thisReceiver = TTMLReceiver(0, self.callback, encoding=encoding, bom=bom) thisReceiver._processData(packetBytes) mockTTML.assert_called_once_with(encoding=encoding, bom=bom)
class TestRTP(TestCase): def setUp(self): self.thisRTP = RTP() def setup_example(self): self.setUp() @given(st.booleans(), st.booleans(), st.sampled_from(PayloadType), st.integers(min_value=0, max_value=(2**16) - 1), st.integers(min_value=0, max_value=(2**32) - 1), st.integers(min_value=0, max_value=(2**32) - 1), st.lists(st.integers(min_value=0, max_value=(2**16) - 1), max_size=15), st.binary()) def test_init(self, padding, marker, payloadType, sequenceNumber, timestamp, ssrc, csrcList, payload): newExt = Extension() newRTP = RTP(version=2, padding=padding, marker=marker, payloadType=payloadType, sequenceNumber=sequenceNumber, timestamp=timestamp, ssrc=ssrc, extension=newExt, csrcList=csrcList, payload=bytearray(payload)) self.assertEqual(newRTP.version, 2) self.assertEqual(newRTP.padding, padding) self.assertEqual(newRTP.marker, marker) self.assertEqual(newRTP.payloadType, payloadType) self.assertEqual(newRTP.sequenceNumber, sequenceNumber) self.assertEqual(newRTP.timestamp, timestamp) self.assertEqual(newRTP.ssrc, ssrc) self.assertEqual(newRTP.extension, newExt) self.assertEqual(newRTP.csrcList, csrcList) self.assertEqual(newRTP.payload, payload) def test_version_default(self): # Test default self.assertEqual(self.thisRTP.version, 2) @given(st.integers()) @example(2) def test_version(self, value): if value == 2: self.thisRTP.version = value self.assertEqual(self.thisRTP.version, value) else: with self.assertRaises(ValueError): self.thisRTP.version = value def test_padding_default(self): self.assertEqual(self.thisRTP.padding, False) @given(st.booleans()) def test_padding(self, value): self.thisRTP.padding = value self.assertEqual(self.thisRTP.padding, value) def test_padding_invalidType(self): with self.assertRaises(AttributeError): self.thisRTP.padding = "" def test_marker_default(self): self.assertEqual(self.thisRTP.marker, False) @given(st.booleans()) def test_marker(self, value): self.thisRTP.marker = value self.assertEqual(self.thisRTP.marker, value) def test_marker_invalidType(self): with self.assertRaises(AttributeError): self.thisRTP.marker = "" def test_payloadType_default(self): self.assertEqual(self.thisRTP.payloadType, PayloadType.DYNAMIC_96) @given(st.sampled_from(PayloadType)) def test_payloadType(self, value): self.thisRTP.payloadType = value self.assertEqual(self.thisRTP.payloadType, value) def test_payloadType_invalidType(self): with self.assertRaises(AttributeError): self.thisRTP.payloadType = "" def test_sequenceNumber_default(self): self.assertIsInstance(self.thisRTP.sequenceNumber, int) @given(st.integers(min_value=0, max_value=(2**16) - 1)) def test_sequenceNumber_valid(self, value): self.thisRTP.sequenceNumber = value self.assertEqual(self.thisRTP.sequenceNumber, value) @given(st.integers().filter(lambda x: (x < 0) or (x >= 2**16))) def test_sequenceNumber_invalid(self, value): with self.assertRaises(ValueError): self.thisRTP.sequenceNumber = value def test_sequenceNumber_invalidType(self): with self.assertRaises(AttributeError): self.thisRTP.sequenceNumber = "" def test_timestamp_default(self): self.assertEqual(self.thisRTP.timestamp, 0) @given(st.integers(min_value=0, max_value=(2**32) - 1)) def test_timestamp_valid(self, value): self.thisRTP.timestamp = value self.assertEqual(self.thisRTP.timestamp, value) @given(st.integers().filter(lambda x: (x < 0) or (x >= 2**32))) def test_timestamp_invalid(self, value): with self.assertRaises(ValueError): self.thisRTP.timestamp = value def test_timestamp_invalidType(self): with self.assertRaises(AttributeError): self.thisRTP.timestamp = "" def test_ssrc_default(self): self.assertIsInstance(self.thisRTP.ssrc, int) @given(st.integers(min_value=0, max_value=(2**32) - 1)) def test_ssrc_valid(self, value): self.thisRTP.ssrc = value self.assertEqual(self.thisRTP.ssrc, value) @given(st.integers().filter(lambda x: (x < 0) or (x >= 2**32))) def test_ssrc_invalid(self, value): with self.assertRaises(ValueError): self.thisRTP.ssrc = value def test_ssrc_invalidType(self): with self.assertRaises(AttributeError): self.thisRTP.ssrc = "" def test_extension_default(self): self.assertEqual(self.thisRTP.extension, None) def test_extension(self): self.thisRTP.extension = None self.assertEqual(self.thisRTP.extension, None) newExt = Extension() self.thisRTP.extension = newExt self.assertEqual(self.thisRTP.extension, newExt) def test_extension_invalidType(self): with self.assertRaises(AttributeError): self.thisRTP.extension = "" def test_csrcList_default(self): self.assertEqual(self.thisRTP.csrcList, CSRCList()) def test_payload_default(self): self.assertEqual(self.thisRTP.payload, bytearray()) @given(st.binary()) def test_payload(self, value): self.thisRTP.payload = bytearray(value) self.assertEqual(self.thisRTP.payload, value) def test_payload_invalidType(self): with self.assertRaises(AttributeError): self.thisRTP.payload = "" def test_fromBytearray_default(self): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 default = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') newRTP = RTP().fromBytearray(default) self.assertEqual(newRTP, self.thisRTP) def test_toBytearray_default(self): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 expected = b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' self.assertEqual(self.thisRTP.toBytearray(), expected) @given(st.booleans()) def test_fromBytearray_padding(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 payload = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') payload[0] |= value << 5 newRTP = RTP().fromBytearray(payload) self.thisRTP.padding = value self.assertEqual(newRTP, self.thisRTP) @given(st.booleans()) def test_toBytearray_padding(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 expected = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') expected[0] |= value << 5 self.thisRTP.padding = value self.assertEqual(self.thisRTP.toBytearray(), expected) @given(st.binary(min_size=2, max_size=2), st.binary(max_size=((2**16) - 1) * 4).filter(lambda x: (len(x) % 4) == 0)) def test_fromBytearray_extension(self, startBits, headerExtension): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 newExt = Extension() newExt.startBits = bytearray(startBits) newExt.headerExtension = bytearray(headerExtension) payload = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') payload[0] |= 1 << 4 payload[12:12] = newExt.toBytearray() newRTP = RTP().fromBytearray(payload) self.thisRTP.extension = newExt self.assertEqual(newRTP, self.thisRTP) @given(st.binary(min_size=2, max_size=2), st.binary(max_size=((2**16) - 1) * 4).filter(lambda x: (len(x) % 4) == 0)) def test_toBytearray_extension(self, startBits, headerExtension): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 newExt = Extension() newExt.startBits = bytearray(startBits) newExt.headerExtension = bytearray(headerExtension) expected = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') expected[0] |= 1 << 4 expected[12:12] = newExt.toBytearray() self.thisRTP.extension = newExt self.assertEqual(self.thisRTP.toBytearray(), expected) @given( st.lists(st.integers(min_value=0, max_value=(2**16) - 1), max_size=15)) def test_fromBytearray_csrcList(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 payload = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') payload[0] |= len(value) for x in range(len(value)): payload[12 + (4 * x):12 + (4 * x)] = value[x].to_bytes( 4, byteorder='big') newRTP = RTP().fromBytearray(payload) self.thisRTP.csrcList.extend(value) self.assertEqual(newRTP, self.thisRTP) @given( st.lists(st.integers(min_value=0, max_value=(2**16) - 1), max_size=15)) def test_toBytearray_csrcList(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 expected = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') expected[0] |= len(value) for x in range(len(value)): expected[12 + (4 * x):12 + (4 * x)] = value[x].to_bytes( 4, byteorder='big') self.thisRTP.csrcList.extend(value) self.assertEqual(self.thisRTP.toBytearray(), expected) @given(st.booleans()) def test_fromBytearray_marker(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 payload = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') payload[1] |= value << 7 newRTP = RTP().fromBytearray(payload) self.thisRTP.marker = value self.assertEqual(newRTP, self.thisRTP) @given(st.booleans()) def test_toBytearray_marker(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 expected = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') expected[1] |= value << 7 self.thisRTP.marker = value self.assertEqual(self.thisRTP.toBytearray(), expected) @given(st.sampled_from(PayloadType)) def test_fromBytearray_payloadType(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 payload = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') payload[1] = value.value newRTP = RTP().fromBytearray(payload) self.thisRTP.payloadType = value self.assertEqual(newRTP, self.thisRTP) @given(st.sampled_from(PayloadType)) def test_toBytearray_payloadType(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 expected = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') expected[1] = value.value self.thisRTP.payloadType = value self.assertEqual(self.thisRTP.toBytearray(), expected) @given(st.integers(min_value=0, max_value=(2**16) - 1)) def test_fromBytearray_sequenceNumber(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 payload = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') payload[2:4] = value.to_bytes(2, byteorder='big') newRTP = RTP().fromBytearray(payload) self.thisRTP.sequenceNumber = value self.assertEqual(newRTP, self.thisRTP) @given(st.integers(min_value=0, max_value=(2**16) - 1)) def test_toBytearray_sequenceNumber(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 expected = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') expected[2:4] = value.to_bytes(2, byteorder='big') self.thisRTP.sequenceNumber = value self.assertEqual(self.thisRTP.toBytearray(), expected) @given(st.integers(min_value=0, max_value=(2**32) - 1)) def test_fromBytearray_timestamp(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 payload = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') payload[4:8] = value.to_bytes(4, byteorder='big') newRTP = RTP().fromBytearray(payload) self.thisRTP.timestamp = value self.assertEqual(newRTP, self.thisRTP) @given(st.integers(min_value=0, max_value=(2**32) - 1)) def test_toBytearray_timestamp(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 expected = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') expected[4:8] = value.to_bytes(4, byteorder='big') self.thisRTP.timestamp = value self.assertEqual(self.thisRTP.toBytearray(), expected) @given(st.integers(min_value=0, max_value=(2**32) - 1)) def test_fromBytearray_ssrc(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 payload = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') payload[8:12] = value.to_bytes(4, byteorder='big') newRTP = RTP().fromBytearray(payload) self.thisRTP.ssrc = value self.assertEqual(newRTP, self.thisRTP) @given(st.integers(min_value=0, max_value=(2**32) - 1)) def test_toBytearray_ssrc(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 expected = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') expected[8:12] = value.to_bytes(4, byteorder='big') self.thisRTP.ssrc = value self.assertEqual(self.thisRTP.toBytearray(), expected) @given(st.binary()) def test_fromBytearray_payload(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 payload = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') payload += value newRTP = RTP().fromBytearray(payload) self.thisRTP.payload = bytearray(value) self.assertEqual(newRTP, self.thisRTP) @given(st.binary()) def test_toBytearray_payload(self, value): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 expected = bytearray( b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') expected += value self.thisRTP.payload = bytearray(value) self.assertEqual(self.thisRTP.toBytearray(), expected) def test_fromBytes_default(self): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 default = b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' newRTP = RTP().fromBytes(default) self.assertEqual(newRTP, self.thisRTP) def test_toBytes_default(self): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 expected = b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' self.assertEqual(self.thisRTP.toBytes(), expected) def test_bytes_default(self): self.thisRTP.sequenceNumber = 0 self.thisRTP.ssrc = 0 expected = b'\x80\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' self.assertEqual(bytes(self.thisRTP), expected)