NAV
AMQP Example Json Example Python

Introduction

In this doc we present the important information regarding the architecture, the different components and the description of the messages exchanged between components.

Must-Reads

Developers should read public deliverable D1.3 - Initial architecture design before getting started here!

“At the early stage [of an API defintion], agility trumps completeness”.

Joshua J. Bloch (Sun Microsystems and Google)

Architecture

F-Interop’s architecture follows the event bus design pattern: generic messages are routed between the different software components, some of these running at different locations. The F-Interop architecture is composed of different components exchanging messages through an “Event Bus”. All communication is done through this mechanism, including control messages, raw data packets, logs, etc. We use the RabbitMQ as the underlying message-passing mechanism. It acts as a secure message broker between all the components through encrypted channels.

Screenshot

Event Bus

Components of the system communicates with each other using messages. We need message delivery to be:

This architecture enables many independant components to talk to each other and avoid a monolith that would be difficult to manage as the number of components increase.

We use the RabbitMQ as the underlying message-passing mechanism.

It acts as a secure message broker between all the components through encrypted channels. Each message contains a routing key which indicates how to route this message to the relevant input queues of the components. It also shipped with a web interface for monitoring the load and enable easy debugging. Isolation of test session is performed using virtual hosts.

Message types

Messages are of two types: control plane and data plane. Control plane messages relate to the management of an ongoing test session: e.g. start sniffer, signal the start/end of a test case, etc. Data plane messages contains the raw data exchanged between the implementations under test (IUT).

JSON is the data format used for the application messages exchanged in the bus.

AMQP

For producing/consuming events we use the publish/subscribe pattern which implementation is based on topic exchanges of AMQP (more about topic exchanges)

Topic exchanges route messages to one or many queues based on matching between a message routing key and the pattern that was used to bind a queue to an exchange.

Topics/routing keys format

How the topics/routing keys are composed is standardized by F-Interop, by using certain conventions.

As you may know, messages are sent using topic exchanges, and when using this feature in amqp routing keys / topics are formed as a list of words delimited by dots:

quick.orange.rabbit

more about topics

Before starting describing how the routing keys are composed in F-Interop we need to introduce two concepts.

  1. Data/Control plane: In the scope of a testing session we have two communication planes, the data plane, and the control plane. The first is used for sending, and forwarding data packets between IUTs (the implementations under test) and the F-Interop backend, the second handles the rest of the events to manage and coordinate the session (from the initialization, until the termination).

    By convention, the first keyword of every topic will be the communication plane: control.*.* and data.*.*

  2. Namespaces: For categorizing certain type of messages which share similar functionalities we defined some namespaces. These describe a category of events and services which are similar in some way.

A non exhaustive list of namespaces used in the F-Interop for Interop tests:

Control Plane

Control plane messages relate to the management of an ongoing test session. Messages in the control plane are either events or services.

  1. For events, the topics will be build just as:

    control.namespace

    Typical events found in this topic are:

- start/stop sniffer - testcase start - testcase next

For distinguishing between them a field _type in included in messages payload.

A comprehensive list of messages can be found in the list at the end of this file:

messages library

  1. For services (request/reply interaction) we will use for requests:

    control.namespace.service

    and for replies:

    control.namespace.service.reply

    F-Interop also defines a way of correlating a reply to a request using correlation_id field. We will talk about that later on..

    Some examples control messages used in the context of interop and conformance testing:

- control.sniffing.service - control.dissection.service - control.analysis.service

Data plane

Data plane messages contains the raw data exchanged between the IUTs. In here, topics are not built around the concept of the namespaces.

The topics defined by F-Interop allows us to communicate from IUT to F-Interop backed and vice-versa.

For Interop, for the routing of the messages from one IUT to another IUT the testing tool will have to implement the forwarding of the packets.

AMQP message attributes

Field Type Description
routing_key string tbd
source_id string a unique ID for the component that published this message such as: amqp://component_id@f-interop.eu
msg_id number a globally unique ID for this message
correlation_id string we include this field whenever the message is a request for an other component’s service or reply a reply to one (either method call or action call), this field MUST be included only if the message is a request or reply.
timestamp number the Posix/Unix time in second when this message was generated by its publisher. Extra care should be given to the timestamp format and its precision.
version number version of message specification (TBD if used or not)
body JSON payload of the message in JSON format
AMQP message structure:
{
TBD
}

Messaging patterns

As previously mentioned, F-Interop uses an event bus messaging pattern, which is implemented using

Screenshot

Screenshot

Screenshot

Agent

Introduction

The “agent” is a program a user downloads from the F-Interop website, and which allows him/her to connect the IUT to the F-Interop server. Communication between the agent and the server is authenticated and secure. Through the agent, the F-Interop server can (remotely) interact with the IUT, for example by changing its configuration or injecting packets in the link/interface the IUT is listening to. Similarly, the agent reports to F-Interop the data packets sent from the IUT.

Source code

N.B. this is work in progress

agent’s gitlab repo

Routing key / topics basics

There can be several agents during a session. Therefore, there is a need to address each agent individually. A user can provide such address by specifying a name when launching the agent. If this name is already in use the connection fail with a message inviting the user to choose a different name.

An agent listens to several routing keys/topics. A typical agent’s routing key / topic used for forwarding the IP packets through the a previously created IP tunnels looks like this:

data.tun.toAgent.coap_client_agent

or

data.tun.fromAgent.coap_client_agent

NOTE: The routing of the IP packets between agents in not handled by the agents themselves - they just publish/listen to evnts under these topics.

This way, components of the testing tools can publish messages to this topic, then the agent will receive the message and e.g. inject it in the tun interface.

Besides the packet injection, there are other types of actions we can trigger by publishing to these routing keys / topics.

Embedded services and interfaces

Agent’s embeded services have two purposes, first, triggering actions in the IUTs, particularly interesting when automating an IUT, and secondly opening virtual interfaces on the machine which runs them which work as a VPN with F-Interop backend, and other IUTs which are part of the session.

F-Interop can send actions to the agent, with the purpose of triggering a particular action. These are refered as “agent hooks”. The following protocols are used for the agent hooks:

For IUTs which “talk” IP , agents can also open a virtual network interface on a PC, and can used to communicate between users and the F-Interop platform over IP.

The contributor implementing an automated-IUT or bot-like IUT MAY use these agent hooks for automating the whole execution of a test. Note that this is the advance way of using F-Interop and is not mandatory to do so for using F-Interop.

Tun interface

Routing key: control.tun.toAgent.agent_name

Contents Type Description
_type String Services can be one of the following {“tun.start”, “tun.stop”,“tun.restart”} TBD
ipv4_host String e.g. xxx.xxx.xxx.xxx
ipv4_network String
ipv4_netmask String
ipv6_host String
ipv6_prefix String

Event for starting tun interface

 - - -
ROUTING_KEY: control.tun.toAgent.agent_coap_client
 - - -
PROPS: {"content_type": "application/json"}
 - - -
BODY {
    "_type": "tun.start",
    "ipv6_host": ":3",
    "ipv6_prefix": "bbbb",
    "name": "agent_coap_client"
    }
 - - -

Routing key: data.tun.fromAgent.agent_name

For the time being channel_id is used

Contents Type Description
data String packet bytes captured in tun

Data packet from agent tun to backend

 - - -
ROUTING_KEY: data.tun.fromAgent.coap_client_agent
 - - -
PROPS: { "content_type": "application/json" }
 - - -
BODY {
    "_type": "packet.sniffed.raw",
    "timestamp": "1492014786.91",
    "msg_id": "b53d840f-1f9d-11e7-a462-acbc32cdf38b",
    "routing_key": "data.tun.fromAgent.coap_client_agent",
    "interface_name": "tun0",
    "data": [96, 9, 36, 188, 0, 19, 17, 64, 187, 187, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 1, 187, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 3, 218, 110, 22, 51, 0, 19, 57, 80, 64, 1, 141, 176,
    180, 116, 101, 115, 116, 193, 2]}
 - - -

ZMQ interface

Routing key: control.agent.zmq.agent_id

An agent can open ZMQ socket and send messages over it.

Contents Type Description
zmq_socket_type String [REQ, PUB]
connect path Where to connect to
data String data to send through the ZMQ socket
{
    "_type" : "agent_hook.zmq", 
    "zmq_socket_type": "REQ",
    "connect": "localhost:50000",
    "data": {"sub": ["cmdToMote"]}
}

HTTP interface

Routing key: control.agent.http.agent_id

An agent can send an HTTP request and send back the answer.

Contents Type Description
verb String [GET, POST, PUT, DELETE]
URL String URL that the agent will target. It has to be accessible from the host where the agent is running.
data JSON JSON to send
{
    "_type" : "agent_hook.http",
    "url": "http://example.com",
    "verb": "GET",
    "data": {"data": "data"}
}

Ping interface

Routing key: control.agent.ping.agent_id

An agent can send an ICMP echo request (ping) to a given host. On the background, the agent is performing it through the shell command.

** Request format **

Contents Type Description
version String IPv4 is the default. IPv6 is also available
host String my.example.com
payload String payload to send on the ping request
count int Number of packet to send. Default 1
interface String Network interface to use
{
    "_type": "agent_hook.ping",
    "version": "IPv6",
    "host": "bbbb::1",
    "payload": "cafe",
    "count": 1,
    "interface": "tun0"
}

Session Orchestrator

The orchestrator main roles are:

Interaction between different components during deployment/setup phase

Example for interoperability testing, when deploying testing tools for other type of tests then event in step 4 changes correspondingly (session.interoperability.configuration) of message:

  1. GUI -> SO : http PUT sessions/session_id {configuration= [..]}

    ( SO creates vhost ) ( SO adds users to vhost ) ( SO creates session)

  2. GUI -> SO : http PATCH sessions/session_id {status:started}

    ( SO spawns TT ) ( SO spawns other requested resources )

  3. TT -> AMQP BUS -> SO: event testingtool.ready

    (TT must make sure before publish event that all processes in TT are ready)

  4. SO -> AMQP BUS -> TT: event session.interoperability.configuration {configuration= [..]}

    ( TT sets up test suite using {configuration= [..]})

  5. TT -> AMQP BUS -> SO: event testingtool.configured

SO: Session Orchestrator TT: Testing Tool (any type)

After this point the session is ready to start the test suite.

Create a new session

PUT http://orchestrator.f-interop.eu/sessions/<session_id>

{
    "users": [
        "u1",
        "f-interop"
    ],
    "iuts": [
      {
        "id": "someImplementationFromAUser",
        "role": "coap_server",
        "execution_mode": "user-assisted",
        "location":"user-facilities",
        "owner": "someUserName",
        "version": "0.1"
      },
      {
        "id": "automated_iut-coap_client-coapthon-v0.1",
        "role": "coap_client",
        "execution_mode": "automated-iut",
        "location": "central-server-docker",
        "owner": "f-interop",
        "version": "0.1"
      }
    ],
    "testing_tools": "f-interop/interoperability-coap",
    "tests": [
        {
            "testcase_ref":"http://doc.f-interop.eu/tests/TD_COAP_CORE_01_v01",
            "settings" : {}
        },
        {
            "testcase_ref":"http://doc.f-interop.eu/tests/TD_COAP_CORE_02_v01",
            "settings" : {}
        }
    ]
}

import requests

url = "http://orchestrator.f-interop.eu/sessions/<session_id>"

