import base64 import unittest from deploy import sip_probe class SipProbeTests(unittest.TestCase): def test_summarize_uses_first_final_response(self): output = """CALL_START INVITE sip:708913851814181@provider SIP/2.0 SIP/2.0 100 trying SIP/2.0 404 Not Found Reason: Q.850;cause=16;text=\"NORMAL_CLEARING\" SIP/2.0 200 OK 0 active channels """ result = sip_probe.summarize(output, "708913851814181") self.assertEqual(result["result"], "rejected") self.assertEqual(result["final_response"]["code"], 404) self.assertEqual(result["reason"], 'Q.850;cause=16;text="NORMAL_CLEARING"') self.assertEqual(result["active_channels"], 0) def test_remote_command_is_short_and_keeps_logger_on(self): command = sip_probe.remote_command("13851814181", "708913851814181", 5) self.assertIn("pjsip set logger on", command) self.assertIn("Wait 5", command) self.assertIn("sleep 7", command) self.assertNotIn("pjsip set logger off", command) def test_output_text_accepts_plain_and_base64(self): plain = "CALL_START\nSIP/2.0 404 Not Found\n" encoded = base64.b64encode(plain.encode()).decode() self.assertEqual(sip_probe.output_text({"Output": plain}), plain) self.assertEqual(sip_probe.output_text({"Output": encoded}), plain) def test_number_validation_preserves_original_digits(self): number = "001380051234567" self.assertEqual(sip_probe.validate_number(number), number) with self.assertRaises(ValueError): sip_probe.validate_number("+861380051234567") if __name__ == "__main__": unittest.main()