Tested versions
May 22, 2026 ยท View on GitHub
| Version | Status |
|---|---|
| OpenSIPS 4.1/Devel | |
| OpenSIPS 4.0 | |
| OpenSIPS 3.6 |
OpenSIPS Tests
This project contains a set of tests that are being performed to test the behavior of the OpenSIPS SIP Server under certain scenarios.
Tests are being executed by the SIPssert tool
Tests
There are multiple tests sets available, depending on what is their main testing focus:
Startup
Tests whether OpenSIPS starts up successfully with various configurations and settings.
01.default-cfg
Tests OpenSIPS startup with the default sample script.
02.gen-residential-cfg
Tests OpenSIPS startup with the menuconfig generated Residential Script.
03.gen-trunking-cfg
Tests OpenSIPS startup with the menuconfig generated Trunking Script.
04.gen-loadbalancer-cfg
Tests OpenSIPS startup with the menuconfig generated Load-Balancer Script.
Registrations
Performs registration tests:
01.no-db
Performs registrations tests when no database is involved. Verification steps are:
- Register to OpenSIPS using sipp
- Check the registration exists using OpenSIPS CLI
- Unregister using sipp
- Check the registration dissapeared
02.db
Performs registrations tests using MySQL database. Verification steps are:
- Register to OpenSIPS using sipp
- Check the registration exists using OpenSIPS CLI
- Check the registration exists in DB after flush timeout passes
- Unregister using sipp
- Check the registration dissapeared
- Checks the database is empty after timer flush
03.expire
Same as 02.db, but leaves the contact to expire.
- Checks through MI that the registration was removed
- Checks the database is empty after timer flush
04.expire-min
Same as 03.expire, but enforces a minimum expire time.
05.expire-max
Same as 03.expire, but enforces a maximum expire time.
06.reregister-expire
Performs a registration and then a re-registration for the same contact.
- Verifies that the initial registration was correct both through MI and MySQL
- Checks the re-register matches the same contact and updates the registration
- Verifies the entry expires correctly
07.limit
Performs multiple registrations, but limit the number of contacts
- Verifies that after each iteration, the correct number of contacts is in memory
- Checks that the database contains the correct number of entries
08.overwrite
Performs multiple registrations, each one overwriting the previous one
- Verifies that after each iteration, there is only one contact registered
- Checks that each registration overwrites the next one
09.lookup
Does a registration and then relays a call to the registerd contact.
Authentication
Performs authentication tests:
01.password-db-www
Checks registration of an endpoint with passwords stored in DB
- The tests expects a challenge followed by a 200 OK at SIP level
02.password-db-www-domain
Same as 01.password-db-www, but checks also checks the domain is correct.
03.password-db-proxy
Same as 01.password-db-www, but checks if a call gets authenticated.
04.password-db-proxy-domain
Same as 03.password-db-proxy, but checks if the domain is correct.
05.ha1-db-www
Same as 01.password-db-www, but checks the ha1 password.
06.ha1-db-www-domain
Same as 02.password-db-www-domain, but checks the ha1 password.
07.ha1-db-proxy
Same as 03.password-db-proxy, but checks the ha1 password.
08.ha1-db-proxy-domain
Same as 04.password-db-proxy-domain, but checks the ha1 password.
Record Route
Places calls without using the Record-Route mechanism. Checks are being performed at the (SIPP) UAC/UAS level, ensuring the traffic completes as expected and validating the Route and Record-Route headers.
01.record-route
Places a call and validates it establishes correctly.
02.record-route-protocols
Similar to 01.record-route, but establishes a call for two UAs that are using different protocols (i.e. UDP vs TCP), using double Record-Routing.
03.record-route-double
Similar to 01.record-route, but establishes a call between two different interfaces in two different networks.
Dialog
Checks call using dialog support.
01.dialog
Performs a call with dialog support and stored in MySQL database. Verification steps are:
- Place a call from a UAC to an UAS
- Check the dialog has been created (dialog stats and
dlg_listare checked) - Check that the dialog has been properly flushed in database
- When the call finishes, we check the stats are properly cleared
- We check the call as been removed from the database
- SIPP scenarios check the Record-Route headers are present and no Route
02.pinging
Similar to 01.dialog, but checks that OPTIONS pinging is working.
03.reinvite-pinging
Similar to 02.pinging, but checks that re-INVITE pinging is working.
04.expire
Similar to 01.dialog, but expires the dialog before a BYE is received.
05.reinvite-auth
Runs a call through dialog where the re-INVITE is challenged by the UAC.
06.auth-update
Runs a scenario when an UPDATE message is being sent while the calls is being answered.
Runs a call through dialog where the re-INVITE is challenged by the UAC.
Topology Hiding
Runs a set of calls using the topology hiding scenario, verifying that the UAS are seeing only the next hop (OpenSIPS) in their signaling.
01.th-no-dialog
Performs a call using topology hiding without dialog support. Verifies that:
- UAs are only seeing next hop
- Routing is correctly done
- Topology hiding information is present in the Route and Record-Route headers
02.th-no-dialog-username
Similar to 01.th-no-dialog, but passes the username in the Contact header.
03.th-dialog
Similar to 01.th-no-dialog, but uses the dialog module to store topology hiding information.
04.th-dialog-username
Similar to 03.th-dialog, but propagates the username in the Contact header.
05.th-dialog-did
Similar to 03.th-dialog, but pushes the dialog id in the Contact username, rather than in the URI param.
06.th-dialog-callid
Similar to 03.th-dialog, but changes the Call-ID of the UAS leg.
07.th-b2b
Simiar to 01.th-no-dialog and 01.th-dialog but performs the tests going through the B2B engine.
B2B
Runs a set of tests against common B2B scenarios, verifying that the SIP flows complete correctly.
01.prepaid
Performs the Prepaid scenario, and checks that calls are properly executed.
02.marketing
Performs the Marketing B2B scenario, and checks that the two entities are executed according to the desired flow and scenario.
03.refer-unattended-uac
Runs the REFER/unattended transfer scenario, triggering the transfer from the UAC side.
04.refer-unattended-uas
Same as 03.refer-unattended-uac, but transfers from the UAS side.
05.refer-unattended-uac-fail
Same as 03.refer-unattended-uac, but the transfer fails, checking that all the entities are properly removed.
06.refer-unattended-uas-fail
Same as 05.refer-unattended-uac-fail, but the transfer is attempted from the UAS side.
07.refer-unattended-uac-notify
Same as 04.refer-unattended-uac, but enables RFC3515 NOTIFYs.
08.refer-unattended-uas-notify
Same as 04.refer-unattended-uas, but enables RFC3515 NOTIFYs.
09.refer-unattended-uac-notify-fail
Attempts a call transfer, but fails, checking that the call remains alive.
10.refer-unattended-uas-notify-fail
Same as 09.refer-unattended-uac-notify-fail, but tries to transfer from UAS, which fails, then checks that the call remains alive.
11.refer-unattended-uac-prov
Same as 03.refer-unattended-uac, but provides a provisional media to the remaining participant.
12.refer-unattended-uas-prov
Same as 04.refer-unattended-uas, but provides a provisional media to the remaining participant.
13.refer-unattended-uac-prov-fail
Same as 03.refer-unattended-uac, but provides a provisional media to the remaining participant, and the transfer fails.
14.refer-unattended-uas-prov-fail
Same as 04.refer-unattended-uas, but provides a provisional media to the remaining participant, and the transfer fails.
15.refer-unattended-uac-prov-notify-fail
Same as 09.refer-unattended-uac-notify-fail, but provides a provisional media to the remaining participant.
16.refer-unattended-uas-prov-notify-fail
Same as 10.refer-unattended-uas-notify-fail, but provides a provisional media to the remaining participant.
17.refer-unattended-uac-mi
Same as 03.refer-unattended-uac, but the transfer is being triggered through MI.
18.refer-unattended-uas-mi
Same as 04.refer-unattended-uas, but the transfer is being triggered through MI.
19.refer-unattended-uac-prov-mi
Same as 17.refer-unattended-uac-mi, but provides a provisional media to the remaining participant.
20.refer-unattended-uas-prov-mi
Same as 18.refer-unattended-uas-mi, but provides a provisional media to the remaining participant.
21.refer-unattended-uac-hold
Same as 03.refer-unattended-uac, but puts the remaining participant on hold first.
22.refer-unattended-uac-no-late
Same as 03.refer-unattended-uac, but does not use late SDP with the new participant.
23.refer-unattended-uac-no-late-prov
Same as 22.refer-unattended-uac-no-late, but provides a provisional media to the remaining participant.
24.refer-unattended-uac-retry
Same as 03.refer-unattended-uac, but the transfer fails and the remaining participant is bridged with a new destination.
25.top-hiding
Runs the internal topology hiding scenario.
26.parking
Runs a simple parking scenario where a call is sent to a media server then picked up by the called entity later.
26.parking-late-bye
Run the same as 26.parking scenario, but delays the bye towards the initial entity until the pickup is established.
26.parking-late-bye-delay
Run the same as 26.parking-late-bye scenario, but delays the BYE being sent with a configured value.
27.top-hiding-reject
Run the same as 25.top-hiding scenario, but send re-INVITEs which are rejected.
28.top-hiding-overlapping
Run the same as 25.top-hiding scenario, but send re-INVITEs in such a manner that they overlap.
29.refer-unattended-uas-491-uas
Runs a b2b transfer scenario where there is a race between a re-INVITE generated by the caller and the one generated by the referee. In this case, the referee/uac sends its re-INVITE after the 491.
30.refer-unattended-uas-491-uac
Run the same as 29.refer-unattended-uas-491-uas scenario, but the referee no longer sends the re-INVITE, thus we retry the bridging after 2.1-4s.
31.refer-unattended-uac-notify-cancel
Run a transfer similar to 09.refer-unattended-uac-notify-fail, but the call times out and the referee's call gets canceled.
32.refer-unattended-uas-notify-cancel
Run a transfer similar to 10.refer-unattended-uas-notify-fail, but the call times out and the referee's call gets canceled.
33.refer-unattended-uac-notify-terminate
Run a transfer similar to 09.refer-unattended-uac-notify-fail, but the remaining participant terminates the call during transfer.
34.refer-unattended-uas-notify-terminate
Run a transfer similar to 10.refer-unattended-uas-notify-fail, but the remaining participant terminates the call during transfer.
UAC Auth
Verifies the behavior of uac_auth module.
01.register-uac-auth-credentials-plain
Registers using the uac_auth module with credentials provided in plain text.
02.register-uac-auth-credentials-ha1
Same as 01.register-uac-auth-credentials-plain, but uses the credentials stored in the ha1 format.
03.register-uac-auth-avp-plain
Same as 01.register-uac-auth-credentials-plain, but takes the credentials in plain text through script AVPs.
04.register-uac-auth-avp-ha1
Same as 01.register-uac-auth-credentials-plain, but takes the credentials in ha1 format through script AVPs.
05.register-uac-auth-int-credentials-plain
Same as
01.register-uac-auth-credentials-plain,
but uses authentication integrity (auth-int) for quality of protection
(qop).
06.register-uac-auth-int-credentials-ha1
Same as
02.register-uac-auth-credentials-ha1,
but uses authentication integrity (auth-int) for quality of protection
(qop).
07.register-uac-auth-int-avp-plain
Same as
03.register-uac-auth-avp-plain,
but uses authentication integrity (auth-int) for quality of protection
(qop).
08.register-uac-auth-int-credentials-ha1
Same as
04.register-uac-auth-avp-ha1,
but uses authentication integrity (auth-int) for quality of protection
(qop).
09.register-uac-auth-auth-int-credentials-plain
Same as
01.register-uac-auth-credentials-plain, and
05.register-uac-auth-int-credentials-plain,
but server supports both authentication (auth) and uses authentication
integrity (auth-int) for quality of protection (qop).
10.register-uac-auth-auth-int-credentials-ha1
Same as
02.register-uac-auth-credentials-ha1, and
06.register-uac-auth-int-credentials-ha1,
but server supports both authentication (auth) and uses authentication
integrity (auth-int) for quality of protection (qop).
11.register-uac-auth-auth-int-avp-plain
Same as
03.register-uac-auth-avp-plain, and
07.register-uac-auth-int-avp-plain,
but server supports both authentication (auth) and uses authentication
integrity (auth-int) for quality of protection (qop).
12.register-uac-auth-auth-int-credentials-ha1
Same as
04.register-uac-auth-avp-ha1, and
08.register-uac-auth-int-avp-ha1,
but server supports both authentication (auth) and uses authentication
integrity (auth-int) for quality of protection (qop).
13.rr-auth-invite-uas
Places a call where the UAS authenticates for the initial INVITE.
14.rr-auth-bye-uas
Places a call where the UAS authenticates for the in-dialog BYE.
15.rr-auth-bye-uac
Places a call where the UAC authenticates for the in-dialog BYE.
16.dialog-auth-invite-uas
Same as 13.rr-auth-invite-uas, but authentication changes are stored in dialog.
17.dialog-auth-reinvite-uas
Places a call where the UAS authenticates for the in-dialog reINVITE.
18.dialog-auth-bye-uas
Places a call where the UAS authenticates for the in-dialog BYE.
19.dialog-auth-invite-bye-uas
Places a call where the UAS authenticates the initial INVITE and the BYE messages.
20.dialog-auth-invite-reinvite-bye-uas
Places a call where the UAS authenticates the initial INVITE, reINVITE and the BYE messages.
21.dialog-auth-bye-uac
Places a call where the UAC authenticates for the in-dialog BYE.
22.dialog-auth-reinvite-uac
Places a call where the UAC authenticates for the in-dialog reINVITE.
23.dialog-auth-reinvite-bye-uac
Places a call where the UAC authenticates for both in-dialog reINVITE and BYE.
24.dialog-auth-reinvite-uac-reinvite-uas
Places a call where both UAC and UAS authenticates for the in-dialog reINVITE.
25.dialog-auth-reinvite-uas-reinvite-uac
Same as 24.dialog-auth-reinvite-uac-reinvite-uas, but reINVITEs are sent in reversed order.
26.dialog-auth-reinvite-uac-reinvite-uas-bye-uas
Places a call where both UAC and UAS authenticates for the in-dialog reINVITE and the BYE is authenticated by the UAS.
27.dialog-auth-reinvite-uac-reinvite-uas-bye-uac
Same as 26.dialog-auth-reinvite-uac-reinvite-uas-bye-uas, but BYE is authenticated by the UAC.
Stir and shaken
:warning: Scenarios are being created for French regulations
01.auth-simple
A basic stir and shaken authentication
It use a compatible Self-Signed STIR/SHAKEN Certificate (info here)
:warning: This scenario use a specific version of opensips-cli
(more explanations in scenario's README)
02.auth-diverted-cached
Same as
01.auth-simple, but add processing of Diversion header, public key caching, store private key in separate file (more explanations in scenario's README)
03.auth-issue-bypass-token
Same as
01.auth-simple, $var(cert) deleted to force stir_shaken_auth function in error and automatically add P-Identity-Bypass header. (more explanations in scenario's README)
04.verify-200
Places a call with correct Identity header
05.verify-200-anonymous
Places a call with correct Identity header but with From Anonymous
06.verify-error-400-wrong-from
Places a call with wrong orig in conf (more explanations in scenario's README)
07.verify-error-400-wrong-from-no-kill-call
Places a call with wrong orig in conf, but not kill call (more explanations in scenario's README)
08.verify-error-403-wrong-date
Places a call with wrong Date header (more explanations in scenario's README)
09.verify-error-403-wrong-iat
Places a call with wrong iat token (more explanations in scenario's README)
10.verify-error-428-no-identity
Places a call without Identity header (more explanations in scenario's README)
11.verify-error-436-no-info
Places a call without Identity's info param (more explanations in scenario's README)
12.verify-error-436-token-no-4-params
Places a call without 4 params in Identity header (more explanations in scenario's README)
13.verify-error-436-x5u-diff-info
Places a call with x5u and info are different (more explanations in scenario's README)
14.verify-error-437-no-alg
Places a call without alg identity param (more explanations in scenario's README)
15.verify-error-437-wrong-alg
Places a call with wrong alg identity param (more explanations in scenario's README)
16.verify-error-437-wrong-header-alg
Places a call without alg token param (more explanations in scenario's README)
17.verify-error-437-wrong-header-typ
Places a call without typ token param (more explanations in scenario's README)
18.verify-error-437-cert-expired
Places a call with expired certificate (more explanations in scenario's README)
19.verify-error-437-cert-in-future
Places a call with certificate starts in 2025 (more explanations in scenario's README)
20.verify-error-438-identity-more-4-params
Places a call with 5 params in Identity header (more explanations in scenario's README)
21.verify-error-438-no-ppt
Places a call without ppt identity param (more explanations in scenario's README)
22.verify-error-438-wrong-ppt
Places a call with wrong ppt identity param (more explanations in scenario's README)
23.verify-error-438-wrong-header-ppt
Places a call without ppt token param (more explanations in scenario's README)
24.verify-error-438-wrong-attest
Places a call with wrong attest (more explanations in scenario's README)
25.verify-error-438-orig-diff-from
Places a call with orig and from are different (more explanations in scenario's README)
26.verify-error-438-dest-diff-to
Places a call with dest and To are different (more explanations in scenario's README)
27.acc-stats-200
Places a call with correct Identity and push stats in ACC (more explanations in scenario's README)
28.acc-stats-error-403-wrong-iat
Places a call with wrong iat token and push stats in ACC (more explanations in scenario's README)
29.acc-stats-error-403-no-kill-call
Places a call with wrong iat token, but not kill call and push stats in ACC (more explanations in scenario's README)
Accounting
Tests accounting functionalities.
01.db-transaction
Places a call and checks the transcation accounting information in a database backend.
02.db-transaction-failed
Places a call and checks the failed transcation accounting information in a database backend.
03.db-cdr
Places a call and checks the CDR accounting information in a database backend.
Presence
Tests presence functionalities.
01.presence
Tests a basic PUBLISH-SUBSCRIBE-NOTIFY sequence for the "presence" event, using xml bodies.
Permissions
Tests the behavior of the permissions module.
01.check-address
Tests if a call is accepted based on the source address.
02.check-address-fail
Tests if a call is rejected based on the source address.
Execution
Install the sipssert tool and run it in the main directory.
sipssert *
You can optionally run only one tests set:
sipssert registration