data = {
    "users": [
        "a",
        "b",
        "c"
    ],
    "iuts": [
        {
            "id": "someImplementationFromAUser",
            "role": "coap_server",
            "execution_mode": "user-assisted",
            "location":"user-facilities",
            "owner": "someUserName",
            "version": "0.1"
        },
        {
            "id": "automated_iut-coap_client-coapthon-v0.1",
            "role": "coap_client",
            "execution_mode": "automated-iut",
            "location": "central-server-docker",
            "owner": "f-interop",
            "version": "0.1"
        }
    ],
    "testing_tools": "http://orchestrator.f-interop.eu/testingtools/f-interop/interoperability-coap",
    "tests": [
        {
            "testcase_id": "http://orchestrator.f-interop.eu/tests/TD_COAP_CORE_01",
            "settings": {}
        }
    ]
}

register_response = requests.put(url,
                                 json=data,
                                 auth=("username", "password"))

Get a session

GET http://orchestrator.f-interop.eu/sessions/<session_id>

import requests

url = "http://orchestrator.f-interop.eu/sessions/<session_id>"

register_response = requests.get(url,
                                 auth=("username", "password"))

Start a session

PATCH http://orchestrator.f-interop.eu/sessions/<session_id>

{
  "status": "started"
}
import requests

url = "http://orchestrator.f-interop.eu/sessions/<session_id>"

register_response = requests.patch(url,
                                   json={"status": "started"},
                                   auth=("username", "password"))

Stop a session

PATCH http://orchestrator.f-interop.eu/sessions/<session_id>

{
  "status": "stopped"
}
import requests

url = "http://orchestrator.f-interop.eu/sessions/<session_id>"

register_response = requests.patch(url,
                                   json={"status": "stopped"},
                                   auth=("username", "password"))

Delete a session

DELETE http://orchestrator.f-interop.eu/sessions/<session_id>

import requests

url = "http://orchestrator.f-interop.eu/sessions/<session_id>"

register_response = requests.delete(url,
                                    auth=("username", "password"))

Create a new user

PUT http://orchestrator.f-interop.eu/users/<user_id>

import requests

url = "http://orchestrator.f-interop.eu/users/<user_id>"
register_response = requests.put(url,
                                 json={"password": "foo"})
{
  "password": "foo"
}

Get information about a user

GET http://orchestrator.f-interop.eu/users/<user_id>

import requests

url = "http://orchestrator.f-interop.eu/users/<user_id>"
register_response = requests.get(url)

Delete a user

DELETE http://orchestrator.f-interop.eu/users/<user_id>

import requests

url = "http://orchestrator.f-interop.eu/users/<user_id>"
register_response = requests.delete(url,
                                    auth=("username", "password"))

Post an event on the event bus of a session

HTTP is not designed to handle event flow such as AMQP is. Sending event is supported but the reply will only tell the sender whether or not the event is arrived inside the broker but it won’t contains anything about the effect.

Publish a message to a given exchange. You will need a body looking something like:

{ "properties": {}, "routing_key": "my key", "payload": "my body", "payload_encoding": "string" }

All keys are mandatory. The payload_encoding key should be either “string” (in which case the payload will be taken to be the UTF-8 encoding of the payload field) or “base64” (in which case the payload field is taken to be base64 encoded). If the message is published successfully, the response will look like:

{ "routed": true }

Routed will be true if the message was sent to at least one queue. Please note that the HTTP API is not ideal for high performance publishing; the need to create a new TCP connection for each message published can limit message throughput compared to AMQP or other protocols using long-lived connections.

POST http://orchestrator.f-interop.eu/sessions/<session_id>/publish

{
  "properties": {},
  "routing_key": "my key",
  "payload": "my body",
  "payload_encoding": "string"
}
import requests

url = "http://orchestrator.f-interop.eu/sessions/<session_id>/publish"

register_response = requests.post(url,
                                  json={"password": "foo"},
                                  auth=("username", "password"))

Need to integrate a new testing tool to orchestrator?

read the F-Interop SDK documentation

also, you contact f-interop at f-interop-scientific@npafi.org

Testing tools

Interfaces

The general architecture and interfaces of F-Interop is described in the diagram

However, the documentation hosted in doc.f-interop.eu focus on the description of the following interfaces:

Screenshot

A second level of abstraction is provided for the design of the testing tool in the case of interoperability and conformance testing:

Screenshot

This documentation also specifies the interfaces between the coordinator + orchestrator + tat + sniffer + agents + packet generator which is used by F-Interop team to build out native F-Interop testing tools.

Some components may be used for other testing tools (like performance or privacy testing).

F-Interop recommends the following design shown in the picture above (and also to re-use as many components as possible of the code provided). link_to_source_code Implementors of testing tools may nevertheless implement a different one if they found this doesnt fit their needs.

For doing so, please contact the main F-Interop developers, architect or integrator for studying these needs.

Examples

You can find some reference implementations for the testing tools here:

For the time being only the CoAP interoperability testing tool is publicly available from the F-Interop’s the testing tools.

CoAP Testing Tool git repo

For future reference, you can find the complete list of F-Interop public git repositories at: Explore git repos

Note:

Requirements

Interop and Conformance Testing Tools:

Interoperability Testing Tool

Introduction

tl;dr: this doc describes API calls, some which are mandatory to implememt by every testing tool to interact with the rest of the F-Interop ecosystem, but others are just recomendations. But the doc not only describes the API calls used by the interop & conformance testing tools, it describes their behaviour too.

This section describes the API calls between:

  1. Testing tool and other F-Interop components (like agents, GUI, etc)
  2. Internal testing tool calls (between components)

In this doc we also describe what is the expected behaviour of the interop & conformance testing tool, e.g. how the testing tool should react to each of the events on the bus. Our approach is to define a component (e.g. analyzer) per each namespace (e.g. analysis) -basically a term in the namespace involves a set of related functionalities of the testing tool-.

Namespaces

The name spaces used in the API spec for the interoperability and conformance testing tools are:

Test Coordinator

Description

The coordinator is the component that glues all parts together. It’s purpose is to coordinate the test cases execution during a test session. It’s a generic executor of the test case, although at the bootstrapping phase it retrieves a test session context from the test orchestrator.

The base document on which the tests are executed are the test descriptions (extended version from ETSI’s)

TEDs example
--- !configuration
configuration_id: COAP_CFG_01_v01
uri: http://f-interop.paris.inria.fr/tests/CoAP_CFG_01
nodes:
  - coap_client
  - coap_server
topology:
  - link_id : link_01
    capture_filter: udp port 5683
    nodes:
      - coap_client
      - coap_server
description:
  - node: coap_server
    message:
      - CoAP servers are requested to offer the following resources
      - - /test
        - Default test resource
        - Should not exceed 64bytes
      - - /seg1/seg2/seg3
        - Long path ressource
        - Should not exceed 64bytes
      - - /query
        - Ressource accepting query parameters
        - Should not exceed 64bytes
        (...)

  - node: coap_client
    message:
      - None

--- !testcase
testcase_id: TD_COAP_CORE_01_v01
uri : http://f-interop.paris.inria.fr/tests/TD_COAP_CORE_01_v01
configuration: COAP_CFG_01_v01
objective: Perform GET transaction(CON mode)
pre_conditions: Server offers the resource /test with resource content is not empty that handles GET with an arbitrary payload
references: '[COAP] 5.8.1, 1.2, 2.1, 2.2, 3.1'
sequence:
  - step_id: 'TD_COAP_CORE_01_v01_step_01'
    type: stimuli
    iut : coap_client
    description:
      - Client is requested to send a GET request with
      - Type = 0(CON)
      - Code = 1(GET)

  - step_id: TD_COAP_CORE_01_v01_step_02
    type: check
    description:
      - The request sent by the client contains
      - Type=0 and Code=1
      - Client-generated Message ID(\u2794 CMID)
      - Client-generated Token(\u2794 CTOK)
      - Uri-Path option "test"

  - step_id: TD_COAP_CORE_01_v01_step_03
    type: check
    description:
        - Server sends response containing
        - Code = 2.05(Content)
        - Message ID = CMID, Token = CTOK
        - Content-format option
        - Non-empty Payload

  - step_id: TD_COAP_CORE_01_v01_step_04
    type: verify
    iut: coap_client
    description:
        - Client displays the received information

The most important events sent and actions triggered by the test coordinator are:

The component’s implementation provided by F-Interop is protocol agnostic, once instantiated it gets the specific context from the orchestrator and feeds from the test extended descriptions (TED yaml files). TEDs play a very important role in the architecture, they describe in detail each test case execution. TEDs are meant to be easy to write using YAML language, and they are written by the contributors. TEDs describe the setup of the test, they include a step by step description of each test case. See example for CoAP

API services

Coordinator provides the following services:

SERVICES DESCRIPTION
testcoordination.testsuite.getstatus Message for debugging purposes. The coordination component returns the status of the execution
testcoordination.testsuite.gettestcases Message for requesting the list of test cases included in the test suite.

API events

Coordinator listens and consumes the following messages from the bus:

