Test scenario definition
In the current release, it is possible to supply a configuration file
in JSON
format for running your tests.
In the following sections, we will provide a detailed explanation of the structure and all parameters in the JSON configuration file.
Structure
A quick short reference for the structure:
{
"server": "<bb_server_name_or_ip:str>",
"meeting_point": "<bb_meeting_point_name_or_ip:str>",
"source": {
"name": "<source_name:str>",
"interface": "<bb_interface_name:str>",
"uuid":"<endpoint_uuid:str>",
"ipv4": "<ipv4_address:str>|dhcp|true",
"netmask": "<ipv4_address:str>",
"gateway": "<ipv4_address:str>",
"nat": "<nat_resolution:bool>",
"ipv6": "dhcp|slaac|true"
},
"destination": {
"name": "<destination_name:str>",
"interface": "<bb_interface_name:str>",
"uuid":"<endpoint_uuid:str>",
"ipv4": "<ipv4_address:str>|dhcp|true",
"netmask": "<ipv4_address:str>",
"gateway": "<ipv4_address:str>",
"nat": "<nat_resolution:bool>",
"ipv6": "dhcp|slaac|true"
},
"duration": "<trial_duration:int>",
"max_iterations": "<max_iterations:int>",
"frame_configs": [
{
"size": "<frame_length:int>",
"initial_bitrate": "<initial_frame_rate:int>",
"tolerated_frame_loss": "<frame_loss:float>",
"accuracy": "<accuracy:float>",
"expected_bitrate": "<expected_frame_rate:int>"
}
]
}
JSON schema
The complete structure and documentation of the file is available in Configuration file JSON schema, and documented below.
Server
ByteBlower server address |
||
Host name or IP address of the ByteBlower Server. |
||
type |
string |
|
oneOf |
format |
hostname |
format |
ipv4 |
|
format |
ipv6 |
Meeting point
ByteBlower meeting point address |
||
Host name or IP address of the ByteBlower meeting point. |
||
Added in version 1.0.0: Support for ByteBlower Endpoint. |
||
type |
string |
|
oneOf |
format |
hostname |
format |
ipv4 |
|
format |
ipv6 |
Ports
The "source"
and "destination"
blocks define ByteBlower ports
(simulated hosts) at a given ByteBlower interface. Where a ByteBlower
interface is the physical connection on either the non-trunking interface
(direct connection at a ByteBlower server) or a trunking interface
(connection at a physical port on the ByteBlower switch).
Each port supports IPv4 address assignment using static IPv4 configuration or DHCP. IPv6 address configuration is possible through DHCPv6 or Stateless autoconfiguration (SLAAC).
When an (IPv4) port is located behind a NAT gateway, then the test framework will perform additional setup flow steps to resolve the NAT’s public IPv4 address and UDP port (when required).
Since version 1.2.0, the ByteBlower Test Framework also supports ByteBlower Endpoints. They can be configured by:
Providing the meeting point address and the UUID of the endpoint.
Setting the IPv4 or IPv6 parameter to
true
.
Configuration parameters for a ByteBlower Port or Endpoint |
||||
Configuration parameters for a ByteBlower Port or Endpoint |
||||
type |
object |
|||
properties |
||||
|
Name of this ByteBlower traffic endpoint. |
|||
(typically |
||||
type |
string |
|||
|
Name of the physical ByteBlower interface where this ByteBlower port is created. |
|||
ByteBlower Port only. Mutually exclusive with |
||||
type |
string |
|||
pattern |
^(nontrunk[-][0-9]+|trunk[-][0-9]+[-][0-9]+)$ |
|||
|
Device identifier of the ByteBlower Endpoint. |
|||
ByteBlower Endpoint only. Mutually exclusive with Note Using an Endpoint also requires the Added in version 1.0.0: Support for ByteBlower Endpoint. |
||||
type |
string |
|||
anyOf |
format |
uuid |
||
pattern |
^[0-9a-zA-Z]$ |
|||
|
List of VLAN (stack) configurations. See details in VLAN (stack) configuration. |
|||
Note Not supported by ByteBlower Endpoint. |
||||
type |
array |
|||
items |
||||
|
IPv4 addressing method |
|||
Enable IPv4 on this traffic endpoint. |
||||
Supports the following values:
Default: Note For ByteBlower Endpoint, you must specify either Changed in version 1.0.0: Support for ByteBlower Endpoint. |
||||
oneOf |
type |
string |
||
oneOf |
enum |
dhcp |
||
format |
ipv4 |
|||
type |
boolean |
|||
|
Netmask of the IPv4 network. |
|||
Default: Assigned by DHCP or Note
|
||||
type |
string |
|||
format |
ipv4 |
|||
|
(Default) Gateway of the IPv4 network. |
|||
Default: Assigned by DHCP or none for static IPv4 address configuration. Note
|
||||
type |
string |
|||
format |
ipv4 |
|||
|
Define whether this port is located behind a NAT gateway. |
|||
Defaults to Note Enabled by default for ByteBlower Endpoint. |
||||
type |
boolean |
|||
|
IPv6 addressing method |
|||
Enable IPv6 on this traffic endpoint. |
||||
Supports the following values:
Default: undefined. Note For ByteBlower Endpoint, you must specify either Changed in version 1.0.0: Support for ByteBlower Endpoint. |
||||
oneOf |
type |
string |
||
oneOf |
enum |
dhcp, slaac |
||
format |
ipv6 |
|||
type |
boolean |
VLAN (stack) configuration
type |
object |
|
properties |
||
|
VLAN protocol ID (TPID). |
|
Default value is:
Note Configuration of the VLAN protocol ID (TPID) requires ByteBlower Server version >= 2.20.0. |
||
type |
integer |
|
maximum |
65535 |
|
minimum |
0 |
|
|
VLAN ID (12-bit; 0-4095) |
|
type |
integer |
|
maximum |
4095 |
|
minimum |
0 |
|
|
3 bits defining the VLAN PCP bits. Default: 0 |
|
type |
integer |
|
maximum |
3 |
|
minimum |
0 |
|
|
1-bit flag. Default: 0 |
|
type |
integer |
|
maximum |
1 |
|
minimum |
0 |
Frame configurations
This defines a list of frame configurations for each frame size. These configurations are related to the RFC 2544 throughput test specifications.
As stated in the RFC 2544 basic requirements, at least five frame sizes SHOULD be tested for at least 60 seconds per test trial. Also, frame size with the largest MTU supported by the protocol under test SHOULD be used.
List of frame size configurations to test |
|
type |
array |
items |
type |
object |
|
properties |
||
|
Frame length in Bytes without the FCS (Frame Check Sequence, 4 Bytes) |
|
type |
integer |
|
minimum |
42 |
|
|
Initial bitrate to be used in the first trial of the RFC 2544 throughput test. |
|
type |
number |
|
exclusiveMinimum |
0 |
|
|
The maximum acceptable frame loss during the test. |
|
type |
number |
|
minimum |
0 |
|
|
Defines the test accuracy (precision) at which the test should be ended. |
|
type |
number |
|
minimum |
0 |
|
|
The expected maximum Ethernet layer 2 speed for frames without the 4 bytes of FCS. Usually, it is around the maximum theoretical speed of the tested network. |
|
type |
number |
|
minimum |
0 |
Default frames configuration
Frame configurations can be removed entirely from the configuration file.
In case no frame configuration is provided, default frame configurations
in the byteblower.test_cases.rfc_2544.definitions
module will be used.
[
{
"size": 60,
"initial_bitrate": 3e8,
"tolerated_frame_loss": 1e-3,
"expected_bitrate": 3.7e8,
"accuracy": 1e5
},
{
"size": 124,
"initial_bitrate": 6e8,
"tolerated_frame_loss": 1e-3,
"expected_bitrate": 4.5e8,
"accuracy": 1e5
},
{
"size": 252,
"initial_bitrate": 8e8,
"tolerated_frame_loss": 1e-3,
"expected_bitrate": 5.7e8,
"accuracy": 1e5
},
{
"size": 508,
"initial_bitrate": 8e8,
"tolerated_frame_loss": 1e-3,
"expected_bitrate": 6.6e8,
"accuracy": 1e5
},
{
"size": 1020,
"initial_bitrate": 1e9,
"tolerated_frame_loss": 1e-3,
"expected_bitrate": 7.15e8,
"accuracy": 1e5
},
{
"size": 1276,
"initial_bitrate": 1e9,
"tolerated_frame_loss": 1e-3,
"expected_bitrate": 7.25e8,
"accuracy": 1e5
},
{
"size": 1514,
"initial_bitrate": 1e9,
"tolerated_frame_loss": 1e-3,
"expected_bitrate": 7.35e8,
"accuracy": 1e5
}
]
These values could be used as is. However, you preferably should change these default values to comply to your network and test specifications.
Other parameters
maximum_run_time
Maximum run time of a single test trial in seconds |
|
type |
number |
exclusiveMinimum |
0 |
max_iterations
Maximum number of iteration to test per frame size |
|
type |
integer |
minimum |
1 |
Configuration file example
Using ByteBlower Ports
{ "$schema": "https://api.byteblower.com/test-framework/json/test-cases/rfc-2544/config-schema.json", "server": "byteblower-server.example.com.", "source": { "name": "Source", "interface": "nontrunk-1", "ipv4": "192.168.5.2", "netmask": "255.255.255.0", "gateway": "192.168.5.254" }, "destination": { "name": "Destination", "interface": "trunk-1", "ipv4": "dhcp", "nat": true }, "duration": 60, "max_iterations": 25, "frame_configs": [ { "size": 60, "initial_bitrate": 3e8, "tolerated_frame_loss": 1e-4, "expected_bitrate": 1.7e8, "accuracy": 1e3 }, { "size": 124, "initial_bitrate": 6e6, "tolerated_frame_loss": 1e-3, "expected_bitrate": 4.5e8, "accuracy": 1e4 }, { "size": 252, "initial_bitrate": 8e6, "tolerated_frame_loss": 1e-3, "expected_bitrate": 5.7e8, "accuracy": 1e3 }, { "size": 508, "initial_bitrate": 8e8, "tolerated_frame_loss": 1e-3, "expected_bitrate": 6.6e8, "accuracy": 1e3 }, { "size": 1020, "initial_bitrate": 1e9, "tolerated_frame_loss": 1e-3, "expected_bitrate": 7.15e8, "accuracy": 1e2 }, { "size": 1276, "initial_bitrate": 1e9, "tolerated_frame_loss": 1e-3, "expected_bitrate": 7.25e8, "accuracy": 1e2 }, { "size": 1514, "initial_bitrate": 1e9, "tolerated_frame_loss": 1e-3, "expected_bitrate": 7.35e8, "accuracy": 1e2 } ] }
Using ByteBlower Endpoint
{ "$schema": "https://api.byteblower.com/test-framework/json/test-cases/rfc-2544/config-schema.json", "server": "byteblower-server.example.com.", "meeting_point": "byteblower-meeting-point.example.com.", "source": { "name": "Source", "interface": "nontrunk-1", "ipv4": "192.168.5.2", "netmask": "255.255.255.0", "gateway": "192.168.5.254" }, "destination": { "name": "Destination", "uuid": "4d9a5fdb-32b4-4523-ace9-5972518de13b", "ipv4": true }, "duration": 60, "max_iterations": 25, "frame_configs": [ { "size": 60, "initial_bitrate": 3e6, "tolerated_frame_loss": 1e-3, "expected_bitrate": 1.7e8, "accuracy": 1e4 }, { "size": 124, "initial_bitrate": 6e6, "tolerated_frame_loss": 1e-3, "expected_bitrate": 4.5e8, "accuracy": 1e4 }, { "size": 252, "initial_bitrate": 8e6, "tolerated_frame_loss": 1e-3, "expected_bitrate": 5.7e8, "accuracy": 1e3 }, { "size": 508, "initial_bitrate": 8e8, "tolerated_frame_loss": 1e-3, "expected_bitrate": 6.6e8, "accuracy": 1e3 }, { "size": 1020, "initial_bitrate": 1e9, "tolerated_frame_loss": 1e-3, "expected_bitrate": 7.15e8, "accuracy": 1e2 }, { "size": 1276, "initial_bitrate": 1e9, "tolerated_frame_loss": 1e-3, "expected_bitrate": 7.25e8, "accuracy": 1e2 }, { "size": 1514, "initial_bitrate": 1e9, "tolerated_frame_loss": 1e-3, "expected_bitrate": 7.35e8, "accuracy": 1e2 } ] }