Register a handler displaying the traceback on a user signal. Raise the signal and check the written traceback. If chain is True, check that the previous signal handler is called. Raise an error if the output doesn't match the expected format.
(self, filename=False, all_threads=False,
unregister=False, chain=False, fd=None)
| 722 | @unittest.skipIf(not hasattr(faulthandler, "register"), |
| 723 | "need faulthandler.register") |
| 724 | def check_register(self, filename=False, all_threads=False, |
| 725 | unregister=False, chain=False, fd=None): |
| 726 | """ |
| 727 | Register a handler displaying the traceback on a user signal. Raise the |
| 728 | signal and check the written traceback. |
| 729 | |
| 730 | If chain is True, check that the previous signal handler is called. |
| 731 | |
| 732 | Raise an error if the output doesn't match the expected format. |
| 733 | """ |
| 734 | signum = signal.SIGUSR1 |
| 735 | code = """ |
| 736 | import faulthandler |
| 737 | import os |
| 738 | import signal |
| 739 | import sys |
| 740 | |
| 741 | all_threads = {all_threads} |
| 742 | signum = {signum:d} |
| 743 | unregister = {unregister} |
| 744 | chain = {chain} |
| 745 | filename = {filename!r} |
| 746 | fd = {fd} |
| 747 | |
| 748 | def func(signum): |
| 749 | os.kill(os.getpid(), signum) |
| 750 | |
| 751 | def handler(signum, frame): |
| 752 | handler.called = True |
| 753 | handler.called = False |
| 754 | |
| 755 | if filename: |
| 756 | file = open(filename, "wb") |
| 757 | elif fd is not None: |
| 758 | file = sys.stderr.fileno() |
| 759 | else: |
| 760 | file = None |
| 761 | if chain: |
| 762 | signal.signal(signum, handler) |
| 763 | faulthandler.register(signum, file=file, |
| 764 | all_threads=all_threads, chain={chain}) |
| 765 | if unregister: |
| 766 | faulthandler.unregister(signum) |
| 767 | func(signum) |
| 768 | if chain and not handler.called: |
| 769 | if file is not None: |
| 770 | output = file |
| 771 | else: |
| 772 | output = sys.stderr |
| 773 | print("Error: signal handler not called!", file=output) |
| 774 | exitcode = 1 |
| 775 | else: |
| 776 | exitcode = 0 |
| 777 | if filename: |
| 778 | file.close() |
| 779 | sys.exit(exitcode) |
| 780 | """ |
| 781 | code = code.format( |
no test coverage detected