2026-04-10ยท9 min readยทsota.io team

Deploy TTCN-3 to Europe โ€” ETSI ๐Ÿ‡ช๐Ÿ‡บ (Sophia Antipolis 2001), the Telecommunications Testing Standard Behind 5G and LTE, on EU Infrastructure in 2026

Every time your phone connects to a 5G network, the protocol stack it speaks โ€” from the radio layer up through SIP, IMS, and the core network โ€” has been formally verified against a test suite written in TTCN-3. Testing and Test Control Notation version 3 is the language of telecommunications conformance testing. It was created by the European Telecommunications Standards Institute (ETSI) in 2001, built by Nokia ๐Ÿ‡ซ๐Ÿ‡ฎ, Ericsson ๐Ÿ‡ธ๐Ÿ‡ช, Siemens ๐Ÿ‡ฉ๐Ÿ‡ช, and T-Systems ๐Ÿ‡ฉ๐Ÿ‡ช, and used by every major telecom equipment vendor and certification laboratory on Earth.

TTCN-3 is not a general-purpose programming language. It is a domain-specific language with one purpose: specifying, running, and recording the results of formal conformance tests for distributed communication systems. It has verdicts (pass, fail, inconclusive), parallel test components that communicate over typed ports, and a module system that lets you compose test suites from reusable components. It compiles to a runtime โ€” most commonly Eclipse TITAN, Ericsson's open-source implementation โ€” that can test a live network device or a simulated protocol stack with identical TTCN-3 code.

ETSI and the European Telecommunications Heritage

ETSI โ€” the European Telecommunications Standards Institute โ€” was founded in 1988 in Sophia Antipolis ๐Ÿ‡ซ๐Ÿ‡ท, the technology park near Nice, France. It was established by the European Commission to create a unified standards body for European telecommunications, replacing the patchwork of national standards that had fragmented the European market.

ETSI's membership reads as a roll-call of European technology: Nokia ๐Ÿ‡ซ๐Ÿ‡ฎ, Ericsson ๐Ÿ‡ธ๐Ÿ‡ช, Siemens ๐Ÿ‡ฉ๐Ÿ‡ช, Alcatel-Lucent ๐Ÿ‡ซ๐Ÿ‡ท, T-Systems ๐Ÿ‡ฉ๐Ÿ‡ช, Telefรณnica ๐Ÿ‡ช๐Ÿ‡ธ, Orange ๐Ÿ‡ซ๐Ÿ‡ท, Deutsche Telekom ๐Ÿ‡ฉ๐Ÿ‡ช. The standards it produces โ€” GSM, UMTS, LTE, 5G NR โ€” are the standards on which European (and global) mobile networks run.

TTCN-3 was ETSI's answer to a specific problem: how do you prove that a device conforms to a telecommunications standard? A standard like 3GPP LTE runs to thousands of pages. You need a formal language to express the tests, a runtime to execute them, and a verdict mechanism to record results. TTCN-2 (Tree and Tabular Combined Notation, 1993) had been used for this purpose but was too limited for modern distributed protocols. TTCN-3 was designed from scratch to handle:

TTCN-3 lineage:
  TTCN-2 (ISO 9646-3, 1993) โ€” tabular test notation for OSI protocols
    โ†“
  TTCN-3 (ETSI ES 201 873, 2001) โ€” full programming language for distributed testing
    Nokia ๐Ÿ‡ซ๐Ÿ‡ฎ + Ericsson ๐Ÿ‡ธ๐Ÿ‡ช + Siemens ๐Ÿ‡ฉ๐Ÿ‡ช + T-Systems ๐Ÿ‡ฉ๐Ÿ‡ช

Used for testing:
  GSM (2G)      โ€” first TTCN-3 test suites
  UMTS (3G)     โ€” IMS, SIP, MEGACO
  LTE (4G)      โ€” eNodeB, EPC, IMS, VoLTE
  5G NR         โ€” gNB, AMF, SMF, UPF conformance
  Bluetooth     โ€” HCI, L2CAP, RFCOMM
  IPTV          โ€” ETSI TS 102 034 (Hybrid broadband)
  IPv6          โ€” ETSI IPv6 conformance suites

