Get started
On this page
Telecom dependencies
Testlie runs the systems behind a mobile service as hosted simulators, so you can test an app, device, network function or MVNO stack without owning a BSS or core network. Each simulator below implements a documented subset of its interface.
| What it stands in for | Testlie interface | Specification / compatibility |
|---|---|---|
| Subscriber provisioning, plan assignment, suspension and usage/CDR polling | Subscriber & Plan Management · REST | Explicit northbound REST compatibility subset; not Nudr/Nudm |
| CPE parameters, tasks and faults through an ACS | CPE Management · TR-181 / ACS REST | ACS northbound REST compatibility with TR-181 device fixtures; not a CWMP/USP listener |
| Network-function registration, heartbeat and verification keys | NF Repository · TS 29.510 | Bounded Release 18 Nnrf simulation with test bearer authentication |
| Outbound SM policy / charging callbacks | Request bins | Capture native callback headers/bodies and configure 204, 404, 429 or 503 responses |
| SMS delivery | SMS | Existing SMPP 3.4 SMSC and Twilio-compatible capture |
No real network, SIM, CPE or monetary balance changes. All Telecom systems require acknowledgement of test-data use. Each simulator has isolated persistent state and rotated test credentials. Use the system's base URL as the root, with its generated Authorization: Bearer <accessToken> unless another authentication method is specified below.
Subscriber & Plan Management — REST compatibility
Point your test adapter's management API root at the configured base URL. This is a northbound management contract, not a standardized 3GPP subscriber-data API. Paths containing /udr do not make it TS 29.504/29.505.
GET/POST /plans;GET/PUT/DELETE /plans/{plan_id}. Plans support AMBR and unlimited or capped volume quotas with throttle/disconnect actions. In-use plans cannot be deleted.GET/POST /udr/subscribers;GET/PUT/DELETE /udr/subscribers/{supi};PATCH /udr/subscribers/{supi}/service-state.- Updates/deletes require numeric
If-Match: <revision>; missing/stale revisions return 428/412. A successful mutation increments the revision. A duplicate SUPI or MSISDN is refused atomically. GET /udr/served-snssais;POST /subscribers/bulkwith{ "supis": [...] };GET /subscribers/ids?limit=100&offset=0.GET /subscribers/{supi}/billingand/usage;PUTbilling/plan,/statusand/period;POSTbilling/reset. Status body:{ "operator_override": "none" }or"suspended".GET /cdrs?after_seq=0&limit=100returnsrecords,more,oldest_retained_seq;POST /cdrs/ackaccepts{ "up_to_seq": 1 }. Acknowledgements are cumulative, replay-safe and cannot advance past a delivered cursor.
Preload synthetic subscribers with POST /__testlie/subscribers, body { "supi": "imsi-001010000000001", "profile": ... }. The profile has ambr: {uplink, downlink}, default_snssai: {sst, sd: [1,2,3]} and slices, each with snssai and dnn_subscriptions. A DNN subscription has dnn, session_ambr, five_qi, default_pdu_session_type, allowed_pdu_session_types and optional static_ipv4. Optional msisdn, imei and allowed_tacs belong to the profile.
The normal provisioning POST additionally accepts only all-zero synthetic 32-hex K and OPc and a four-hex amf. Authentication keys are never retained in subscriber state; call captures redact them. Use a fixture for existing-SIM tests. Never send production SIM secrets.
Seed volume with POST /__testlie/usage, body { "supi": "imsi-001010000000001", "eventId": "usage-1", "total_bytes": 2048 }. Replaying the same event does not double-count usage; changing it returns 409. Seed a charging-record stream with POST /__testlie/cdrs, body { "records": [{ "seq": 1, "...": "your synthetic mediation record" }] }. Record payloads are deliberately opaque so consumers can test malformed-record quarantine, gaps and duplicates; this does not certify ASN.1 CDR encoding or generate rated records.
This subset is bounded to 100 subscriber identities, 100 plans and 500 usage/CDR identities, with a 4 MB aggregate limit. Reset clears period usage but preserves lifetime usage. No live subscriber, packet traffic, billing scheduler or tariff engine is involved. Use fixture controls for state and the API failure/latency controls for outages; payment-style outcomes do not apply.
CPE Management — TR-181 / ACS REST
Configure your ACS test client with the base URL and generated username/password (HTTP Basic), or use the simulator bearer token. The BSS talks to the ACS northbound API. TR-181 describes the parameter model; TR-069 CWMP and TR-369 USP are separate southbound protocols and are not implemented here.
Preload a device:
{
"id": "000000-TestCPE-SERIAL1",
"serialNumber": "SERIAL1",
"parameters": { "Device.WiFi.SSID.1.SSID": "Test network" }
}POST this body to /__testlie/devices. Supported client routes:
GET /devices?query=<encoded JSON>&projection=_id,_deviceId,Device.WiFireturns nested TR-181 leaves with_value,_typeand_timestamp. Queries support equality and bounded$in, not arbitrary MongoDB operators.POST /devices/{encodedId}/tasks?connection_request:getParameterValues,refreshObject,setParameterValues,reboot,download. Immediate successful tasks return 200; pending tasks return 202 with_id. No reboot or firmware fetch leaves the simulator.GET /tasks?query=...,GET /faults?query=...,POST /devices/{encodedId}/tags/{encodedTag},DELETE /tasks/{id}.POST /__testlie/tasks/{id}/completecompletes a queued task.setParameterValuesupdates fixture values; other tasks simulate completion using the existing fixture.
Outcomes select normal execution, queued tasks or fault 9002. Wi-Fi passphrases are masked in request captures. At most 100 devices and 300 task identities fit in one simulator, subject to the 4 MB aggregate limit.
NF Repository — TS 29.510
PUT/GET/PATCH/DELETE /nnrf-nfm/v1/nf-instances/{uuid}: registration, reading, heartbeat/status patches and deregistration. PATCH usesapplication/json-patch+json; supported paths are/nfStatusand/heartBeatTimerwithreplace/test.GET /nnrf-disc/v1/nf-instances?target-nf-type=CHF&requester-nf-type=SMF&service-names=nchf-convergedcharging: registered, unexpired profiles filtered by type, service and allowed requester types. At most 100 profiles.POST /oauth2/token: form-encodedclient_credentials,nfInstanceId,nfType,targetNfType,scopeand optionaltargetNfInstanceId. Authenticate with generatedclientId/clientSecretusing HTTP Basic. This is a test-client authentication arrangement, not 3GPP NF mutual TLS.- Public
GET /.well-known/jwks.jsonsupplies the ES256 verification key. Private signing keys stay sealed/server-side. Token claims include issuer NF ID, client NF ID, target audience, scope and expiry. Outcomes select normal one-hour tokens, denial or one-second expiry.
Management operations require the simulator bearer token. A client that normally authenticates to an NRF only through mTLS needs an isolated test transport adapter/proxy to add that token. For such a client, changing the base URL alone is not enough. Do not weaken production transport/authentication settings. This does not implement NF certificate identity, authorization policy, SCP routing or full SBI HTTP/2 conformance. These issued tokens are not automatically trusted by other Testlie mocks.
Outbound callbacks from the OCS / PCF
Use a fresh request bin with a 204 response for the external SMF/NF callback URL, and configure that host in your isolated core's callback allowlist. Match native 3gpp-Sbi-Callback headers:
Npcf_SMPolicyControl_SmPolicyUpdateNotificationfor policy update.Npcf_SMPolicyControl_SmPolicyControlTerminationRequestNotificationfor termination.Nchf_ConvergedCharging_Notify; apiversion=3for charging notification.
Under TS 29.500 Release 18 clause 6.7.3, these notification callbacks do not carry OAuth access tokens. A request bin's secret capture URL controls submissions; it does not provide NF certificate validation or full callback-schema validation. Configure 404/503/delay to test refusal and retry behavior, and assert captured bodies and headers with your own test harness.
Existing server-side core mocks
SM Policy Control (N7) and Converged Charging (N40) remain available for applications that call a PCF/CHF.
SM Policy Control — TS 29.512
POST /npcf-smpolicycontrol/v1/sm-policies: create; returns 201, a Location header, and a policy decision.GET /npcf-smpolicycontrol/v1/sm-policies/{id}: read context and policy.POST /npcf-smpolicycontrol/v1/sm-policies/{id}/update: update RAT/access context and recompute the test decision.POST /npcf-smpolicycontrol/v1/sm-policies/{id}/delete: close; returns 204. Later reads return 404.
Example create body:
{
"supi": "imsi-001010000000001",
"pduSessionId": 1,
"pduSessionType": "IPV4",
"dnn": "internet",
"notificationUri": "https://smf.example.test/callback",
"sliceInfo": { "sst": 1 }
}Normal decisions grant a sample 100 Mbps AMBR and 5QI 9. The Restrict policy / exhaust charging quota outcome grants 1 Mbps; Deny policy / charging service returns a native 403 ProblemDetails response. Updates are atomic. Unknown attributes are ignored; only the documented context subset is retained. A fresh POST creates a new association; create idempotency is not offered.
Converged Charging — TS 32.291
POST /nchf-convergedcharging/v3/chargingdata: create; returns 201 and Location.POST /nchf-convergedcharging/v3/chargingdata/{ref}/update: report usage/request more units.POST /nchf-convergedcharging/v3/chargingdata/{ref}/release: report final usage and close; returns 204.
Example create body:
{
"subscriberIdentifier": "imsi-001010000000001",
"nfConsumerIdentification": { "nodeFunctionality": "SMF" },
"invocationTimeStamp": "2026-10-19T12:00:00Z",
"invocationSequenceNumber": 0,
"multipleUnitUsage": [{ "ratingGroup": 10, "requestedUnit": { "totalVolume": 1048576 } }]
}Use a fresh timestamp/charging identity for an independent session. Identical parsed create requests reuse their resource; retransmissionIndicator does not change identity. Updates/releases must increment the sequence number by one. An identical repeat of the most recent operation returns its stored response without counting reported usage again. A changed replay or gap is rejected. This is a latest-response cache, not an unlimited replay journal.
The normal outcome grants requested volume up to 1 MiB per volume field and time up to 60 seconds, per rating group, with 60-second validity. A usage-only report does not request or receive a grant. Usage accumulates for inspection; monetary rating and wallet/reservation accounting are absent. Denial returns END_USER_SERVICE_DENIED; exhaustion returns QUOTA_LIMIT_REACHED with a terminating final-unit indication. Release remains available under either scenario.
This subset accepts IMSI-form SUPIs, volume/time units, at most 16 distinct rating groups per invocation, and 32 used-unit containers per group. Volumes can be integers or digit strings up to 10^12. Service-specific/event units are rejected. There is no one-time-event charging. Objects are isolated per simulator and capped at 500 sessions, including closed sessions. Create a fresh simulator for a new test run once that limit is reached.
Capture and limits
Inspect requests, responses, objects and latency on the configured system page. Existing monthly API mock quotas, credential rotation, latency and API failure controls apply. Authentication runs before failure scenarios. An authenticated policy denial is captured and metered as a request; an invalid token is diagnostic only.
Requests are limited to 64 KB. Validation and failures use application/problem+json with 3GPP-style causes. This does not implement all standard conditional rules, fields, feature negotiation, PDU session types or releases. notificationUri and notifyUri are captured as data only: no callbacks are dispatched. Generic webhook settings do not enable native 3GPP notifications for these two simulators.
For these two server-side core mocks, NRF OAuth integration, mTLS identity, SCP routing, callback delivery, full HTTP/2 SBI transport conformance, Diameter Gx/Gy/Sy, ASN.1 CDR encoding, SIM provisioning, eSIM and number portability remain outside their subset. HTTPS clients can use the hosted endpoint; an HTTP simulation test is not a network-function conformance test.
To test an existing PCF/CHF server itself, use a standards client/harness against that server. These Testlie endpoints emulate the server side; they do not replace a BSS's separate vendor provisioning or charging-engine management adapter. SMS/SMPP testing remains under SMS guide.
References: TS 29.512 Release 18, TS 32.291 Release 18.
Additional references: TS 29.510 Release 18, TS 29.500 Release 18, ACS NBI reference, Broadband Forum device data model.