Skip to content

Description

Santiago Rodriguez Garcia edited this page Dec 12, 2019 · 5 revisions

The Executor module is responsible for executing the Verification and Validation tests requested by the Curator component.

It receives a test request with the associated descriptor file (Test Descriptor), a file that contains the test configurations, dependencies, validation and verification conditions, etc. With this information, this module generates a docker-compose file and executes the test sequence with the docker-compose tool.

The next picture shows an example of the translation between the test descriptor and the docker-compose.yaml file:

Td2DockerCompose

Once the test is finished, the Executor check the Validation and Verification conditions, stores the results in the VnV repository and generates a "Completion Test Response" to the Curator component.

EXECUTION_HOST

With the Release 5.1 new features, Executor has the ability to deploy probe's containers in other machines than the V&V one. If the EXECUTION_HOST is included in the test descriptor the probe's docker containers are instantiated in the provided EXECUTION_HOST using the configured NFS server to share the results files between the probes and the executor itself.

The generated docker-compose file is automatically adapted to enable the use of the NFS server.

  ...
  volumes:
    ...
    - data:/output
volumes:
  data:
    driver: local
    driver_opts:
      type: nfs
      device: :/executor/tests/c95d30dd-0cae-4d4e-a803-013ba516fc90/output
      o: addr=localhost,rw

Files and results are shared between executor and execution hosts via NFS.

VnV Executor Input Example

{
	"test": {
		"author": "Ignacio Dominguez, Felipe Vicens (ATOS), Santiago Rodríguez (OPTARE)",
		"description": "Performance test for video analysis",
		"descriptor_schema": "https://raw.githubusercontent.com/sonata-nfv/tng-schema/master/test-descriptor/testdescriptor-schema.yml",
		"name": "test-immersive-media",
		"vendor": "eu.5gtango.atos",
		"version": "0.1",
		"phases": [
			{
				"id": "setup",
				"steps": [
					{
						"action": "deploy",
						"description": "Deploying a NS",
						"name": "deployment"
					},
					{
						"action": "configure",
						"description": null,
						"name": "configuration",
						"probes": [							
							{
								"name": "parser",
								"image": "ignaciodomin/media-parser:dev",
								"description": "Parser",
								"parameters": []
							},
							{
								"description": "Content Producer Emulator (CPE) To generate a RTMP flow",
								"image": "ignaciodomin/media-cpe:plane",
								"name": "cpe",
								"parameters": [
									{
										"key": "AGGREGATOR",
										"value": "10.200.16.32"
									},
									{
										"key": "APP",
										"value": "test"
									},
									{
										"key": "STREAM",
										"value": "test"
									}
								]
							},
							{
								"description": "Content Consumer Emulator (CCE) To play HLS flows from Streaming engine",
								"image": "ignaciodomin/media-cce:dev",
								"name": "cce",
								"parameters": [
									{
										"key": "STREAMMING_ENGINE",
										"value": "10.200.16.34"
									},
									{
										"key": "STREAM",
										"value": "test"
									}
								]
							}
						]
					}
				]
			},
			{
				"id": "exercise",
				"steps": [					
					{
						"description": "Starting the CPE that simulates the camera",
						"run": "cpe",
						"entrypoint": "/app/entrypoint.sh",
						"command": "/bin/sh",
						"instances": 1,
						"output": [
							{
								"results": "logs.txt"
							}
						]
					},					
					{
						"description": "Starting the CCE that simulates the consumer",
						"run": "cce",
						"entrypoint": "/app/entrypoint.sh",
						"start_delay": 20,
						"instances": 1,
						"output": [
							{
								"results": "logs.txt"
							}
						]
					},
					{
						"description": "Starting the parser",
						"run": "parser",
						"entrypoint": "/app/entrypoint.sh",
						"instances": 1,
						"output": [
							{
								"results": "logs.txt"
							}
						],
						"dependencies": [
							"cpe",
							"cce"
						]
					}
				]
			},
			{
				"id": "verification",
				"steps": [
					{
						"name": "cpe",
						"description": "Check cpe",
						"step": "cpe",
						"conditions": [
							{
								"name": "status",
								"file": "status.txt",
								"find": "ERROR",
								"condition": "not present",
								"verdict": "pass"
							}
						]
					},
					{
						"name": "cce",
						"description": "Check cce",
						"step": "cce",
						"conditions": [
							{
								"name": "status",
								"file": "status.txt",
								"find": "ERROR",
								"condition": "not present",
								"verdict": "pass"
							}
						]
					},					
					{
						"name": "parser",
						"description": "Check obtained results",
						"step": "parser",
						"conditions": [
							{
								"name": "lost-frames",
								"file": "result.json",
								"type": "json",
								"find": "lost-frames",
								"condition": "<",
								"value": "90",
								"verdict": "pass"
							}
						]
					}
				]
			}
		],
		"service_platforms": [
			"SONATA"
		],
		"test_category": [
			"benchmarking"
		],
		"test_tags": [
			"rtmp-media-service"
		],
		"test_descriptor_uuid": "deb05341-1337-1337-1337-1c3ecd41e51d",
		"package_descriptor_uuid": "f5f1bfcc-73fc-4c7f-a102-1c5f779b8bdd",
		"network_service_descriptor_uuid": "5b02b0dd-f7dc-4a7a-919b-414582e2a678",
		"service_instance_uuid": "d54bcfb6-ab05-495a-85c7-e462fd096be9"
	},
        "service_instantiation_time": 559.1157853603363,
        "execution_host": "ip_host",
	"callbacks": [
		{
			"name": "running",
			"path": "http://tng-vnv-curator:6200/api/v1/test-preparations/97809278-42a1-4794-b0b2-f022766f35e1/change"
		},
		{
			"name": "cancel",
			"path": "http://tng-vnv-curator:6200/api/v1/test-preparations/97809278-42a1-4794-b0b2-f022766f35e1/tests/<test_uuid>/cancel"
		},
		{
			"name": "finish",
			"path": "http://tng-vnv-curator:6200/api/v1/test-preparations/97809278-42a1-4794-b0b2-f022766f35e1/tests/<test_uuid>/finish"
		}
	]
}
Clone this wiki locally