|
| 1 | +import signal |
1 | 2 | import sysconfig |
| 3 | +import threading |
2 | 4 | from concurrent.futures import ThreadPoolExecutor |
3 | 5 | from datetime import datetime |
| 6 | +from time import sleep |
4 | 7 |
|
5 | 8 | from pytest import mark, raises |
6 | 9 |
|
@@ -73,6 +76,43 @@ def test_sonyflake(use_iter: bool, n: int) -> None: |
73 | 76 | assert sorted(ids) == ids |
74 | 77 |
|
75 | 78 |
|
| 79 | +@mark.skipif( |
| 80 | + not hasattr(signal, "pthread_kill"), |
| 81 | + reason="pthread_kill not supported", |
| 82 | +) |
| 83 | +def test_sonyflake_sigint() -> None: |
| 84 | + sf = SonyFlake(0x0000, start_time=1749081600) |
| 85 | + thread_id = threading.get_ident() |
| 86 | + |
| 87 | + def thread_func() -> None: |
| 88 | + sleep(0.1) |
| 89 | + signal.pthread_kill(thread_id, signal.SIGINT) |
| 90 | + |
| 91 | + threading.Thread(target=thread_func).start() |
| 92 | + |
| 93 | + with raises(KeyboardInterrupt): |
| 94 | + sf(50000) |
| 95 | + |
| 96 | + |
| 97 | +@mark.skipif( |
| 98 | + not hasattr(signal, "pthread_kill"), |
| 99 | + reason="pthread_kill not supported", |
| 100 | +) |
| 101 | +def test_sonyflake_sigusr() -> None: |
| 102 | + sf = SonyFlake(0x0000, start_time=1749081600) |
| 103 | + thread_id = threading.get_ident() |
| 104 | + |
| 105 | + signal.signal(signal.SIGUSR1, lambda *_: None) |
| 106 | + |
| 107 | + def thread_func() -> None: |
| 108 | + sleep(0.1) |
| 109 | + signal.pthread_kill(thread_id, signal.SIGUSR1) |
| 110 | + |
| 111 | + threading.Thread(target=thread_func).start() |
| 112 | + |
| 113 | + assert len(sf(50000)) == 50000 |
| 114 | + |
| 115 | + |
76 | 116 | def test_sonyflake_repr() -> None: |
77 | 117 | sf = SonyFlake(0x0000, 0x7F7F, 0xFFFF, start_time=1749081600) |
78 | 118 |
|
|
0 commit comments