(self)
| 4811 | @requireAttrs(socket, "CMSG_SPACE", "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT", |
| 4812 | "IPV6_RECVTCLASS", "IPV6_TCLASS") |
| 4813 | def testSecondCmsgTruncInData(self): |
| 4814 | # Test truncation of the second of two control messages inside |
| 4815 | # its associated data. |
| 4816 | self.serv_sock.setsockopt(socket.IPPROTO_IPV6, |
| 4817 | socket.IPV6_RECVHOPLIMIT, 1) |
| 4818 | self.serv_sock.setsockopt(socket.IPPROTO_IPV6, |
| 4819 | socket.IPV6_RECVTCLASS, 1) |
| 4820 | self.misc_event.set() |
| 4821 | with downgrade_malformed_data_warning(): # TODO: gh-110012 |
| 4822 | msg, ancdata, flags, addr = self.doRecvmsg( |
| 4823 | self.serv_sock, len(MSG), |
| 4824 | socket.CMSG_SPACE(SIZEOF_INT) + socket.CMSG_LEN(SIZEOF_INT) - 1) |
| 4825 | |
| 4826 | self.assertEqual(msg, MSG) |
| 4827 | self.checkRecvmsgAddress(addr, self.cli_addr) |
| 4828 | self.checkFlags(flags, eor=True, checkset=socket.MSG_CTRUNC) |
| 4829 | |
| 4830 | cmsg_types = {socket.IPV6_TCLASS, socket.IPV6_HOPLIMIT} |
| 4831 | |
| 4832 | cmsg_level, cmsg_type, cmsg_data = ancdata.pop(0) |
| 4833 | self.assertEqual(cmsg_level, socket.IPPROTO_IPV6) |
| 4834 | cmsg_types.remove(cmsg_type) |
| 4835 | self.assertEqual(len(cmsg_data), SIZEOF_INT) |
| 4836 | a = array.array("i") |
| 4837 | a.frombytes(cmsg_data) |
| 4838 | self.assertGreaterEqual(a[0], 0) |
| 4839 | self.assertLessEqual(a[0], 255) |
| 4840 | |
| 4841 | if ancdata: |
| 4842 | cmsg_level, cmsg_type, cmsg_data = ancdata.pop(0) |
| 4843 | self.assertEqual(cmsg_level, socket.IPPROTO_IPV6) |
| 4844 | cmsg_types.remove(cmsg_type) |
| 4845 | self.assertLess(len(cmsg_data), SIZEOF_INT) |
| 4846 | |
| 4847 | self.assertEqual(ancdata, []) |
| 4848 | |
| 4849 | @testSecondCmsgTruncInData.client_skip |
| 4850 | def _testSecondCmsgTruncInData(self): |
nothing calls this directly
no test coverage detected