The TTCN-3 Language

TTCN-3 is a statically typed, concurrent language designed for black-box testing. A TTCN-3 program defines test cases, test components, and message templates. Test components communicate over typed ports and can be created dynamically during a test.

module HelloProtocol_TestSuite {

  import from HelloProtocol_Types all;

  // Port type: what messages can flow through this port
  type port HelloPort message {
    inout HelloRequest, HelloResponse, Bye;
  }

  // Test component: has a port connected to the system under test
  type component HelloTC {
    port HelloPort p;
  }

  // Message template: pattern matching for received messages
  template HelloResponse tr_HelloResp(charstring p_greeting) := {
    greeting := p_greeting,
    timestamp := ?  // wildcard: any timestamp is acceptable
  }

  // Test case: connects component to SUT, sends request, checks response
  testcase tc_HelloNormal() runs on HelloTC system HelloTC {
    var HelloResponse vl_resp;

    // Connect to system under test
    map(self:p, system:p);

    // Send request
    p.send(HelloRequest:{ name := "Europa" });

    // Wait for response with timeout
    alt {
      [] p.receive(tr_HelloResp("Hello, Europa!")) {
        // Pattern matched โ€” test passes
        setverdict(pass);
      }
      [] p.receive {
        // Wrong message received
        setverdict(fail, "Unexpected response");
      }
      [] timer T.timeout {
        setverdict(fail, "Timeout waiting for response");
      }
    }

    // Disconnect
    unmap(self:p, system:p);
  }

}

The critical features visible in this example:

// Parallel test components: testing a 3-party SIP call
module SIP_CallSetup_Tests {

  import from SIP_Types all;
  import from SIP_Templates all;

  // Three components: caller, callee, proxy
  type component SIP_CT {
    port SIP_Port sip_p;
    var charstring v_localUri;
  }

  // Test case with parallel components
  testcase tc_BasicCallSetup() runs on SIP_CT system SIP_CT {
    var SIP_CT vc_caller, vc_callee;

    // Create parallel components
    vc_caller := SIP_CT.create("Caller") alive;
    vc_callee := SIP_CT.create("Callee") alive;

    // Start components (parallel execution)
    vc_caller.start(f_CallerBehaviour("sip:alice@etsi.fr"));
    vc_callee.start(f_CalleeB behaviour("sip:bob@ericsson.se"));

    // Wait for all components to complete
    all component.done;

    // Collect verdicts from parallel components
    if (vc_caller.verdict == pass and vc_callee.verdict == pass) {
      setverdict(pass);
    } else {
      setverdict(fail);
    }
  }

}

This parallel component model is what makes TTCN-3 suitable for testing distributed protocols. An LTE conformance test might spawn dozens of test components โ€” UE, eNodeB, MME, SGW, PGW โ€” each executing independently, exchanging messages through typed ports, with the main test case collecting verdicts from all components at the end.

Eclipse TITAN โ€” Ericsson's Open-Source TTCN-3 Runtime

Eclipse TITAN is the primary open-source implementation of TTCN-3. It was developed by Ericsson ๐Ÿ‡ธ๐Ÿ‡ช in Stockholm over two decades โ€” first as an internal tool for testing Ericsson's own LTE infrastructure, then released as open source under the Eclipse Public License in 2016.

TITAN compiles TTCN-3 to C++ and provides:

# Eclipse TITAN โ€” EU deployment via sota.io
FROM ubuntu:22.04

