|
@@ -1,6 +1,7 @@
|
|
|
import pytest
|
|
import pytest
|
|
|
from panda3d import core
|
|
from panda3d import core
|
|
|
import sys
|
|
import sys
|
|
|
|
|
+import tempfile
|
|
|
|
|
|
|
|
# Fixtures for generating interesting datagrams (and verification functions) on
|
|
# Fixtures for generating interesting datagrams (and verification functions) on
|
|
|
# the fly...
|
|
# the fly...
|
|
@@ -28,6 +29,9 @@ def datagram_small(request):
|
|
|
dg.add_string32('this is another string')
|
|
dg.add_string32('this is another string')
|
|
|
dg.add_string('this is yet a third string')
|
|
dg.add_string('this is yet a third string')
|
|
|
|
|
|
|
|
|
|
+ dg.add_blob(b'blob data \x00\xf2\xa0\x00\x00')
|
|
|
|
|
+ dg.add_blob32(b'\xc9\x8f\x00 test blob32')
|
|
|
|
|
+
|
|
|
dg.add_stdfloat(800.2)
|
|
dg.add_stdfloat(800.2)
|
|
|
dg.add_stdfloat(3.1415926)
|
|
dg.add_stdfloat(3.1415926)
|
|
|
dg.add_stdfloat(2.7182818)
|
|
dg.add_stdfloat(2.7182818)
|
|
@@ -49,6 +53,9 @@ def datagram_small(request):
|
|
|
assert dgi.get_string32() == 'this is another string'
|
|
assert dgi.get_string32() == 'this is another string'
|
|
|
assert dgi.get_string() == 'this is yet a third string'
|
|
assert dgi.get_string() == 'this is yet a third string'
|
|
|
|
|
|
|
|
|
|
+ assert dgi.get_blob() == b'blob data \x00\xf2\xa0\x00\x00'
|
|
|
|
|
+ assert dgi.get_blob32() == b'\xc9\x8f\x00 test blob32'
|
|
|
|
|
+
|
|
|
assert dgi.get_stdfloat() == pytest.approx(800.2)
|
|
assert dgi.get_stdfloat() == pytest.approx(800.2)
|
|
|
assert dgi.get_stdfloat() == pytest.approx(3.1415926)
|
|
assert dgi.get_stdfloat() == pytest.approx(3.1415926)
|
|
|
assert dgi.get_stdfloat() == pytest.approx(2.7182818)
|
|
assert dgi.get_stdfloat() == pytest.approx(2.7182818)
|
|
@@ -88,6 +95,12 @@ def test_datagram_bytes():
|
|
|
dgi.get_remaining_bytes() == b'abc\x00\xff123'
|
|
dgi.get_remaining_bytes() == b'abc\x00\xff123'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+def test_datagram_get_message():
|
|
|
|
|
+ dg = core.Datagram(b'abc\x00')
|
|
|
|
|
+ dg.append_data(b'\xff123')
|
|
|
|
|
+ assert dg.get_message() == b'abc\x00\xff123'
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
def test_iterator(datagram_small):
|
|
def test_iterator(datagram_small):
|
|
|
"""This tests Datagram/DatagramIterator, and sort of serves as a self-check
|
|
"""This tests Datagram/DatagramIterator, and sort of serves as a self-check
|
|
|
of the test fixtures too."""
|
|
of the test fixtures too."""
|
|
@@ -135,30 +148,39 @@ def do_file_test(dg, verify, filename):
|
|
|
dgi = core.DatagramIterator(dg2)
|
|
dgi = core.DatagramIterator(dg2)
|
|
|
verify(dgi)
|
|
verify(dgi)
|
|
|
|
|
|
|
|
-def test_file_small(datagram_small, tmpdir):
|
|
|
|
|
|
|
[email protected]
|
|
|
|
|
+def tmpfile():
|
|
|
|
|
+ file = tempfile.NamedTemporaryFile(suffix='.bin')
|
|
|
|
|
+ yield file
|
|
|
|
|
+ file.close()
|
|
|
|
|
+
|
|
|
|
|
+def test_file_small(datagram_small, tmpfile):
|
|
|
"""This tests DatagramOutputFile/DatagramInputFile on small datagrams."""
|
|
"""This tests DatagramOutputFile/DatagramInputFile on small datagrams."""
|
|
|
dg, verify = datagram_small
|
|
dg, verify = datagram_small
|
|
|
|
|
|
|
|
- p = tmpdir.join('datagram.bin')
|
|
|
|
|
- filename = core.Filename.from_os_specific(str(p))
|
|
|
|
|
|
|
+ file = tempfile.NamedTemporaryFile(suffix='.bin')
|
|
|
|
|
+ filename = core.Filename.from_os_specific(file.name)
|
|
|
|
|
+ filename.make_true_case()
|
|
|
|
|
|
|
|
do_file_test(dg, verify, filename)
|
|
do_file_test(dg, verify, filename)
|
|
|
|
|
|
|
|
-def test_file_large(datagram_large, tmpdir):
|
|
|
|
|
|
|
+def test_file_large(datagram_large, tmpfile):
|
|
|
"""This tests DatagramOutputFile/DatagramInputFile on very large datagrams."""
|
|
"""This tests DatagramOutputFile/DatagramInputFile on very large datagrams."""
|
|
|
dg, verify = datagram_large
|
|
dg, verify = datagram_large
|
|
|
|
|
|
|
|
- p = tmpdir.join('datagram.bin')
|
|
|
|
|
- filename = core.Filename.from_os_specific(str(p))
|
|
|
|
|
|
|
+ file = tempfile.NamedTemporaryFile(suffix='.bin')
|
|
|
|
|
+ filename = core.Filename.from_os_specific(file.name)
|
|
|
|
|
+ filename.make_true_case()
|
|
|
|
|
|
|
|
do_file_test(dg, verify, filename)
|
|
do_file_test(dg, verify, filename)
|
|
|
|
|
|
|
|
-def test_file_corrupt(datagram_small, tmpdir):
|
|
|
|
|
|
|
+def test_file_corrupt(datagram_small, tmpfile):
|
|
|
"""This tests DatagramInputFile's handling of a corrupt size header."""
|
|
"""This tests DatagramInputFile's handling of a corrupt size header."""
|
|
|
dg, verify = datagram_small
|
|
dg, verify = datagram_small
|
|
|
|
|
|
|
|
- p = tmpdir.join('datagram.bin')
|
|
|
|
|
- filename = core.Filename.from_os_specific(str(p))
|
|
|
|
|
|
|
+ file = tempfile.NamedTemporaryFile(suffix='.bin')
|
|
|
|
|
+ filename = core.Filename.from_os_specific(file.name)
|
|
|
|
|
+ filename.make_true_case()
|
|
|
|
|
|
|
|
dof = core.DatagramOutputFile()
|
|
dof = core.DatagramOutputFile()
|
|
|
dof.open(filename)
|
|
dof.open(filename)
|
|
@@ -166,9 +188,9 @@ def test_file_corrupt(datagram_small, tmpdir):
|
|
|
dof.close()
|
|
dof.close()
|
|
|
|
|
|
|
|
# Corrupt the size header to 1GB
|
|
# Corrupt the size header to 1GB
|
|
|
- with p.open(mode='r+b') as f:
|
|
|
|
|
- f.seek(0)
|
|
|
|
|
- f.write(b'\xFF\xFF\xFF\x4F')
|
|
|
|
|
|
|
+ file.seek(0)
|
|
|
|
|
+ file.write(b'\xFF\xFF\xFF\x4F')
|
|
|
|
|
+ file.flush()
|
|
|
|
|
|
|
|
dg2 = core.Datagram()
|
|
dg2 = core.Datagram()
|
|
|
dif = core.DatagramInputFile()
|
|
dif = core.DatagramInputFile()
|
|
@@ -178,8 +200,7 @@ def test_file_corrupt(datagram_small, tmpdir):
|
|
|
|
|
|
|
|
# Truncate the file
|
|
# Truncate the file
|
|
|
for size in [12, 8, 4, 3, 2, 1, 0]:
|
|
for size in [12, 8, 4, 3, 2, 1, 0]:
|
|
|
- with p.open(mode='r+b') as f:
|
|
|
|
|
- f.truncate(size)
|
|
|
|
|
|
|
+ file.truncate(size)
|
|
|
|
|
|
|
|
dg2 = core.Datagram()
|
|
dg2 = core.Datagram()
|
|
|
dif = core.DatagramInputFile()
|
|
dif = core.DatagramInputFile()
|