MESSAGES CONSUMED DESCRIPTION
testcoordination.testsuite.start Message for triggering start of test suite. The command is given by one of the users of the session.
testcoordination.testsuite.finish TBD if needed
testcoordination.testsuite.abort Message for aborting the ongoing test session.
testcoordination.testcase.skip Message for skipping a test case. Coordinator passes to the next test case if there is any left.
testcoordination.testcase.select Message for selecting next test case to be executed. Allows the user to relaunch an already executed test case.
testcoordination.testcase.start Message for triggering the start of the test case. The command is given by one of the users of the session.
testcoordination.testcase.stop TBD if needed
testcoordination.testcase.restart Message for triggering the restart of a test case (TBD if needed)
testcoordination.testcase.finish (# TBD this may not be necesary, as we can detect the end of the TC with the Steps info) Message for triggering the end of a test case. This command is given by one of the users of the session.
testcoordination.step.stimuli.executed Message pushed by UI or agent indicating the stimuli was executed.
testcoordination.step.check.response TBD (for step_by_step analysis)
testcoordination.step.verify.response Message pushed by UI or agent providing the response to verify step.
testingtool.terminate Signal so testing tool can gracefully stop all its processes

Coordinator generates and publishes the following messages:

MESSAGES PUBLISHED DESCRIPTION
testingtool.ready Indicates that the testing tool is ready to receive the testsuite.start signal
testcoordination.testcase.ready Indicates next testcase to be executed
testcoordination.step.execute Provides info about next step to execute, message used by user interfaces and automated-IUTs
testcoordination.testcase.configuration Provides information to the user about the current configuration that needs to be used for the test case. Pushed at the beginning of th testcase
testcoordination.testcase.finished Indicates that the testcase has finished
testcoordination.testcase.verdict Provides final verdict of the test case
testcoordination.testsuite.finished Indicates there’s no more test cases to execute
testcoordination.testsuite.report Provides final report of all the test cases of the test suite

Sniffer

Description

This is the component handling the sniffing of the traffic exchanged between the participants of the test session.

This is basically a tcpdump wrapper.

This component is normally used with the agent component, as a sort of proxy between data plane of the event bus <-> network interface.

Privacy considerations: After session over, captures files MAY must be sent to the secured database(TBD), then all local files eventually created by the component MUST be deleted.

API services

METHOD DESCRIPTION
sniffing.start Action for starting the capture.
sniffing.stop Action for finishing the capture.
sniffing.getcapture Service for retrieving a capture within the session execution scope.
sniffing.getlastcapture Service for retrieving the last capture within the session execution scope.

API events

None

Test Analyser (TAT)

Description

The TAT provides F-Interop with some protocol analysis services. The TAT is the component that performs the verification of traces during a test session based on the CHECKs defined in the Test Description.

F-Interop provides TATs for different protocols under test.

The TAT issues three types of verdicts:

The architecture supports TATs which perform

TATs are created both by the F-Interop core team and by external contributors. The F-Interop API specification defines the format of the messages a TAT will receive from the Event Bus, and the format of the messages it will produce.

TAT may implement it’s own dissector, and in that case they implement all the services described for the Dissector component (this is the case for the CoAP testing tool)

API services

Services provided by TAT:

METHOD DESCRIPTION
analysis.testcase.analyze Analyze frames from one or more PCAP files and returns the verdict of specified test case.
analysis.testsuite.gettestcases Return the implemented test cases by the testing analysis tool.

API events

None

Protocol Dissector

Description

Component for decoding network traces provided as a pcap file, and which returns human readable description of them including headers, fields, values etc.

API services

METHOD DESCRIPTION
dissection.dissectcapture Dissects frames provided as input in PCAP file, returns a json file containing the different fields of the specified protocol. Generates Token for future interactions.
dissection.getframes Return all the frames -or selection if specified- of a previously dissected file. Token for context identification needs to be provided.

API events

Dissector generates and publishes the following messages:

MESSAGES PUBLISHED DESCRIPTION
dissection.autotriggered A trace dissection of all the generated packets since the start of the testcase. This message is printed in the GUI.

Privacy Testing Tool

Introduction

TBD

Namespaces

Privacy component

Description

TBD

API services

TBD provides the following services:

SERVICES DESCRIPTION
dissection.dissectcapture Some description that needs to be writen manually
dissection.dissectcapture.reply Some description that needs to be writen manually
privacy.analyze Some description that needs to be writen manually
privacy.analyze.reply Some description that needs to be writen manually
privacy.configuration.get Some description that needs to be writen manually
privacy.configuration.get.reply Some description that needs to be writen manually
privacy.configuration.set Some description that needs to be writen manually
privacy.configuration.set.reply Some description that needs to be writen manually
privacy.getstatus Some description that needs to be writen manually
privacy.getstatus.reply Some description that needs to be writen manually

API events

TBD listens and consumes the following messages from the bus:

MESSAGES CONSUMED DESCRIPTION
privacy.issue Some description that needs to be writen manually

Sniffer component

Description

TBD

API services

TBD provides the following services:

SERVICES DESCRIPTION
sniffing.getlastcapture Some description that needs to be writen manually
sniffing.start Some description that needs to be writen manually
sniffing.stop Some description that needs to be writen manually

API events

None

Graphical interface and other visualization tools

BASICS

SERVICES PROVIDED

OTHER MESSAGES PUSHED INTO THE BUS

OTHER MESSAGES CONSUMED FROM THE BUS

Result repository

Resource Repository (RR)

BASICS

The Resource Repository is the central database that contains information about all the resources of the platform.

API - Services and Events

SERVICES:

The Resource Repository provides the following services:

SERVICES DESCRIPTION
resource_repository.insert_resource Message for inserting/updating resources in the RR.
resource_repository.get_resource Message for querying the RR about resources.
resource_repository.delete_resource Message for deleting a resource from the RR.

for services request (RPC calls):

Parameters Value Description
exchange ‘default’ The AMQP exchange
routing_key 'control.resource_repository.service’ The routing key for the RR
reply_to 'control.resource_repository.service.reply’ Direct reply-to (RPC server and client)
correlation_id str(uuid.uuid4()) The correlation ID
content_type 'application/json’ The content type

for the reply:

Parameters Value Description
exchange 'default’ The AMQP exchange
routing_key 'control.resource_repository.service.reply’ The routing key for the RR
correlation_id same as request The correlation ID
content_type 'application/json’ The content type

EVENTS:

The Resource Repository generates and publishes the following messages:

MESSAGES PUBLISHED DESCRIPTION
control.resource_repository.error Message used to indicate errors on coordination component

SERVICES

resource_repository.insert_resource

INSERT RESOURCE REQUEST EXAMPLE:

 - - -
ROUTING_KEY: control.resource_repository.service
 - - -
HEADERS: None
 - - -
PROPS: {
    "correlation_id": "1a58de57-176e-41c4-bca3-e81b968142c9", 
    "content_type": "application/json", 
    "reply_to": "control.resource_repository.service.reply",
    ...
}
 - - -
BODY {
    "_type": "resource_repository.insert_resource",
    "resource":{
        "resource_id": "unique-resource-identifier",
        "privacy_flag": "public",
        "available": true,
        "owner_id": "unique-owner-identifier",
        "ts_creation": 1256953732,
        "ts_update": 1256953732,
        "hardware": {
            "manufacturer": "HW manufacturer",
            "machine_type": "phy",
            "hw_platform": "HW platform (board name)",
            "power_supply": "Power supply",
            "processor": "Processor name",
            "cpu_cache": "CPU cache",
            "ram": "RAM",
            "disk": "Secondary storage info",
            "supported_medias": [
                {
                    "name": "Media name",
                    "version": "Media version",
                    "network_card": "Network card info",
                    "mac_address": "aa:bb:cc:dd:ee:ff",
                    "if_bandwidth": "Interface bandwidth"
                }
            ],
            "other_hardware_info": [
                {"parameter": "info_key", "value": "info_value"}
            ]
        },
        "fw_os": {
            "name": "OS/Firmware name",
            "version": "OS/Firmware version",
            "ip_address": "IP address",
            "supported_protocols_services": [
                {
                    "name": "Protocol name 1",
                    "version": "Protocol version 1",
                    "port": 123,
                    "other_protocol_info": [
                        {"parameter": "info_key", "value": "info_value"}
                    ]
                }
            ],
            "other_fw_os_info": [
                {"parameter": "fw_os_info", "value": "fw_os_value"}
            ]
        },
        "software": {
            "name": "SW name",
            "type": "SW type",
            "version": [
                {"version": "1.2.3"},
                {"version": "1.3.0"}
            ],
            "role": "client",
            "automatic_flag": "auto",
            "test_environment": [
                {"test_environment": "central_server"},
                {"test_environment": "docker"}
            ],
            "testing_protocol": {
                "name": "Protocol name 2",
                "version": "Protocol version 2",
                "port": 1234,
                "other_protocol_info": [
                    {"parameter": "info_key", "value": "info_value"}
                ]
            },
            "testing_tool": [
                {
                    "name": "Testing Tool name",
                    "version": "Testing Tool version"
                }
            ],
            "other_software_info": [
                {"parameter": "info_key", "value": "info_value"}
            ]
        },
        "location": {
            "latitude": 11,
            "longitude": 22,
            "country": "CH",
            "city": "City",
            "address": "Address",
            "x": 0,
            "y": 0,
            "z": 0
        }
    }
}
 - - -

INSERT RESOURCE RESPONSE EXAMPLE

 - - -
ROUTING_KEY: control.testcoordination.service.reply
 - - -
HEADERS: None
 - - -
PROPS: {
    "correlation_id": "1a58de57-176e-41c4-bca3-e81b968142c9", 
    "content_type": "application/json", 
    "reply_to": null,
    ...
}
 - - -
BODY {
    "_type": "testcoordination.testsuite.getstatus",
    "ok": true
}
 - - -

REQUEST

Contents Type Value
“_type” String “resource_repository.insert_resource”
“resource” Object The resource that needs to be inserted/updated. All fields are optional, only the resource_id and the owner_id are mandatory.

RESPONSE

Contents Type Value
“_type” String “resource_repository.insert_resource”
“ok” Boolean true if the resource was inserted/updated correctly, false otherwise.
“error_message” String A message describing the error (present if ok = false)
“error_code” Integer Present if ok = false

resource_repository.get_resource

GET RESOURCE REQUEST EXAMPLE:

This query will return all public resources that match all the specified
fields. In other words: all public resources that support 802.11n WiFi,
that have CoAP observe testing tool and that are in Switzerland, for
instance.

 - - -
ROUTING_KEY: control.resource_repository.service
 - - -
HEADERS: None
 - - -
PROPS: {
    "correlation_id": "1a58de57-176e-41c4-bca3-e81b968142c9", 
    "content_type": "application/json", 
    "reply_to": "control.resource_repository.service.reply",
    ...
}
 - - -
BODY {
    "_type": "resource_repository.get_resource",
    "query": {
        "hardware": {
            "supported_medias": [
                {
                    "name": "2.4GHz WiFi",
                    "version": "802.11n"
                }
            ]
        },
        "software": {
            "testing_tool": [
                {
                    "name": "CoAP observe",
                    "version": "RFC 7641"
                }
            ]
        },
        "location": {
            "country": "CH"
        }
    }
}
 - - -

GET RESOURCE RESPONSE EXAMPLE

 - - -
ROUTING_KEY: control.testcoordination.service.reply
 - - -
HEADERS: None
 - - -
PROPS: {
    "correlation_id": "1a58de57-176e-41c4-bca3-e81b968142c9", 
    "content_type": "application/json", 
    "reply_to": null,
    ...
}
 - - -
BODY {
    "_type": "resource_repository.get_resource",
    "ok": true,
    "results": [
        {
            "resource_id": "resource-001-unique-id",
            "owner_id": "user-001-unique-id",
            "privacy_flag": "public",
            "available": true,
            "ts_creation": 1481382022000,
            "ts_update": 1481382022000,
            "hardware": {
                "hw_platform": "HW platform info",
                "manufacturer": "Manufacturer info",
                "machine_type": "phy OR vm",
                "power_supply": "Power supply info",
                "processor": "Processor info",
                "cpu_cache": "CPU cache info",
                "ram": "RAM info",
                "disk": "Secondary storage info",
                "other_hw_info": [
                    {"param": "Extra info name", "value": "Extra info value"},
                    ...
                ],
                "supported_medias": [
                    {
                        "name": "2.4GHz WiFi",
                        "version": "802.11n",
                        "network_card": "None",
                        "mac_address": "aa:bb:cc:dd:ee:ff",
                        "if_bandwidth": "150 Mbit/s"
                    },
                    ...
                ]
            },
            "fw_os": {
                "name": "Firmware/Software name",
                "version": "1.2.3",
                "ip_address": "192.168.1.100",
                "supported_protocols_services": [
                    {
                        "name": "CoAP observe",
                        "version": "RFC 7641",
                        "port": 5683,
                        "other_protocol_info": [
                            {"param": "Extra info name", "value": "Extra info value"},
                            ...
                        ]
                    },
                ]
                "other_fw_os_info": [
                    {"parameter": "fw_os_info", "value": "fw_os_value"},
                    ...
                ]
            },
            "software": {
                "name": "SW name",
                "type": "SW type",
                "version": [
                    {
                        "version": "SW version"
                    }
                ],
                "role": "client",
                "automatic_flag": "auto",
                "test_environment": [
                    {
                        "test_environment": "central_server"
                    }
                ],
                "testing_tool": [
                    {
                        "name": "Tool name",
                        "version": "1.2.3"
                    }
                ]
                "testing_protocol": {
                    "name": "CoAP observe",
                    "version": "RFC 7641",
                    "port": 5683,
                    "other_protocol_info": [
                        {"param": "Extra info name", "value": "Extra info value"},
                        ...
                    ]
                },
                "other_software_info": [
                    {"param": "Extra info name", "value": "Extra info value"},
                    ...
                ]
            },
            "location": {
                "country": "CH",
                "city": "Geneva",
                "address": "None",
                "latitude": 0,
                "longitude": 0,
                "x": 0,
                "y": 0,
                "z": 0
            }
        },
        {
            "resource_id": "resource-123-unique-id",
            "owner_id": "user-002-unique-id",
            "privacy_flag": "public",
            "available": true,
            "ts_creation": 1481382022000,
            "ts_update": 1481382022000,
            "hardware": {
                ...
            },
            "fw_os": {
                ...
            },
            "software": {
                ...
            },
            "location": {
                ...
            }
        },
        ...
    ]
}
 - - -

REQUEST

Contents Type Value
“_type” String “resource_repository.get_resource”
“query” Object An object matching the structure of a resource object. All fields that are present in the query will be used to match resources. All resources that match all the fields present in the query will be returned (see example).

RESPONSE

Contents Type Value
“_type” String “resource_repository.get_resource”
“ok” Boolean True if the query was executed correctly, false otherwise.
“results” Array of Objects The list of resources that match the query. An empty list if no result. (Present if ok = true)
“error_message” String A message describing the error (present if ok = false).
“error_code” Integer Present if ok = false.

resource_repository.delete_resource

DELETE RESOURCE REQUEST EXAMPLE:

 - - -
ROUTING_KEY: control.resource_repository.service
 - - -
HEADERS: None
 - - -
PROPS: {
    "correlation_id": "1a58de57-176e-41c4-bca3-e81b968142c9", 
    "content_type": "application/json", 
    "reply_to": "control.resource_repository.service.reply",
    ...
}
 - - -
BODY {
    "_type": "resource_repository.delete_resource",
    "resource":{
        "resource_id": "unique-resource-identifier",
        "owner_id": "unique-owner-identifier"
    }
}
 - - -

DELETE RESOURCE RESPONSE EXAMPLE

 - - -
ROUTING_KEY: control.testcoordination.service.reply
 - - -
HEADERS: None
 - - -
PROPS: {
    "correlation_id": "1a58de57-176e-41c4-bca3-e81b968142c9", 
    "content_type": "application/json", 
    "reply_to": null,
    ...
}
 - - -
BODY {
    "_type": "testcoordination.testsuite.getstatus",
    "ok": true
}
 - - -

REQUEST

Contents Type Value
“_type” String “resource_repository.delete_resource”
“resource” Object The resource that needs to be deleted. The resource_id and the owner_id are mandatory.

RESPONSE

Contents Type Value
“_type” String “resource_repository.delete_resource”
“ok” Boolean true if the resource was erased correctly, false otherwise.
“error_message” String A message describing the error (present if ok = false)
“error_code” Integer Present if ok = false

Messages format

This section describes the format of the messages used by the testing tool.

This section of the documentation is autogenerated by tool

Version 0.1.30

analysis.interop.testcase.analyze

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Request (service) Typical_use: coordination -> analysis Description: - Method to launch an analysis from a pcap file or a token if the pcap file has already been provided. - The method need a token or a pcap_file but doesn’t allow someone to provide both.

Source code:

MsgInteropTestCaseAnalyze

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.analysis.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.analysis.service.reply",
    "correlation_id": "c964cac3-20f7-4918-a45d-beb680dc3f83",
    "timestamp": 1497952097,
    "message_id": "c964cac3-20f7-4918-a45d-beb680dc3f83"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "analysis.interop.testcase.analyze",
    "file_enc": "pcap_base64",
    "filename": "TD_COAP_CORE_01.pcap",
    "testcase_id": "TD_COAP_CORE_01",
    "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_01_v01",
    "value": "1MOyoQIABAAAAAAAAAAAAMgAAAAAAAAA"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "analysis.interop.testcase.analyze",
    "file_enc": "pcap_base64",
    "filename": "TD_COAP_CORE_01.pcap",
    "testcase_id": "TD_COAP_CORE_01",
    "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_01_v01",
    "value": "1MOyoQIABAAAAAAAAAAAAMgAAAAAAAAA"
}

