Skip to content

Commit 1b7fcb6

Browse files
committed
test: Add tests for all options setters/getters.
1 parent 724b9d9 commit 1b7fcb6

File tree

4 files changed

+69
-5
lines changed

4 files changed

+69
-5
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,4 @@ COPY test /build/test
4444
RUN . /path/to/venv/bin/activate \
4545
&& coverage run -m unittest discover -v -p "*_test.py"
4646
RUN . /path/to/venv/bin/activate \
47-
&& coverage report -m --fail-under=65
47+
&& coverage report -m --fail-under=67

pytox/toxcore/tox.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class Tox_Options_Ptr:
9999
proxy_host: Any
100100
proxy_port: Any
101101
proxy_type: Any
102+
savedata_data: Any
102103
savedata_type: Any
103104
start_port: Any
104105
tcp_port: Any

pytox/toxcore/tox.pyx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# cython: language_level=3, linetrace=True
2+
from libc.string cimport memcpy
23
from pytox import common
34
from types import TracebackType
45
from typing import TypeVar
@@ -264,11 +265,16 @@ cdef class Tox_Options_Ptr:
264265

265266
@property
266267
def proxy_host(self) -> str:
267-
return str(tox_options_get_proxy_host(self._get()))
268+
return tox_options_get_proxy_host(self._get()).decode("utf-8")
268269

269270
@proxy_host.setter
270271
def proxy_host(self, proxy_host: str):
271-
tox_options_set_proxy_host(self._get(), proxy_host)
272+
cdef size_t size = len(proxy_host) + 1
273+
proxy_host_bytes = proxy_host.encode("utf-8") + b"\0"
274+
cdef const char *proxy_host_chars = proxy_host_bytes
275+
cdef char *data = <char*> malloc(size * sizeof(char)) # LEAK!
276+
memcpy(data, proxy_host_chars, size)
277+
tox_options_set_proxy_host(self._get(), data)
272278

273279
@property
274280
def proxy_port(self) -> int:
@@ -318,6 +324,14 @@ cdef class Tox_Options_Ptr:
318324
def savedata_type(self, savedata_type: Tox_Savedata_Type):
319325
tox_options_set_savedata_type(self._get(), savedata_type)
320326

327+
@property
328+
def savedata_data(self) -> bytes:
329+
raise Exception("Not implemented") # TODO(iphydf): Implement
330+
331+
@savedata_data.setter
332+
def savedata_data(self, savedata_data: bytes):
333+
tox_options_set_savedata_data(self._get(), savedata_data, len(savedata_data))
334+
321335
@property
322336
def experimental_thread_safety(self) -> bool:
323337
return tox_options_get_experimental_thread_safety(self._get())

test/tox_options_test.py

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,60 @@ def test_options(self) -> None:
1111
opts.ipv6_enabled = False
1212
self.assertFalse(opts.ipv6_enabled)
1313

14+
self.assertTrue(opts.udp_enabled)
15+
opts.udp_enabled = False
16+
self.assertFalse(opts.udp_enabled)
17+
18+
self.assertTrue(opts.local_discovery_enabled)
19+
opts.local_discovery_enabled = False
20+
self.assertFalse(opts.local_discovery_enabled)
21+
22+
self.assertTrue(opts.dht_announcements_enabled)
23+
opts.dht_announcements_enabled = False
24+
self.assertFalse(opts.dht_announcements_enabled)
25+
26+
self.assertTrue(opts.hole_punching_enabled)
27+
opts.hole_punching_enabled = False
28+
self.assertFalse(opts.hole_punching_enabled)
29+
30+
self.assertEqual(opts.proxy_type, c.TOX_PROXY_TYPE_NONE)
31+
opts.proxy_type = c.TOX_PROXY_TYPE_SOCKS5
32+
self.assertEqual(opts.proxy_type, c.TOX_PROXY_TYPE_SOCKS5)
33+
34+
opts.proxy_host = "localhost"
35+
self.assertEqual(opts.proxy_host, "localhost")
36+
37+
opts.proxy_port = 1234
38+
self.assertEqual(opts.proxy_port, 1234)
39+
40+
opts.start_port = 1235
41+
self.assertEqual(opts.start_port, 1235)
42+
43+
opts.end_port = 1236
44+
self.assertEqual(opts.end_port, 1236)
45+
46+
opts.tcp_port = 1237
47+
self.assertEqual(opts.tcp_port, 1237)
48+
49+
opts.savedata_type = c.TOX_SAVEDATA_TYPE_TOX_SAVE
50+
self.assertEqual(opts.savedata_type, c.TOX_SAVEDATA_TYPE_TOX_SAVE)
51+
52+
# Can't test whether it works, but at least we can test that it doesn't crash.
53+
opts.savedata_data = b"test"
54+
55+
self.assertFalse(opts.experimental_thread_safety)
56+
opts.experimental_thread_safety = True
57+
self.assertTrue(opts.experimental_thread_safety)
58+
59+
self.assertFalse(opts.experimental_groups_persistence)
60+
opts.experimental_groups_persistence = True
61+
self.assertTrue(opts.experimental_groups_persistence)
62+
1463
def test_use_after_free(self) -> None:
1564
with c.Tox_Options_Ptr() as opts:
16-
saved_opts = opts
65+
pass
1766
with self.assertRaises(common.UseAfterFreeException):
18-
print(saved_opts.ipv6_enabled)
67+
print(opts.ipv6_enabled)
1968

2069

2170
if __name__ == "__main__":

0 commit comments

Comments
 (0)