Proof
How BitVoice is tested, and what has not been tested
A phone system is only as good as the calls it does not drop. This page says what every change must pass, what BitVoice is checked against, and what it has not been tried with yet.
On every change
- The Go tests, with the race detector, on Linux against both SQLite and PostgreSQL, on Windows and on macOS (continuous integration)
- Fuzzing of the SIP, SDP, STUN and SRTP parsers, and of the ISDN facility decoder
- Every setting has a screen: a test walks the whole configuration and fails if any setting is not named in the web interface, so nothing quietly becomes file-only
- Browser tests in Chromium that drive every screen as a person would, and make real WebRTC calls between browser phones and the engine with the sound checked in both directions
Checked against other people's software
| Part | Checked against |
|---|---|
| IAX2 trunks | A real Asterisk 23: registration, calls both ways with sound, busy |
| T1/E1 PRI and BRI | libpri 1.6.1, both sides: calls, caller names, redirecting numbers, hold, transfers handed to the network (DMS-100 release link transfer too), advice of charge, BRI point to point and multipoint |
| MFC-R2 | OpenR2 (the library Asterisk uses), every variant offered, calls both ways |
| SS7 | libss7, ITU and ANSI: link alignment, link tests, calls both ways, circuit resets and blocking |
| G.723.1 | ffmpeg, which BitVoice runs to convert it when that is switched on |
| SIP over WebSocket | JsSIP and SIP.js softphones registering and calling each other through BitVoice |
| Let's Encrypt | Pebble, the test authority from the Let's Encrypt project |
| MP3 hold music | minimp3's C decoder, sample for sample |
| GSM and G.726 | ffmpeg: GSM decoded sample for sample as ffmpeg does, G.726 streams exchanged with it |
| P25 (lab track) | A real ISSI capture from NIST's public-domain tester, and the standard's own encryption examples |
| TTY (lab track) | spandsp's V.18 Baudot, both ways |
| Real-time text and text to 911 (lab track) | Wireshark's RTP, RFC 2198 and MSRP dissectors |
| Caller photos and clips (lab track) | Files tagged by ExifTool: their time and GPS read back |
| Signed NG911 log events (lab track) | A JWS signed by OpenSSL |
| NENA i3 web services (lab track) | NENA's published OpenAPI definitions (the NENA911 repositories): Policy Store, logging service, discrepancy reports, geocode and MSAG conversion, ADR, locator, dequeue, test calls, bad actors; EIDOs against NENA's EIDO schema |
| Text to 911 over TLS (lab track) | Wireshark, decrypting the session with its TLS keys |
| Recordings of callers' live video (lab track) | ffmpeg and ffprobe: every picture decodes, with its own time, after loss and reordering |
| Serial ports (ALI links) | A pseudo-terminal standing in for the cable, on Linux and macOS |
Not yet tried for real
These are built and tested against stand-ins, but not yet with the real thing. Reports from anyone who tries them are welcome on GitHub.
- Real desk phones: the automatic set-up (Yealink, Poly, Grandstream, Snom, Fanvil, Cisco, Mitel and Aastra, Sangoma, Algo, CyberData) is checked against each maker's published formats, not yet on the phones themselves
- SIP carriers in production, the outbound dialer's answering-machine detection on real lines, and T.38 fax through real carriers
- Telephony cards and PRI switches, including transfers handed to the phone company on real lines
- Skinny, MGCP and H.323 equipment; hotel systems (FIAS) against a real property-management system; SNMP managers
- Let's Encrypt itself (as against its test authority), TURN through real NATs, and Meta's live WhatsApp and Messenger APIs
- Published capacity figures on stated hardware
- The public-safety lab track with a live ESInet, a text control centre, a selective router's CAMA trunks, a P25 system, or a CAD: built and tested against stand-ins, waiting on a design partner's lab
Not built
- SS7 link sets of several links, a signal transfer point, and the SS7 database lookups (number portability, toll-free)
- MFC-R2's China variant: OpenR2's own one contradicts itself, so there is nothing sound to test against
- P25 Phase 2 half-rate voice (AMBE+2): patented until 2028