analysis.interop.testcase.analyze.reply

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Analyzer -> Coordinator Testing Tool SHOULD implement (design recommendation)

The recommended structure for the partial_verdicts field is a list of partial verdicts with the following requirements: - each one of those elements of the list correspond to one CHECK or VERIFY steps of the test description - first value of the list MUST be a “pass”, “fail”, “inconclusive” or eventually “error” partial verdict (string) - the second value MUST be a string with a description of partial verdict (intended for the user) - more values elements MAY be added to the list

Source code:

MsgInteropTestCaseAnalyzeReply

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.analysis.service.reply
 -  -  -
Message properties: {
    "content_type": "application/json",
    "correlation_id": "310992fc-c534-41e7-af02-3858ecd0c61d",
    "timestamp": 1497952097,
    "message_id": "ef90220f-7374-4e4d-a153-3038dd40b0cd"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "analysis.interop.testcase.analyze.reply",
    "analysis_type": "postmortem",
    "description": "The test purpose has been verified without any fault detected",
    "ok": true,
    "partial_verdicts": [
        [
            "pass",
            "<Frame   1: [127.0.0.1 -> 127.0.0.1] CoAP [CON 43521] GET /test> Match: CoAP(type=0, code=1)"
        ],
        [
            "pass",
            "<Frame   2: [127.0.0.1 -> 127.0.0.1] CoAP [ACK 43521] 2.05 Content > Match: CoAP(code=69, mid=0xaa01,                 tok=b'b\\xda', pl=Not(b''))"
        ],
        [
            "pass",
            "<Frame   2: [127.0.0.1 -> 127.0.0.1] CoAP [ACK 43521] 2.05 Content >                 Match: CoAP(opt=Opt(CoAPOptionContentFormat()))"
        ]
    ],
    "review_frames": [],
    "testcase_id": "TD_COAP_CORE_01",
    "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_01_v01",
    "token": "0lzzb_Bx30u8Gu-xkt1DFE1GmB4",
    "verdict": "pass"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "analysis.interop.testcase.analyze.reply",
    "analysis_type": "postmortem",
    "description": "The test purpose has been verified without any fault detected",
    "ok": true,
    "partial_verdicts": [
        [
            "pass",
            "<Frame   1: [127.0.0.1 -> 127.0.0.1] CoAP [CON 43521] GET /test> Match: CoAP(type=0, code=1)"
        ],
        [
            "pass",
            "<Frame   2: [127.0.0.1 -> 127.0.0.1] CoAP [ACK 43521] 2.05 Content > Match: CoAP(code=69, mid=0xaa01,                 tok=b'b\\xda', pl=Not(b''))"
        ],
        [
            "pass",
            "<Frame   2: [127.0.0.1 -> 127.0.0.1] CoAP [ACK 43521] 2.05 Content >                 Match: CoAP(opt=Opt(CoAPOptionContentFormat()))"
        ]
    ],
    "review_frames": [],
    "testcase_id": "TD_COAP_CORE_01",
    "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_01_v01",
    "token": "0lzzb_Bx30u8Gu-xkt1DFE1GmB4",
    "verdict": "pass"
}

dissection.autotriggered

Description:

Requirements: Testing Tool MUST publish event Type: Event Typical_use: Testing Tool -> GUI Description: Used to indicate to the GUI the dissection of the exchanged packets. - GUI MUST display this info during execution: - interop session - conformance session - performance ? - privacy?

Source code:

MsgDissectionAutoDissect

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.dissection
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "1012bf3f-1afd-47c8-9e9a-413161b2b6bf"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "dissection.autotriggered",
    "frames": [
        {
            "protocol_stack": [
                {
                    "_protocol": "NullLoopback",
                    "AddressFamily": "2",
                    "ProtocolFamily": "0",
                    "_type": "protocol"
                },
                {
                    "Reserved": "0",
                    "FragmentOffset": "0",
                    "SourceAddress": "127.0.0.1",
                    "TotalLength": "41",
                    "Identification": "0x71ac",
                    "Version": "4",
                    "DontFragment": "0",
                    "DestinationAddress": "127.0.0.1",
                    "_protocol": "IPv4",
                    "HeaderLength": "5",
                    "Options": "b''",
                    "_type": "protocol",
                    "TimeToLive": "64",
                    "TypeOfService": "0x00",
                    "MoreFragments": "0",
                    "Protocol": "17",
                    "HeaderChecksum": "0x0000"
                }
            ],
            "_type": "frame",
            "timestamp": 1464858393.547275,
            "id": 1,
            "error": null
        }
    ],
    "testcase_id": "TBD",
    "testcase_ref": "TBD",
    "token": "0lzzb_Bx30u8Gu-xkt1DFE1GmB4"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "dissection.autotriggered",
    "frames": [
        {
            "protocol_stack": [
                {
                    "_protocol": "NullLoopback",
                    "AddressFamily": "2",
                    "ProtocolFamily": "0",
                    "_type": "protocol"
                },
                {
                    "Reserved": "0",
                    "FragmentOffset": "0",
                    "SourceAddress": "127.0.0.1",
                    "TotalLength": "41",
                    "Identification": "0x71ac",
                    "Version": "4",
                    "DontFragment": "0",
                    "DestinationAddress": "127.0.0.1",
                    "_protocol": "IPv4",
                    "HeaderLength": "5",
                    "Options": "b''",
                    "_type": "protocol",
                    "TimeToLive": "64",
                    "TypeOfService": "0x00",
                    "MoreFragments": "0",
                    "Protocol": "17",
                    "HeaderChecksum": "0x0000"
                }
            ],
            "_type": "frame",
            "timestamp": 1464858393.547275,
            "id": 1,
            "error": null
        }
    ],
    "testcase_id": "TBD",
    "testcase_ref": "TBD",
    "token": "0lzzb_Bx30u8Gu-xkt1DFE1GmB4"
}

dissection.dissectcapture

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Request (service) Typical_use: coordination -> dissection, analysis -> dissection Description: TBD

Source code:

MsgDissectionDissectCapture

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.dissection.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.dissection.service.reply",
    "correlation_id": "d2eb714d-7efd-4b14-abcd-11121891ea6e",
    "timestamp": 1497952097,
    "message_id": "d2eb714d-7efd-4b14-abcd-11121891ea6e"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "dissection.dissectcapture",
    "file_enc": "pcap_base64",
    "filename": "TD_COAP_CORE_01.pcap",
    "protocol_selection": "coap",
    "value": "1MOyoQIABAAAAAAAAAAAAMgAAABlAAAAqgl9WK8aBgA7AAAAOwAAAGADPxUAExFAu7sAAAAAAAAAAAAAAAAAAbu7AAAAAAAAAAAAAAAAAALXvBYzABNZUEABcGO0dGVzdMECqgl9WMcaBgCQAAAAkAAAAGAAAAAAaDr//oAAAAAAAAAAAAAAAAAAA7u7AAAAAAAAAAAAAAAAAAGJAAcTAAAAALu7AAAAAAAAAAAAAAAAAAK7uwAAAAAAAAAAAAAAAAACBAgAAAAAAABgAz8VABMRQLu7AAAAAAAAAAAAAAAAAAG7uwAAAAAAAAAAAAAAAAAC17wWMwATWVBAAXBjtHRlc6oJfVjSGgYAOwAAADsAAABgAz8VABMRP7u7AAAAAAAAAAAAAAAAAAG7uwAAAAAAAAAAAAAAAAAC17wWMwATWVBAAXBjtHRlc3TBAg=="
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "dissection.dissectcapture",
    "file_enc": "pcap_base64",
    "filename": "TD_COAP_CORE_01.pcap",
    "protocol_selection": "coap",
    "value": "1MOyoQIABAAAAAAAAAAAAMgAAABlAAAAqgl9WK8aBgA7AAAAOwAAAGADPxUAExFAu7sAAAAAAAAAAAAAAAAAAbu7AAAAAAAAAAAAAAAAAALXvBYzABNZUEABcGO0dGVzdMECqgl9WMcaBgCQAAAAkAAAAGAAAAAAaDr//oAAAAAAAAAAAAAAAAAAA7u7AAAAAAAAAAAAAAAAAAGJAAcTAAAAALu7AAAAAAAAAAAAAAAAAAK7uwAAAAAAAAAAAAAAAAACBAgAAAAAAABgAz8VABMRQLu7AAAAAAAAAAAAAAAAAAG7uwAAAAAAAAAAAAAAAAAC17wWMwATWVBAAXBjtHRlc6oJfVjSGgYAOwAAADsAAABgAz8VABMRP7u7AAAAAAAAAAAAAAAAAAG7uwAAAAAAAAAAAAAAAAAC17wWMwATWVBAAXBjtHRlc3TBAg=="
}

