Version | Status |
---|---|
OpenSIPS 3.6/Devel | |
OpenSIPS 3.5 | |
OpenSIPS 3.4 |
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
There are multiple tests sets available, depending on what is their main testing focus:
Tests whether OpenSIPS starts up successfully with various configurations and settings.
Tests OpenSIPS startup with the default sample script.
Tests OpenSIPS startup with the menuconfig generated Residential Script.
Tests OpenSIPS startup with the menuconfig generated Trunking Script.
Tests OpenSIPS startup with the menuconfig generated Load-Balancer Script.
Performs registration tests:
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
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
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
Same as 03.expire, but enforces a minimum expire time.
Same as 03.expire, but enforces a maximum expire time.
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
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
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
Does a registration and then relays a call to the registerd contact.
Performs authentication tests:
Checks registration of an endpoint with passwords stored in DB
- The tests expects a challenge followed by a 200 OK at SIP level
Same as 01.password-db-www, but checks also checks the domain is correct.
Same as 01.password-db-www, but checks if a call gets authenticated.
Same as 03.password-db-proxy, but checks if the domain is correct.
Same as 01.password-db-www, but checks the ha1 password.
Same as 02.password-db-www-domain, but checks the ha1 password.
Same as 03.password-db-proxy, but checks the ha1 password.
Same as 04.password-db-proxy-domain, but checks the ha1 password.
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.
Places a call and validates it establishes correctly.
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.
Similar to 01.record-route, but establishes a call between two different interfaces in two different networks.
Checks call using dialog support.
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_list
are 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
Similar to 01.dialog, but checks that OPTIONS pinging is working.
Similar to 02.pinging, but checks that re-INVITE pinging is working.
Similar to 01.dialog, but expires the dialog before a BYE is received.
Runs a call through dialog where the re-INVITE is challenged by the UAC.
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.
Runs a set of calls using the topology hiding scenario, verifying that the UAS are seeing only the next hop (OpenSIPS) in their signaling.
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
Similar to 01.th-no-dialog, but passes the username in the Contact header.
Similar to 01.th-no-dialog, but uses the dialog module to store topology hiding information.
Similar to 03.th-dialog, but propagates the username in the Contact header.
Similar to 03.th-dialog, but pushes the dialog id in the Contact username, rather than in the URI param.
Similar to 03.th-dialog, but changes the Call-ID of the UAS leg.
Simiar to 01.th-no-dialog and 01.th-dialog but performs the tests going through the B2B engine.
Runs a set of tests against common B2B scenarios, verifying that the SIP flows complete correctly.
Performs the Prepaid scenario, and checks that calls are properly executed.
Performs the Marketing B2B scenario, and checks that the two entities are executed according to the desired flow and scenario.
Runs the REFER/unattended transfer scenario, triggering the transfer from the UAC side.
Same as 03.refer-unattended-uac, but transfers from the UAS side.
Same as 03.refer-unattended-uac, but the transfer fails, checking that all the entities are properly removed.
Same as 05.refer-unattended-uac-fail, but the transfer is attempted from the UAS side.
Same as 04.refer-unattended-uac, but enables RFC3515 NOTIFYs.
Same as 04.refer-unattended-uas, but enables RFC3515 NOTIFYs.
Attempts a call transfer, but fails, checking that the call remains alive.
Same as 09.refer-unattended-uac-notify-fail, but tries to transfer from UAS, which fails, then checks that the call remains alive.
Same as 03.refer-unattended-uac, but provides a provisional media to the remaining participant.
Same as 04.refer-unattended-uas, but provides a provisional media to the remaining participant.
Same as 03.refer-unattended-uac, but provides a provisional media to the remaining participant, and the transfer fails.
Same as 04.refer-unattended-uas, but provides a provisional media to the remaining participant, and the transfer fails.
Same as 09.refer-unattended-uac-notify-fail, but provides a provisional media to the remaining participant.
Same as 10.refer-unattended-uas-notify-fail, but provides a provisional media to the remaining participant.
Same as 03.refer-unattended-uac, but the transfer is being triggered through MI.
Same as 04.refer-unattended-uas, but the transfer is being triggered through MI.
Same as 17.refer-unattended-uac-mi, but provides a provisional media to the remaining participant.
Same as 18.refer-unattended-uas-mi, but provides a provisional media to the remaining participant.
Same as 03.refer-unattended-uac, but puts the remaining participant on hold first.
Same as 03.refer-unattended-uac, but does not use late SDP with the new participant.
Same as 22.refer-unattended-uac-no-late, but provides a provisional media to the remaining participant.
Same as 03.refer-unattended-uac, but the transfer fails and the remaining participant is bridged with a new destination.
Runs the internal topology hiding scenario.
Runs a simple parking scenario where a call is sent to a media server then picked up by the called entity later.
Run the same as 26.parking scenario, but delays the bye towards the initial entity until the pickup is established.
Run the same as 26.parking-late-bye scenario, but delays the BYE being sent with a configured value.
Run the same as 25.top-hiding scenario, but send re-INVITEs which are rejected.
Run the same as 25.top-hiding scenario, but send re-INVITEs in such a manner that they overlap.
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.
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.
Run a transfer similar to 09.refer-unattended-uac-notify-fail, but the call times out and the referee's call gets canceled.
Run a transfer similar to 10.refer-unattended-uas-notify-fail, but the call times out and the referee's call gets canceled.
Run a transfer similar to 09.refer-unattended-uac-notify-fail, but the remaining participant terminates the call during transfer.
Run a transfer similar to 10.refer-unattended-uas-notify-fail, but the remaining participant terminates the call during transfer.
Verifies the behavior of uac_auth module.
Registers using the uac_auth module with credentials provided in plain text.
Same as 01.register-uac-auth-credentials-plain, but uses the credentials stored in the ha1 format.
Same as 01.register-uac-auth-credentials-plain, but takes the credentials in plain text through script AVPs.
Same as 01.register-uac-auth-credentials-plain, but takes the credentials in ha1 format through script AVPs.
Same as
01.register-uac-auth-credentials-plain,
but uses authentication integrity (auth-int
) for quality of protection
(qop
).
Same as
02.register-uac-auth-credentials-ha1,
but uses authentication integrity (auth-int
) for quality of protection
(qop
).
Same as
03.register-uac-auth-avp-plain,
but uses authentication integrity (auth-int
) for quality of protection
(qop
).
Same as
04.register-uac-auth-avp-ha1,
but uses authentication integrity (auth-int
) for quality of protection
(qop
).
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
).
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
).
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
).
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
).
Places a call where the UAS authenticates for the initial INVITE.
Places a call where the UAS authenticates for the in-dialog BYE.
Places a call where the UAC authenticates for the in-dialog BYE.
Same as 13.rr-auth-invite-uas, but authentication changes are stored in dialog.
Places a call where the UAS authenticates for the in-dialog reINVITE.
Places a call where the UAS authenticates for the in-dialog BYE.
Places a call where the UAS authenticates the initial INVITE and the BYE messages.
Places a call where the UAS authenticates the initial INVITE, reINVITE and the BYE messages.
Places a call where the UAC authenticates for the in-dialog BYE.
Places a call where the UAC authenticates for the in-dialog reINVITE.
Places a call where the UAC authenticates for both in-dialog reINVITE and BYE.
Places a call where both UAC and UAS authenticates for the in-dialog reINVITE.
Same as 24.dialog-auth-reinvite-uac-reinvite-uas, but reINVITEs are sent in reversed order.
Places a call where both UAC and UAS authenticates for the in-dialog reINVITE and the BYE is authenticated by the UAS.
Same as 26.dialog-auth-reinvite-uac-reinvite-uas-bye-uas, but BYE is authenticated by the UAC.
A basic stir and shaken authentication
It use a compatible Self-Signed STIR/SHAKEN Certificate (info here)
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)
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)
Places a call with correct Identity header
Places a call with correct Identity header but with From
Anonymous
Places a call with wrong orig in conf (more explanations in scenario's README)
Places a call with wrong orig in conf, but not kill call (more explanations in scenario's README)
Places a call with wrong Date header (more explanations in scenario's README)
Places a call with wrong iat token (more explanations in scenario's README)
Places a call without Identity header (more explanations in scenario's README)
Places a call without Identity's info param (more explanations in scenario's README)
Places a call without 4 params in Identity header (more explanations in scenario's README)
Places a call with x5u and info are different (more explanations in scenario's README)
Places a call without alg identity param (more explanations in scenario's README)
Places a call with wrong alg identity param (more explanations in scenario's README)
Places a call without alg token param (more explanations in scenario's README)
Places a call without typ token param (more explanations in scenario's README)
Places a call with expired certificate (more explanations in scenario's README)
Places a call with certificate starts in 2025 (more explanations in scenario's README)
Places a call with 5 params in Identity header (more explanations in scenario's README)
Places a call without ppt identity param (more explanations in scenario's README)
Places a call with wrong ppt identity param (more explanations in scenario's README)
Places a call without ppt token param (more explanations in scenario's README)
Places a call with wrong attest (more explanations in scenario's README)
Places a call with orig and from are different (more explanations in scenario's README)
Places a call with dest and To are different (more explanations in scenario's README)
Places a call with correct Identity and push stats in ACC (more explanations in scenario's README)
Places a call with wrong iat token and push stats in ACC (more explanations in scenario's README)
Places a call with wrong iat token, but not kill call and push stats in ACC (more explanations in scenario's README)
Tests accounting functionalities.
Places a call and checks the transcation accounting information in a database backend.
Places a call and checks the failed transcation accounting information in a database backend.
Places a call and checks the CDR accounting information in a database backend.
Tests presence functionalities.
Tests a basic PUBLISH-SUBSCRIBE-NOTIFY sequence for the "presence" event, using xml bodies.
Tests the behavior of the permissions module.
Tests if a call is accepted based on the source address.
Tests if a call is rejected based on the source address.
Install the sipssert
tool and run it in the main directory.
sipssert *
You can optionally run only one tests set:
sipssert registration