# Install TITAN from Ubuntu package (Ericsson-maintained)
RUN apt-get update && apt-get install -y \
  eclipse-titan \
  && rm -rf /var/lib/apt/lists/*

WORKDIR /test

# Copy TTCN-3 test suite
COPY . .

# Compile TTCN-3 to C++
RUN ttcn3_compiler *.ttcn3 && make

# Run test suite (mctr_cli = main controller)
CMD ["mctr_cli", "test_config.cfg", "HelloProtocol_TestSuite"]

The test results โ€” verdicts, message traces, timing data โ€” can be stored in a PostgreSQL database for trend analysis, CI/CD integration, and compliance audit trails.

NIS2, CRA, and Compliance Testing Infrastructure

The EU NIS2 Directive (2022) requires operators of essential services โ€” telecom providers, cloud infrastructure, digital service providers โ€” to implement systematic security testing as part of their risk management. Article 21 specifically requires "security testing" and "incident reporting procedures."

The EU Cyber Resilience Act (2024) requires manufacturers of connected products to perform conformance testing before CE marking. For telecommunications equipment, this means TTCN-3 test suites: the standard certification laboratories (Deutsche Telekom Innovation Laboratories ๐Ÿ‡ฉ๐Ÿ‡ช, Tele2 Labs ๐Ÿ‡ธ๐Ÿ‡ช, Orange Labs ๐Ÿ‡ซ๐Ÿ‡ท) all use TTCN-3 as their test specification language.

TTCN-3 and EU compliance framework:

  NIS2 Article 21(2)(e): "security testing"
    โ†’ TTCN-3 provides formal, reproducible, auditable test results
    โ†’ Test verdicts are machine-readable (XML/ASN.1 log format)
    โ†’ Test suites can be version-controlled, reviewed, certified

  EU Cyber Resilience Act (2024): conformance testing
    โ†’ ETSI EN 303 645 (IoT security) โ€” TTCN-3 test suites available
    โ†’ 3GPP TS 34.229 (LTE/5G conformance) โ€” all written in TTCN-3
    โ†’ IMS Conformance Test Specification โ€” ETSI TS 186 011

  GDPR Article 32: technical security measures
    โ†’ Protocol fuzzing (TTCN-3 supports template wildcards for fuzzing)
    โ†’ Session security (SIP/TLS test suites)
    โ†’ Data minimisation testing (verify no unnecessary data in protocol headers)

Running TTCN-3 test infrastructure on EU servers means all protocol traces, test verdicts, and compliance records stay within GDPR jurisdiction โ€” not on a US cloud provider where CLOUD Act subpoenas could compel disclosure.

Deploying TTCN-3 Test Infrastructure to European Infrastructure

Eclipse TITAN runs as a server process and integrates naturally with CI/CD pipelines. A typical TTCN-3 deployment on sota.io consists of:

  1. A TITAN compiler service that compiles TTCN-3 modules to C++ on push
  2. A test executor service that runs test cases against protocol endpoints
  3. A PostgreSQL database that stores test results, verdicts, and timing data
  4. A result dashboard (optional) that queries the database for trend analysis
# Deploy TTCN-3 test infrastructure to EU infrastructure
npm install -g sota

# Deploy TITAN test executor
sota deploy --name ttcn3-executor --region eu-central-1

# Provision managed PostgreSQL for test results (GDPR-compliant, EU-resident)
sota db create --name ttcn3-results-db --region eu-central-1

# Connect test executor to results database
sota env set DATABASE_URL=$(sota db url ttcn3-results-db)

# Configure test target (SIP proxy, 5G core, IMS node)
sota env set SUT_HOST=sip.your-telecom-lab.eu
sota env set SUT_PORT=5060

# Deploy and run
sota deploy
sota logs --follow

Example PostgreSQL schema for test results:

-- EU-resident test result storage
CREATE TABLE test_runs (
  id          SERIAL PRIMARY KEY,
  suite_name  VARCHAR(255) NOT NULL,
  started_at  TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  completed_at TIMESTAMPTZ,
  region      VARCHAR(50) DEFAULT 'eu-central-1'
);

CREATE TABLE test_verdicts (
  id          SERIAL PRIMARY KEY,
  run_id      INTEGER REFERENCES test_runs(id),
  testcase    VARCHAR(255) NOT NULL,
  verdict     VARCHAR(20) CHECK (verdict IN ('pass','fail','inconclusive','error','none')),
  duration_ms INTEGER,
  log_data    JSONB
);

-- NIS2 compliance: audit trail of all test executions
CREATE TABLE compliance_audit (
  id          SERIAL PRIMARY KEY,
  run_id      INTEGER REFERENCES test_runs(id),
  standard    VARCHAR(100),  -- e.g. 'ETSI ES 201 873', 'NIS2 Article 21'
  auditor     VARCHAR(100),
  signed_at   TIMESTAMPTZ
);

TTCN-3 Today: From 2G to 5G

TTCN-3 has been the certification language for every generation of mobile network:

The language itself has been updated:

The 3GPP (3rd Generation Partnership Project), which standardises mobile protocols, operates out of Sophia Antipolis ๐Ÿ‡ซ๐Ÿ‡ท โ€” the same technology park as ETSI. The interaction between ETSI (which owns TTCN-3) and 3GPP (which writes the test suites in TTCN-3) has made the combination of Sophia Antipolis ๐Ÿ‡ซ๐Ÿ‡ท, Stockholm ๐Ÿ‡ธ๐Ÿ‡ช, Espoo ๐Ÿ‡ซ๐Ÿ‡ฎ, and Munich ๐Ÿ‡ฉ๐Ÿ‡ช the de facto centre of global telecommunications testing.

TTCN-3 standardisation chain (all European):

  ETSI ๐Ÿ‡ช๐Ÿ‡บ (Sophia Antipolis ๐Ÿ‡ซ๐Ÿ‡ท) โ€” TTCN-3 language standard
    โ†“ provides testing language to
  3GPP ๐Ÿ‡ช๐Ÿ‡บ (Sophia Antipolis ๐Ÿ‡ซ๐Ÿ‡ท) โ€” 5G/LTE protocol standards
    โ†“ written as TTCN-3 test suites by
  Nokia ๐Ÿ‡ซ๐Ÿ‡ฎ + Ericsson ๐Ÿ‡ธ๐Ÿ‡ช + Siemens ๐Ÿ‡ฉ๐Ÿ‡ช + Deutsche Telekom ๐Ÿ‡ฉ๐Ÿ‡ช
    โ†“ executed by
  Eclipse TITAN ๐Ÿ‡ธ๐Ÿ‡ช (Ericsson open source, 2016)
    โ†“ deployed to
  EU infrastructure (sota.io โ€” GDPR-compliant, EU data residency)

Deploy TTCN-3 on sota.io โ€” EU Infrastructure, Zero DevOps

sota.io is the EU-native PaaS for test infrastructure like Eclipse TITAN:

# Complete TTCN-3 test infrastructure on sota.io
sota deploy --name ttcn3-titan --region eu-central-1
sota db create --name ttcn3-db --region eu-central-1
sota env set DATABASE_URL=$(sota db url ttcn3-db)
sota env set TITAN_CONFIG=/app/test_config.cfg
sota logs --follow

ETSI's testing language โ€” built by Nokia ๐Ÿ‡ซ๐Ÿ‡ฎ, Ericsson ๐Ÿ‡ธ๐Ÿ‡ช, Siemens ๐Ÿ‡ฉ๐Ÿ‡ช, and T-Systems ๐Ÿ‡ฉ๐Ÿ‡ช to certify the protocols that connect Europe โ€” runs best on European infrastructure. Protocol traces, test verdicts, and NIS2 compliance audit trails belong in EU data centres, under GDPR, not on US cloud platforms.

Deploy TTCN-3 test infrastructure on EU infrastructure. GDPR-compliant, managed PostgreSQL, zero DevOps.


TTCN-3 (Testing and Test Control Notation version 3) is standardised by ETSI as ES 201 873 (first published 2001). Eclipse TITAN, Ericsson's open-source TTCN-3 implementation, is available at github.com/eclipse/titan.core. ETSI is headquartered in Sophia Antipolis ๐Ÿ‡ซ๐Ÿ‡ท.