dissection.dissectcapture.reply

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Reply (service) Typical_use: Dissector -> Coordinator, Dissector -> Analyzer Description: TBD

Source code:

MsgDissectionDissectCaptureReply

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.dissection.service.reply
 -  -  -
Message properties: {
    "content_type": "application/json",
    "correlation_id": "6d2d35a3-cc89-40df-99c2-96e0c9a12039",
    "timestamp": 1497952097,
    "message_id": "8e6953ee-64ea-4a78-bc5e-eae036a831ab"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "dissection.dissectcapture.reply",
    "frames": [
        {
            "protocol_stack": [
                {
                    "_protocol": "NullLoopback",
                    "AddressFamily": "2",
                    "ProtocolFamily": "0",
                    "_type": "protocol"
                },
                {
                    "Reserved": "0",
                    "FragmentOffset": "0",
                    "SourceAddress": "127.0.0.1",
                    "TotalLength": "41",
                    "Identification": "0x71ac",
                    "Version": "4",
                    "DontFragment": "0",
                    "DestinationAddress": "127.0.0.1",
                    "_protocol": "IPv4",
                    "HeaderLength": "5",
                    "Options": "b''",
                    "_type": "protocol",
                    "TimeToLive": "64",
                    "TypeOfService": "0x00",
                    "MoreFragments": "0",
                    "Protocol": "17",
                    "HeaderChecksum": "0x0000"
                }
            ],
            "_type": "frame",
            "timestamp": 1464858393.547275,
            "id": 1,
            "error": null
        }
    ],
    "ok": true,
    "token": "0lzzb_Bx30u8Gu-xkt1DFE1GmB4"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "dissection.dissectcapture.reply",
    "frames": [
        {
            "protocol_stack": [
                {
                    "_protocol": "NullLoopback",
                    "AddressFamily": "2",
                    "ProtocolFamily": "0",
                    "_type": "protocol"
                },
                {
                    "Reserved": "0",
                    "FragmentOffset": "0",
                    "SourceAddress": "127.0.0.1",
                    "TotalLength": "41",
                    "Identification": "0x71ac",
                    "Version": "4",
                    "DontFragment": "0",
                    "DestinationAddress": "127.0.0.1",
                    "_protocol": "IPv4",
                    "HeaderLength": "5",
                    "Options": "b''",
                    "_type": "protocol",
                    "TimeToLive": "64",
                    "TypeOfService": "0x00",
                    "MoreFragments": "0",
                    "Protocol": "17",
                    "HeaderChecksum": "0x0000"
                }
            ],
            "_type": "frame",
            "timestamp": 1464858393.547275,
            "id": 1,
            "error": null
        }
    ],
    "ok": true,
    "token": "0lzzb_Bx30u8Gu-xkt1DFE1GmB4"
}

privacy.analyze

Description:

Testing Tool’s MUST-implement. Analyze PCAP File for Privacy checks.

Source code:

MsgPrivacyAnalyze

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.privacy.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.privacy.service.reply",
    "correlation_id": "bda4e068-03b6-4e6d-9ad2-e71d578f540a",
    "timestamp": 1497952097,
    "message_id": "bda4e068-03b6-4e6d-9ad2-e71d578f540a"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "privacy.analyze",
    "file_enc": "pcap_base64",
    "filename": "TD_PRIVACY_DEMO_01.pcap",
    "value": "Cg0NCpgAAABNPCsaAQAAAP//////////AwAuAE1hYyBPUyBYIDEwLjEyLjQsIGJ1aWxkIDE2RTE5NSAoRGFyd2luIDE2LjUuMCkAAAQAPQBEdW1wY2FwIChXaXJlc2hhcmspIDIuMi4wICh2Mi4yLjAtMC1nNTM2OGM1MCBmcm9tIG1hc3Rlci0yLjIpAAAAAAAAAJgAAAABAAAAXAAAAAAAAAAAAAQAAgAEAHR1bjAJAAEABgAAAAwALgBNYWMgT1MgWCAxMC4xMi40LCBidWlsZCAxNkUxOTUgKERhcndpbiAxNi41LjApAAAAAAAAXAAAAAUAAABsAAAAAAAAAIdOBQCsif6eAQAcAENvdW50ZXJzIHByb3ZpZGVkIGJ5IGR1bXBjYXACAAgAh04FAN2Zip4DAAgAh04FAKGJ/p4EAAgAAAAAAAAAAAAFAAgAAAAAAAAAAAAAAAAAbAAAAA=="
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "privacy.analyze",
    "file_enc": "pcap_base64",
    "filename": "TD_PRIVACY_DEMO_01.pcap",
    "value": "Cg0NCpgAAABNPCsaAQAAAP//////////AwAuAE1hYyBPUyBYIDEwLjEyLjQsIGJ1aWxkIDE2RTE5NSAoRGFyd2luIDE2LjUuMCkAAAQAPQBEdW1wY2FwIChXaXJlc2hhcmspIDIuMi4wICh2Mi4yLjAtMC1nNTM2OGM1MCBmcm9tIG1hc3Rlci0yLjIpAAAAAAAAAJgAAAABAAAAXAAAAAAAAAAAAAQAAgAEAHR1bjAJAAEABgAAAAwALgBNYWMgT1MgWCAxMC4xMi40LCBidWlsZCAxNkUxOTUgKERhcndpbiAxNi41LjApAAAAAAAAXAAAAAUAAABsAAAAAAAAAIdOBQCsif6eAQAcAENvdW50ZXJzIHByb3ZpZGVkIGJ5IGR1bXBjYXACAAgAh04FAN2Zip4DAAgAh04FAKGJ/p4EAAgAAAAAAAAAAAAFAAgAAAAAAAAAAAAAAAAAbAAAAA=="
}

privacy.analyze.reply

Description:

Testing Tool’s MUST-implement. Response of Analyze request from GUI

Source code:

MsgPrivacyAnalyzeReply

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.privacy.service.reply
 -  -  -
Message properties: {
    "content_type": "application/json",
    "correlation_id": "d3129cd0-3cd1-45da-8288-061096625deb",
    "timestamp": 1497952097,
    "message_id": "5cc1cd19-d4b7-40cf-8e7c-7ca08a5559b1"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "privacy.analyze.reply",
    "ok": true,
    "testcase_id": "TBD",
    "verdict": {
        "testing_tool": "Privacy Testing Tool",
        "is_final": true,
        "status": "none",
        "timestamp": 1493798811.53124,
        "packets": {},
        "version": "0.0.1",
        "conversation": [],
        "type": "Anomalies Report",
        "protocols": [
            "coap"
        ],
        "byte_exchanged": 0
    }
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "privacy.analyze.reply",
    "ok": true,
    "testcase_id": "TBD",
    "verdict": {
        "testing_tool": "Privacy Testing Tool",
        "is_final": true,
        "status": "none",
        "timestamp": 1493798811.53124,
        "packets": {},
        "version": "0.0.1",
        "conversation": [],
        "type": "Anomalies Report",
        "protocols": [
            "coap"
        ],
        "byte_exchanged": 0
    }
}

privacy.configuration.get

Description:

Read Privacy configuration. GUI MUST display this info during setup

Source code:

MsgPrivacyGetConfiguration

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.privacy.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.privacy.service.reply",
    "correlation_id": "dd4d3a55-a63c-44ea-bf15-7932c06fabbe",
    "timestamp": 1497952097,
    "message_id": "dd4d3a55-a63c-44ea-bf15-7932c06fabbe"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "privacy.configuration.get"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "privacy.configuration.get"
}

privacy.configuration.get.reply

Description:

Read Privacy configuration. GUI MUST display this info during setup

Source code:

MsgPrivacyGetConfigurationReply

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.privacy.service.reply
 -  -  -
Message properties: {
    "content_type": "application/json",
    "correlation_id": "eab53841-f153-436a-9fbe-c745417a696b",
    "timestamp": 1497952097,
    "message_id": "314eb537-c556-409f-b63e-933857b3900e"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "privacy.configuration.get.reply",
    "configuration": {},
    "ok": true
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "privacy.configuration.get.reply",
    "configuration": {},
    "ok": true
}

privacy.configuration.set

Description:

Write Privacy configuration. GUI MUST display this info during setup

Source code:

MsgPrivacySetConfiguration

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.privacy.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.privacy.service.reply",
    "correlation_id": "3e55e074-10bc-42c3-b852-dd42ce2b63e4",
    "timestamp": 1497952097,
    "message_id": "3e55e074-10bc-42c3-b852-dd42ce2b63e4"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "privacy.configuration.set",
    "configuration": {}
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "privacy.configuration.set",
    "configuration": {}
}

privacy.configuration.set.reply

Description:

Write Privacy configuration. GUI MUST display this info during setup

Source code:

MsgPrivacySetConfigurationReply

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.privacy.service.reply
 -  -  -
Message properties: {
    "content_type": "application/json",
    "correlation_id": "5ece0a5c-eeb8-47cb-921f-3cdbb137a548",
    "timestamp": 1497952097,
    "message_id": "70c9985a-26cb-4c14-aa0b-346601202a94"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "privacy.configuration.set.reply",
    "ok": true
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "privacy.configuration.set.reply",
    "ok": true
}

privacy.getstatus

Description:

Testing Tool’s MUST-implement. GUI -> Testing Tool GUI MUST display this info during execution: - privacy?

Source code:

MsgPrivacyGetStatus

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.privacy.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.privacy.service.reply",
    "correlation_id": "ccb13b18-d436-4b09-a026-9bfb6c9a7c81",
    "timestamp": 1497952097,
    "message_id": "ccb13b18-d436-4b09-a026-9bfb6c9a7c81"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "privacy.getstatus"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "privacy.getstatus"
}

privacy.getstatus.reply

Description:

Testing Tool’s MUST-implement. GUI -> Testing Tool GUI MUST display this info during execution: - privacy?

Source code:

MsgPrivacyGetStatusReply

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.privacy.service.reply
 -  -  -
Message properties: {
    "content_type": "application/json",
    "correlation_id": "3a795215-c897-42be-961f-2d768474a906",
    "timestamp": 1497952097,
    "message_id": "78829766-2cc2-4a9d-8e70-b5d3664ca8ed"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "privacy.getstatus.reply",
    "ok": true,
    "status": "TBD",
    "verdict": {}
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "privacy.getstatus.reply",
    "ok": true,
    "status": "TBD",
    "verdict": {}
}

privacy.issue

Description:

Testing Tool’s MUST-implement. Testing tools -> GUI GUI MUST display this info during execution: - privacy

Source code:

MsgPrivacyIssue

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.privacy
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "c414df6e-47c5-4546-9933-cd26c0255f90"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "privacy.issue",
    "verdict": "{\"testing_tool\": \"Privacy Testing Tool\", \"is_final\": true, \"status\": \"none\", \"timestamp\": 1493798811.53124, \"packets\": {}, \"version\": \"0.0.1\", \"conversation\": [], \"type\": \"Anomalies Report\", \"protocols\": [\"coap\"], \"byte_exchanged\": 0}"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "privacy.issue",
    "verdict": "{\"testing_tool\": \"Privacy Testing Tool\", \"is_final\": true, \"status\": \"none\", \"timestamp\": 1493798811.53124, \"packets\": {}, \"version\": \"0.0.1\", \"conversation\": [], \"type\": \"Anomalies Report\", \"protocols\": [\"coap\"], \"byte_exchanged\": 0}"
}

session.interop.configuration

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: Orchestrator -> Testing Tool Description: Testing tool MUST listen to this message and configure the testsuite correspondingly

Source code:

MsgInteropSessionConfiguration

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.session
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "03397a9b-c171-4a6a-ab78-8d7c43915a5a"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "session.interop.configuration",
    "iuts": [
        {
            "location": "user-facilities",
            "owner": "someUserName",
            "version": "0.1",
            "role": "coap_server",
            "execution_mode": "user-assisted",
            "id": "someImplementationFromAUser"
        },
        {
            "location": "central-server-docker",
            "owner": "f-interop",
            "version": "0.1",
            "role": "coap_client",
            "execution_mode": "automated-iut",
            "id": "automated_iut-coap_client-coapthon-v0.1"
        }
    ],
    "session_id": "TBD",
    "testing_tools": "f-interop/interoperability-coap",
    "tests": [
        {
            "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_01_v01",
            "settings": {}
        },
        {
            "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_02_v01",
            "settings": {}
        }
    ],
    "users": [
        "u1",
        "f-interop"
    ]
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "session.interop.configuration",
    "iuts": [
        {
            "location": "user-facilities",
            "owner": "someUserName",
            "version": "0.1",
            "role": "coap_server",
            "execution_mode": "user-assisted",
            "id": "someImplementationFromAUser"
        },
        {
            "location": "central-server-docker",
            "owner": "f-interop",
            "version": "0.1",
            "role": "coap_client",
            "execution_mode": "automated-iut",
            "id": "automated_iut-coap_client-coapthon-v0.1"
        }
    ],
    "session_id": "TBD",
    "testing_tools": "f-interop/interoperability-coap",
    "tests": [
        {
            "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_01_v01",
            "settings": {}
        },
        {
            "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_02_v01",
            "settings": {}
        }
    ],
    "users": [
        "u1",
        "f-interop"
    ]
}

sniffing.getcapture

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Request (service) Typical_use: coordination -> sniffing Description: tbd

Source code:

MsgSniffingGetCapture

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.sniffing.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.sniffing.service.reply",
    "correlation_id": "95ab00ff-a091-4d0f-8e93-6fdf1897a609",
    "timestamp": 1497952097,
    "message_id": "95ab00ff-a091-4d0f-8e93-6fdf1897a609"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "sniffing.getcapture",
    "capture_id": "TD_COAP_CORE_01"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "sniffing.getcapture",
    "capture_id": "TD_COAP_CORE_01"
}

sniffing.getlastcapture

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Request (service) Typical_use: coordination -> sniffing Description: tbd

Source code:

MsgSniffingGetCaptureLast

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.sniffing.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.sniffing.service.reply",
    "correlation_id": "2be473a8-89e6-42f5-8ccc-5f4cd8bbc598",
    "timestamp": 1497952097,
    "message_id": "2be473a8-89e6-42f5-8ccc-5f4cd8bbc598"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "sniffing.getlastcapture"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "sniffing.getlastcapture"
}

sniffing.start

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Request (service) Typical_use: coordination -> sniffing Description: tbd

Source code:

MsgSniffingStart

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.sniffing.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.sniffing.service.reply",
    "correlation_id": "03f9414e-1dac-4524-acc8-c9e92b442dfc",
    "timestamp": 1497952097,
    "message_id": "03f9414e-1dac-4524-acc8-c9e92b442dfc"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "sniffing.start",
    "capture_id": "TD_COAP_CORE_01",
    "filter_if": "tun0",
    "filter_proto": "udp port 5683"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "sniffing.start",
    "capture_id": "TD_COAP_CORE_01",
    "filter_if": "tun0",
    "filter_proto": "udp port 5683"
}

sniffing.stop

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Request (service) Typical_use: coordination -> sniffing Description: tbd

Source code:

MsgSniffingStop

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.sniffing.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.sniffing.service.reply",
    "correlation_id": "755c898e-3fee-464f-b908-d6e169ac1310",
    "timestamp": 1497952097,
    "message_id": "755c898e-3fee-464f-b908-d6e169ac1310"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "sniffing.stop"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "sniffing.stop"
}

testcoordination.step.check.response

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Event Typical_use: test coordination -> test analysis Description: - In the context of IUT to IUT test execution, this message is used for indicating that the previously executed messages (stimuli message and its reply) CHECK or comply to what is described in the Test Description. - Not used in CoAP testing Tool (analysis of traces is done post mortem)

Source code:

MsgCheckResponse

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "b3634906-af21-4e36-bd7b-aef9fecdf51e"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.step.check.response",
    "description": "TAT says: step complies (checks) with specification",
    "partial_verdict": "pass"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.step.check.response",
    "description": "TAT says: step complies (checks) with specification",
    "partial_verdict": "pass"
}

testcoordination.step.execute

Description:

Requirements: Testing Tool MUST publish event Type: Event Typical_use: Testing Tool -> GUI Description: - Used to indicate to the GUI (or automated-iut) which is the step to be executed by the user (or automated-IUT).

Source code:

MsgStepExecute

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "5c608595-4f14-48b6-b375-35fec2ea9b20"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.step.execute",
    "message": "Next test step to be executed is TD_COAP_CORE_01_v01_step_01",
    "node": "coap_client",
    "node_execution_mode": "user_assisted",
    "step_id": "TD_COAP_CORE_01_v01_step_01",
    "step_info": [
        "Client is requested to send a GET request with",
        "Type = 0(CON)",
        "Code = 1(GET)"
    ],
    "step_state": "executing",
    "step_type": "stimuli",
    "testcase_id": "TBD",
    "testcase_ref": "TBD"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.step.execute",
    "message": "Next test step to be executed is TD_COAP_CORE_01_v01_step_01",
    "node": "coap_client",
    "node_execution_mode": "user_assisted",
    "step_id": "TD_COAP_CORE_01_v01_step_01",
    "step_info": [
        "Client is requested to send a GET request with",
        "Type = 0(CON)",
        "Code = 1(GET)"
    ],
    "step_state": "executing",
    "step_type": "stimuli",
    "testcase_id": "TBD",
    "testcase_ref": "TBD"
}

testcoordination.step.stimuli.executed

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: GUI (or automated-IUT)-> Testing Tool Description: - Used to indicate stimuli has been executed by user (and it’s user-assisted iut) or by automated-iut

Source code:

MsgStimuliExecuted

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "6f4d9268-821f-4e07-a2ae-9b0a64ee2fe3"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.step.stimuli.executed"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.step.stimuli.executed"
}

testcoordination.step.verify.response

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: GUI (or automated-IUT)-> Testing Tool Description: - Message provided by user declaring if the IUT VERIFY the step previously executed as described in the Test Description.

Source code:

MsgVerifyResponse

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "d4f61f4c-643c-4032-b192-5bb1089e56a0"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.step.verify.response",
    "response_type": "bool",
    "verify_response": true
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.step.verify.response",
    "response_type": "bool",
    "verify_response": true
}

testcoordination.testcase.configuration

Description:

Requirements: Testing Tool MAY publish event (if needed for executing the test case) Type: Event Typical_use: Testing Tool -> GUI & automated-iut Description: - Message used to indicate GUI and/or automated-iut which configuration to use.

Source code:

MsgTestCaseConfiguration

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "386a2e29-003b-4025-abe5-472f9a30b6f6"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.configuration",
    "configuration_id": "COAP_CFG_01_v01",
    "message": [
        "CoAP servers running service at [bbbb::2]:5683",
        "CoAP servers are requested to offer the following resources",
        [
            "/test",
            "Default test resource",
            "Should not exceed 64bytes"
        ],
        [
            "/seg1/seg2/seg3",
            "Long path ressource",
            "Should not exceed 64bytes"
        ],
        [
            "/query",
            "Ressource accepting query parameters",
            "Should not exceed 64bytes"
        ],
        [
            "/separate",
            "Ressource which cannot be served immediately and which cannot be acknowledged in a piggy-backed way",
            "Should not exceed 64bytes"
        ],
        [
            "/large",
            "Large resource (>1024 bytes)",
            "shall not exceed 2048bytes"
        ],
        [
            "/large_update",
            "Large resource that can be updated using PUT method (>1024 bytes)",
            "shall not exceed 2048bytes"
        ],
        [
            "/large_create",
            "Large resource that can be  created using POST method (>1024 bytes)",
            "shall not exceed 2048bytes"
        ],
        [
            "/obs",
            "Observable resource which changes every 5 seconds",
            "shall not exceed 2048bytes"
        ],
        [
            "/.well-known/core",
            "CoRE Link Format",
            "may require usage of Block options"
        ]
    ],
    "node": "coap_server",
    "testcase_id": "TBD",
    "testcase_ref": "TBD"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.configuration",
    "configuration_id": "COAP_CFG_01_v01",
    "message": [
        "CoAP servers running service at [bbbb::2]:5683",
        "CoAP servers are requested to offer the following resources",
        [
            "/test",
            "Default test resource",
            "Should not exceed 64bytes"
        ],
        [
            "/seg1/seg2/seg3",
            "Long path ressource",
            "Should not exceed 64bytes"
        ],
        [
            "/query",
            "Ressource accepting query parameters",
            "Should not exceed 64bytes"
        ],
        [
            "/separate",
            "Ressource which cannot be served immediately and which cannot be acknowledged in a piggy-backed way",
            "Should not exceed 64bytes"
        ],
        [
            "/large",
            "Large resource (>1024 bytes)",
            "shall not exceed 2048bytes"
        ],
        [
            "/large_update",
            "Large resource that can be updated using PUT method (>1024 bytes)",
            "shall not exceed 2048bytes"
        ],
        [
            "/large_create",
            "Large resource that can be  created using POST method (>1024 bytes)",
            "shall not exceed 2048bytes"
        ],
        [
            "/obs",
            "Observable resource which changes every 5 seconds",
            "shall not exceed 2048bytes"
        ],
        [
            "/.well-known/core",
            "CoRE Link Format",
            "may require usage of Block options"
        ]
    ],
    "node": "coap_server",
    "testcase_id": "TBD",
    "testcase_ref": "TBD"
}

testcoordination.testcase.finish

Description:

TODO: TBD if needed or not

Requirements: Testing Tool MAY listen to event Type: Event Typical_use: GUI (or automated-IUT)-> Testing Tool Description: - Used for indicating that the test case has finished. - Test coordinator deduces it automatically by using the testcase’s step sequence - Not used in CoAP Testing Tool.

Source code:

MsgTestCaseFinish

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "6aff6070-88a1-45ae-b06a-8390cb7eedd8"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.finish"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.finish"
}

testcoordination.testcase.finished

Description:

Requirements: Testing Tool MUST publish event Type: Event Typical_use: Testing Tool -> GUI Description: - Used for indicating to subscribers that the test cases has finished. - This message is followed by a verdict.

Source code:

MsgTestCaseFinished

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "d41ba0c5-5114-4e61-9e6a-d8287a00d4f8"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.finished",
    "message": "Testcase finished",
    "testcase_id": "TD_COAP_CORE_01",
    "testcase_ref": "TBD"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.finished",
    "message": "Testcase finished",
    "testcase_id": "TD_COAP_CORE_01",
    "testcase_ref": "TBD"
}

testcoordination.testcase.ready

Description:

Requirements: Testing Tool MUST publish event Type: Event Typical_use: GUI -> Testing Tool Description: - Used to indicate to the GUI (or automated-iut) which is the next test case to be executed. - This message is normally followed by a MsgTestCaseStart (from GUI-> Testing Tool)

Source code:

MsgTestCaseReady

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "b6bb1755-ebb5-4b1b-8c3d-68658f430796"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.ready",
    "message": "Next test case to be executed is TD_COAP_CORE_01_v01",
    "objective": "Perform GET transaction(CON mode)",
    "state": null,
    "testcase_id": "TD_COAP_CORE_01_v01",
    "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_01_v01"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.ready",
    "message": "Next test case to be executed is TD_COAP_CORE_01_v01",
    "objective": "Perform GET transaction(CON mode)",
    "state": null,
    "testcase_id": "TD_COAP_CORE_01_v01",
    "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_01_v01"
}

testcoordination.testcase.restart

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: GUI -> Testing Tool Description: Restart the running test cases.

Source code:

MsgTestCaseRestart

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "00153928-5662-478a-8e09-acfa3a073991"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.restart"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.restart"
}

testcoordination.testcase.select

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: GUI (or automated-IUT)-> Testing Tool Description: tbd

Source code:

MsgTestCaseSelect

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "dbfccd0a-c7ca-43c9-b5af-68e927fa8a77"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.select",
    "testcase_id": "TD_COAP_CORE_03_v01"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.select",
    "testcase_id": "TD_COAP_CORE_03_v01"
}

testcoordination.testcase.skip

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: GUI (or automated-IUT)-> Testing Tool Description: - Used for skipping a test cases event when was previusly selected to be executed. - testcase_id (optional) : if not provided then current tc is skipped

Source code:

MsgTestCaseSkip

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "77fe5a5c-5937-420f-84c6-bef376d86960"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.skip",
    "testcase_id": "TD_COAP_CORE_02_v01"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.skip",
    "testcase_id": "TD_COAP_CORE_02_v01"
}

testcoordination.testcase.start

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: GUI -> Testing Tool Description: - Message used for indicating the testing tool to start the test case (the one previously selected)

Source code:

MsgTestCaseStart

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "fdb7d303-c635-43ef-8d2c-e3a1091899fc"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.start"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.start"
}

testcoordination.testcase.stop

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: GUI & automated-iut -> Testing Tool Description: - Message used for indicating the testing tool to stop the test case (the one running).

Source code:

MsgTestCaseStop

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "6868b026-ccdd-4f3a-8467-00b13ed60ae4"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.stop"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.stop"
}

testcoordination.testcase.verdict

Description:

Requirements: Testing Tool MUST publish event Type: Event Typical_use: Testing Tool -> GUI Description: Used to indicate to the GUI (or automated-iut) which is the final verdict of the testcase.

Source code:

MsgTestCaseVerdict

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "2e463ffd-4fab-447c-b676-dd352e66f8ff"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.verdict",
    "description": "No interoperability error was detected,",
    "objective": "Perform GET transaction(CON mode)",
    "partial_verdicts": [
        [
            "TD_COAP_CORE_01_v01_step_02",
            null,
            "CHECK postponed",
            ""
        ],
        [
            "TD_COAP_CORE_01_v01_step_03",
            null,
            "CHECK postponed",
            ""
        ],
        [
            "TD_COAP_CORE_01_v01_step_04",
            "pass",
            "VERIFY step: User informed that the information was displayed correclty on his/her IUT",
            ""
        ],
        [
            "CHECK_1_post_mortem_analysis",
            "pass",
            "<Frame   3: [bbbb::1 -> bbbb::2] CoAP [CON 43211] GET /test> Match: CoAP(type=0, code=1)"
        ],
        [
            "CHECK_2_post_mortem_analysis",
            "pass",
            "<Frame   4: [bbbb::2 -> bbbb::1] CoAP [ACK 43211] 2.05 Content > Match: CoAP(code=69, mid=0xa8cb, tok=b'', pl=Not(b''))"
        ],
        [
            "CHECK_3_post_mortem_analysis",
            "pass",
            "<Frame   4: [bbbb::2 -> bbbb::1] CoAP [ACK 43211] 2.05 Content > Match: CoAP(opt=Opt(CoAPOptionContentFormat()))"
        ]
    ],
    "state": "finished",
    "testcase_id": "TD_COAP_CORE_01_v01",
    "testcase_ref": "http://f-interop.paris.inria.fr/tests/TD_COAP_CORE_01_v01",
    "verdict": "pass"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testcase.verdict",
    "description": "No interoperability error was detected,",
    "objective": "Perform GET transaction(CON mode)",
    "partial_verdicts": [
        [
            "TD_COAP_CORE_01_v01_step_02",
            null,
            "CHECK postponed",
            ""
        ],
        [
            "TD_COAP_CORE_01_v01_step_03",
            null,
            "CHECK postponed",
            ""
        ],
        [
            "TD_COAP_CORE_01_v01_step_04",
            "pass",
            "VERIFY step: User informed that the information was displayed correclty on his/her IUT",
            ""
        ],
        [
            "CHECK_1_post_mortem_analysis",
            "pass",
            "<Frame   3: [bbbb::1 -> bbbb::2] CoAP [CON 43211] GET /test> Match: CoAP(type=0, code=1)"
        ],
        [
            "CHECK_2_post_mortem_analysis",
            "pass",
            "<Frame   4: [bbbb::2 -> bbbb::1] CoAP [ACK 43211] 2.05 Content > Match: CoAP(code=69, mid=0xa8cb, tok=b'', pl=Not(b''))"
        ],
        [
            "CHECK_3_post_mortem_analysis",
            "pass",
            "<Frame   4: [bbbb::2 -> bbbb::1] CoAP [ACK 43211] 2.05 Content > Match: CoAP(opt=Opt(CoAPOptionContentFormat()))"
        ]
    ],
    "state": "finished",
    "testcase_id": "TD_COAP_CORE_01_v01",
    "testcase_ref": "http://f-interop.paris.inria.fr/tests/TD_COAP_CORE_01_v01",
    "verdict": "pass"
}

testcoordination.testsuite.abort

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: GUI (or automated-IUT)-> Testing Tool Description: tbd

Source code:

MsgTestSuiteAbort

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "206b7e33-9277-4157-8892-09d81b7ba4b5"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.abort"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.abort"
}

testcoordination.testsuite.finish

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: GUI -> Testing Tool Description: tbd

Source code:

MsgTestSuiteFinish

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "c934b811-c004-4179-b6c4-6748a99523d3"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.finish"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.finish"
}

testcoordination.testsuite.getstatus

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Request (service) Typical_use: GUI -> Testing Tool Description: - Describes current state of the test suite. - Format for the response not standardised.

Source code:

MsgTestSuiteGetStatus

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.testcoordination.service.reply",
    "correlation_id": "a4f9e879-df81-411d-8cf9-b6bc75713e85",
    "timestamp": 1497952097,
    "message_id": "a4f9e879-df81-411d-8cf9-b6bc75713e85"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.getstatus"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.getstatus"
}

testcoordination.testsuite.getstatus.reply

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Reply (service) Typical_use: Testing Tool -> GUI Description: - Describes current state of the test suite. - Format for the response not standardised.

Source code:

MsgTestSuiteGetStatusReply

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination.service.reply
 -  -  -
Message properties: {
    "content_type": "application/json",
    "correlation_id": "1af20aaa-1a85-4e3f-8485-118c8c18bd41",
    "timestamp": 1497952097,
    "message_id": "36e0c991-69c4-4219-8d08-d02d8355a2c2"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.getstatus.reply",
    "ok": true,
    "started": true,
    "step_id": "TD_COAP_CORE_01_v01_step_01",
    "testcase_id": "TD_COAP_CORE_01_v01",
    "testcase_state": "executing"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.getstatus.reply",
    "ok": true,
    "started": true,
    "step_id": "TD_COAP_CORE_01_v01_step_01",
    "testcase_id": "TD_COAP_CORE_01_v01",
    "testcase_state": "executing"
}

testcoordination.testsuite.gettestcases

Description:

Requirements: Testing Tool SHOULD (MUST?) implement (other components should not subscribe to event) Type: Request (service) Typical_use: GUI -> Testing Tool Description: TBD

Source code:

MsgTestSuiteGetTestCases

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination.service
 -  -  -
Message properties: {
    "content_type": "application/json",
    "reply_to": "control.testcoordination.service.reply",
    "correlation_id": "d628d8c7-f5f7-4462-bf32-5cc089832a1b",
    "timestamp": 1497952097,
    "message_id": "d628d8c7-f5f7-4462-bf32-5cc089832a1b"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.gettestcases"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.gettestcases"
}

testcoordination.testsuite.gettestcases.reply

Description:

Requirements: Testing Tool SHOULD (MUST?) implement (other components should not subscribe to event) Type: Reply (service) Typical_use: Testing Tool -> GUI Description: TBD

Source code:

MsgTestSuiteGetTestCasesReply

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination.service.reply
 -  -  -
Message properties: {
    "content_type": "application/json",
    "correlation_id": "4be1e76e-145f-49cc-93f3-224ab54ff47e",
    "timestamp": 1497952097,
    "message_id": "a642aee3-0fc6-4afb-85c5-d9f82065be0d"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.gettestcases.reply",
    "ok": true,
    "tc_list": [
        {
            "objective": "Perform GET transaction(CON mode)",
            "testcase_id": "TD_COAP_CORE_01_v01",
            "state": null,
            "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_01_v01"
        },
        {
            "objective": "Perform DELETE transaction (CON mode)",
            "testcase_id": "TD_COAP_CORE_02_v01",
            "state": null,
            "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_02_v01"
        },
        {
            "objective": "Perform PUT transaction (CON mode)",
            "testcase_id": "TD_COAP_CORE_03_v01",
            "state": null,
            "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_03_v01"
        }
    ]
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.gettestcases.reply",
    "ok": true,
    "tc_list": [
        {
            "objective": "Perform GET transaction(CON mode)",
            "testcase_id": "TD_COAP_CORE_01_v01",
            "state": null,
            "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_01_v01"
        },
        {
            "objective": "Perform DELETE transaction (CON mode)",
            "testcase_id": "TD_COAP_CORE_02_v01",
            "state": null,
            "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_02_v01"
        },
        {
            "objective": "Perform PUT transaction (CON mode)",
            "testcase_id": "TD_COAP_CORE_03_v01",
            "state": null,
            "testcase_ref": "http://doc.f-interop.eu/tests/TD_COAP_CORE_03_v01"
        }
    ]
}

testcoordination.testsuite.report

Description:

Requirements: Testing Tool MUST publish event Type: Event Typical_use: Testing Tool -> GUI Description: Used to indicate to the GUI (or automated-iut) the final results of the test session.

Source code:

MsgTestSuiteReport

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "8281d798-f89a-4507-96e7-4a0964110e28"
}
 -  -  -
Message body: {
    "TD_COAP_CORE_01_v01": {
        "partial_verdicts": [
            [
                "TD_COAP_CORE_01_v01_step_02",
                null,
                "CHECK postponed",
                ""
            ],
            [
                "TD_COAP_CORE_01_v01_step_03",
                null,
                "CHECK postponed",
                ""
            ],
            [
                "TD_COAP_CORE_01_v01_step_04",
                "pass",
                "VERIFY step: User informed that the information was displayed correclty on his/her IUT",
                ""
            ],
            [
                "CHECK_1_post_mortem_analysis",
                "pass",
                "<Frame   3: [bbbb::1 -> bbbb::2] CoAP [CON 43211] GET /test> Match: CoAP(type=0, code=1)"
            ],
            [
                "CHECK_2_post_mortem_analysis",
                "pass",
                "<Frame   4: [bbbb::2 -> bbbb::1] CoAP [ACK 43211] 2.05 Content > Match: CoAP(code=69, mid=0xa8cb, tok=b'', pl=Not(b''))"
            ],
            [
                "CHECK_3_post_mortem_analysis",
                "pass",
                "<Frame   4: [bbbb::2 -> bbbb::1] CoAP [ACK 43211] 2.05 Content > Match: CoAP(opt=Opt(CoAPOptionContentFormat()))"
            ]
        ],
        "description": "No interoperability error was detected,",
        "verdict": "pass"
    },
    "TD_COAP_CORE_02_v01": {
        "partial_verdicts": [
            [
                "TD_COAP_CORE_02_v01_step_02",
                null,
                "CHECK postponed",
                ""
            ],
            [
                "TD_COAP_CORE_02_v01_step_03",
                null,
                "CHECK postponed",
                ""
            ],
            [
                "TD_COAP_CORE_02_v01_step_04",
                "pass",
                "VERIFY step: User informed that the information was displayed correclty on his/her IUT",
                ""
            ],
            [
                "CHECK_1_post_mortem_analysis",
                "pass",
                "<Frame   3: [bbbb::1 -> bbbb::2] CoAP [CON 43213] DELETE /test> Match: CoAP(type=0, code=4)"
            ],
            [
                "CHECK_2_post_mortem_analysis",
                "pass",
                "<Frame   4: [bbbb::2 -> bbbb::1] CoAP [ACK 43213] 2.02 Deleted > Match: CoAP(code=66, mid=0xa8cd, tok=b'')"
            ]
        ],
        "description": "No interoperability error was detected,",
        "verdict": "pass"
    },
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.report"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "TD_COAP_CORE_01_v01": {
        "partial_verdicts": [
            [
                "TD_COAP_CORE_01_v01_step_02",
                null,
                "CHECK postponed",
                ""
            ],
            [
                "TD_COAP_CORE_01_v01_step_03",
                null,
                "CHECK postponed",
                ""
            ],
            [
                "TD_COAP_CORE_01_v01_step_04",
                "pass",
                "VERIFY step: User informed that the information was displayed correclty on his/her IUT",
                ""
            ],
            [
                "CHECK_1_post_mortem_analysis",
                "pass",
                "<Frame   3: [bbbb::1 -> bbbb::2] CoAP [CON 43211] GET /test> Match: CoAP(type=0, code=1)"
            ],
            [
                "CHECK_2_post_mortem_analysis",
                "pass",
                "<Frame   4: [bbbb::2 -> bbbb::1] CoAP [ACK 43211] 2.05 Content > Match: CoAP(code=69, mid=0xa8cb, tok=b'', pl=Not(b''))"
            ],
            [
                "CHECK_3_post_mortem_analysis",
                "pass",
                "<Frame   4: [bbbb::2 -> bbbb::1] CoAP [ACK 43211] 2.05 Content > Match: CoAP(opt=Opt(CoAPOptionContentFormat()))"
            ]
        ],
        "description": "No interoperability error was detected,",
        "verdict": "pass"
    },
    "TD_COAP_CORE_02_v01": {
        "partial_verdicts": [
            [
                "TD_COAP_CORE_02_v01_step_02",
                null,
                "CHECK postponed",
                ""
            ],
            [
                "TD_COAP_CORE_02_v01_step_03",
                null,
                "CHECK postponed",
                ""
            ],
            [
                "TD_COAP_CORE_02_v01_step_04",
                "pass",
                "VERIFY step: User informed that the information was displayed correclty on his/her IUT",
                ""
            ],
            [
                "CHECK_1_post_mortem_analysis",
                "pass",
                "<Frame   3: [bbbb::1 -> bbbb::2] CoAP [CON 43213] DELETE /test> Match: CoAP(type=0, code=4)"
            ],
            [
                "CHECK_2_post_mortem_analysis",
                "pass",
                "<Frame   4: [bbbb::2 -> bbbb::1] CoAP [ACK 43213] 2.02 Deleted > Match: CoAP(code=66, mid=0xa8cd, tok=b'')"
            ]
        ],
        "description": "No interoperability error was detected,",
        "verdict": "pass"
    },
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.report"
}

testcoordination.testsuite.start

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: GUI -> Testing Tool Description: tbd

Source code:

MsgTestSuiteStart

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.testcoordination
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "8ea4b538-1080-4f52-9513-123526ceb8de"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.start"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testcoordination.testsuite.start"
}

testingtool.component.ready

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Event Typical_use: Any Testing tool’s component -> Test Coordinator Description: Once a testing tool’s component is ready, it should publish a compoennt ready message

Source code:

MsgTestingToolComponentReady

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.session
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "3831c718-7275-4b3d-9f94-ec287804532d"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testingtool.component.ready",
    "component": "SomeComponent",
    "message": "Component ready to start test suite."
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testingtool.component.ready",
    "component": "SomeComponent",
    "message": "Component ready to start test suite."
}

testingtool.component.shutdown

Description:

Requirements: Testing Tool SHOULD implement (other components should not subscribe to event) Type: Event Typical_use: Any Testing tool’s component -> Test Coordinator Description: tbd

Source code:

MsgTestingToolComponentShutdown

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.session
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "d36ae241-de14-435f-bf86-0aa0e3b63b5b"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testingtool.component.shutdown",
    "component": "SomeComponent",
    "message": "Component is shutting down. Bye!"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testingtool.component.shutdown",
    "component": "SomeComponent",
    "message": "Component is shutting down. Bye!"
}

testingtool.configured

Description:

Requirements: Testing Tool MUST publish event Type: Event Typical_use: Testing Tool -> Orchestrator, GUI Description: The goal is to notify orchestrator and other components that the testing tool has been configured

Source code:

MsgTestingToolConfigured

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.session
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "ac17b3fd-3131-425e-8a21-285dba4a5c92"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testingtool.configured",
    "session_id": "8ea6b6d5-ffcc-4a0e-ba93-92ee1befea23",
    "testing_tools": "f-interop/interoperability-coap"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testingtool.configured",
    "session_id": "8ea6b6d5-ffcc-4a0e-ba93-92ee1befea23",
    "testing_tools": "f-interop/interoperability-coap"
}

testingtool.ready

Description:

Requirements: Testing Tool MUST publish event Type: Event Typcal_use: Testing Tool -> GUI Description: Used to indicate to the GUI that testing is ready to start the test suite

Source code:

MsgTestingToolReady

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.session
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "af135037-5374-447e-aced-66fd4d879a51"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testingtool.ready",
    "message": "Testing tool ready to start test suite."
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testingtool.ready",
    "message": "Testing tool ready to start test suite."
}

testingtool.terminate

Description:

Requirements: Testing Tool MUST listen to event Type: Event Typical_use: GUI, (or Orchestrator) -> Testing Tool Description: Testing tool should stop all it’s processes gracefully.

Source code:

MsgTestingToolTerminate

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.session
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "9a8efac6-6bc6-4fd9-a2d7-895320303aac"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "testingtool.terminate"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "testingtool.terminate"
}

tun.start

Description:

Requirements: Testing Tool MAY implement (if IP tun needed) Type: Event Typical_use: Testing Tool -> Agent Description: Message for triggering start IP tun interface in OS where the agent is running

Source code:

MsgAgentTunStart

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.tun.toAgent.agent_TT
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "e2cc411a-18bc-462e-b9f3-48fcc33308d0"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "tun.start",
    "ipv4_host": null,
    "ipv4_netmask": null,
    "ipv4_network": null,
    "ipv6_host": ":3",
    "ipv6_no_forwarding": false,
    "ipv6_prefix": "bbbb",
    "name": "agent_TT"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "tun.start",
    "ipv4_host": null,
    "ipv4_netmask": null,
    "ipv4_network": null,
    "ipv6_host": ":3",
    "ipv6_no_forwarding": false,
    "ipv6_prefix": "bbbb",
    "name": "agent_TT"
}

tun.started

Description:

Description: Message for indicating that agent tun has been started Type: Event Typical_use: Testing Tool -> Agent Description: TBD

Source code:

MsgAgentTunStarted

  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Message routing key: control.tun.from.agent_TT
 -  -  -
Message properties: {
    "content_type": "application/json",
    "timestamp": 1497952097,
    "message_id": "59b90dce-8e43-4924-bc12-809ed889cbcf"
}
 -  -  -
Message body: {
    "_api_version": "0.1.30",
    "_type": "tun.started",
    "ipv4_host": null,
    "ipv4_netmask": null,
    "ipv4_network": null,
    "ipv6_host": ":3",
    "ipv6_no_forwarding": false,
    "ipv6_prefix": "bbbb",
    "name": "agent_TT"
}
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 {
    "_api_version": "0.1.30",
    "_type": "tun.started",
    "ipv4_host": null,
    "ipv4_netmask": null,
    "ipv4_network": null,
    "ipv6_host": ":3",
    "ipv6_no_forwarding": false,
    "ipv6_prefix": "bbbb",
    "name": "agent_TT"
}

Agent kick-off document

Objective

With this doc we expect to help people understand what the agent does, and how to deploy it.

The final objective is to create a sort of IPv6 based VPN between two computers (yes two computers, and not two networks, we are not there yet).

What can I do with that? Send any IPv6 packets from one machine to the other (both ways), e.g. ping6, CoAP ping, CoAP get, etc

Experiment setup

Screenshot

examples for the ipv6 communicating piece of software:

And for the lazy ones, just using ping6 would do..

supported OSs

Installation

  1. before anything make sure to have:

    i. if agent running on MacOs:

    install tuntap driver needed: brew install Caskroom/cask/tuntap

    ii. install python2 (needed for agent compoennt)

    iii. install python3 (needed for the packet-router component)

  2. agent:

    i. download agent code: https://gitlab.f-interop.eu/f-interop-contributors/agent

    ii. git checkout tags/agent-kickoff-tutorial

    iii. read README.md

  3. packet-router

    i. download packet-router code: https://gitlab.f-interop.eu/fsismondi/coap_testing_tool

    ii. don’t read README.md, we just need the packet router component from this repo

  4. you need a rabbit mq session (which is basically a vhost, and users with some permissions on it).

    Either:

    i. ask a f-interop developer (federico.sismondi@inria.fr) to generate one

    ii. deploy your own rabbit message broker

    iii. use orchestrator API for automatically deploying one <- simpler option if API is up and running

  5. install requirements for agent and packet-router (see requirements.txt in respective dirs)

Running the experiment

0. On both sides:

export AMQP connection variables, the correct ones!! ( see step 3)

e.g.

export AMQP_EXCHANGE='default'

export AMQP_URL="amqp://someUser:somePassword@f-interop.rennes.inria.fr/sessionXX"

1. From agent1’s side :

sudo python -m agent connect --url amqp://someUser:somePassword@f-interop.rennes.inria.fr/sessionXX --name coap_client_agent

2. From agent2’s side :

sudo python -m agent connect --url amqp://someUser:somePassword@f-interop.rennes.inria.fr/sessionXX --name coap_server_agent

3. From any side:

python3 -m coap_testing_tool.packet_router.packet_router

Note: By default packet router routes messages from ‘coap_client_agent’ to 'coap_server_agent’.

4. Send message to agents to enable the tun (from inside agent’s source directory):

` python3 -m utils.bootstrap_agent coap_client_agent bbbb :1

python3 -m utils.bootstrap_agent coap_server_agent bbbb :2 `

NOTE: if warning printed on the output of last command, then something went wrong, probably one of the agents is either not running, or using the wrong amqp params

5. Test the tun!

from coap_client_agent

ping6 bbbb::02

from coap_server_agent

ping6 bbbb::01

you can test with a coap client-server interaction!

sniff the traffic with wireshark and verify all traffic exchanged is AMQP traffic

problems running this? comments? contributions?

-> federico.sismondi@inria.fr