Remove clamp robot tests from Istanbul 60/133760/5
authorrameshiyer27 <ramesh.murugan.iyer@est.tech>
Thu, 23 Mar 2023 11:45:58 +0000 (11:45 +0000)
committerrameshiyer27 <ramesh.murugan.iyer@est.tech>
Thu, 23 Mar 2023 15:01:29 +0000 (15:01 +0000)
Clamp control loop tests in Istanbul are not relevant anymore
Added dummy script to generate result files for k8s CSIT

Issue-ID: POLICY-4541
Signed-off-by: zrrmmua <ramesh.murugan.iyer@est.tech>
Change-Id: I655701c654df9b19bf137e4b35fbe13cce98bd9c

12 files changed:
csit/clamp/plans/setup.sh
csit/clamp/plans/teardown.sh
csit/clamp/tests/data/InstantiateCL.json [deleted file]
csit/clamp/tests/data/PMSHMultipleCLTosca.yaml [deleted file]
csit/clamp/tests/data/PassivateCL.json [deleted file]
csit/clamp/tests/data/StateChangeRunningCL.json [deleted file]
csit/clamp/tests/policy-clamp-test.robot
csit/config/clamp/ClRuntimeParameters.yaml [deleted file]
csit/config/clamp/HttpParticipantParameters.yaml [deleted file]
csit/config/clamp/KubernetesParticipantParameters.yaml [deleted file]
csit/config/clamp/PolicyParticipantParameters.yaml [deleted file]
csit/run-k8s-csit.sh [new file with mode: 0755]

index 0f6141b..32bf7a7 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
 # ============LICENSE_START=======================================================
-#  Copyright (C) 2021-2022 Nordix Foundation.
+#  Copyright (C) 2021-2023 Nordix Foundation.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 #
 # SPDX-License-Identifier: Apache-2.0
 # ============LICENSE_END=========================================================
-source ${SCRIPTS}/get-branch-mariadb.sh
-
-echo "Uninstall docker-py and reinstall docker."
-python3 -m pip uninstall -y docker-py
-python3 -m pip uninstall -y docker
-python3 -m pip install -U docker
-
-sudo apt-get -y install libxml2-utils
-
-source ${SCRIPTS}/detmVers.sh
-
-docker-compose -f ${SCRIPTS}/docker-compose-all.yml up -d policy-clamp-cl-runtime
-
-sleep 300
-unset http_proxy https_proxy
-
-POLICY_CONTROLLOOP_RUNTIME_IP=`get-instance-ip.sh policy-clamp-cl-runtime`
-MARIADB_IP=$(get-instance-ip.sh mariadb)
-DMAAP_IP=$(get-instance-ip.sh simulator)
-POLICY_PARTICIPANT_IP=`get-instance-ip.sh policy-clamp-cl-pf-ppnt`
-K8S_PARTICIPANT_IP=`get-instance-ip.sh policy-clamp-cl-k8s-ppnt`
-HTTP_PARTICIPANT_IP=`get-instance-ip.sh policy-clamp-cl-http-ppnt`
-MARIADB_IP=`get-instance-ip.sh mariadb`
-DMAAP_IP=`get-instance-ip.sh simulator`
-POLICY_API_IP=`get-instance-ip.sh policy-api`
-
-echo MARIADB IP IS "${MARIADB_IP}"
-echo DMAAP_IP IS "${DMAAP_IP}"
-echo DMAAP_IP IS ${DMAAP_IP}
-echo API IP IS ${POLICY_API_IP}
-echo POLICY CONTROLLOOP RUNTIME IP IS ${POLICY_CONTROLLOOP_RUNTIME_IP}
-echo POLICY PARTICIPANT IP IS ${POLICY_PARTICIPANT_IP}
-echo K8S PARTICIPANT IP IS ${K8S_PARTICIPANT_IP}
-echo HTTP PARTICIPANT IP IS ${HTTP_PARTICIPANT_IP}
-
-# wait for the app to start up
-${SCRIPTS}/wait_for_port.sh ${POLICY_CONTROLLOOP_RUNTIME_IP} 6969
-${SCRIPTS}/wait_for_port.sh ${POLICY_API_IP} 6969
-
-ROBOT_VARIABLES=""
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v POLICY_CONTROLLOOP_RUNTIME_IP:${POLICY_CONTROLLOOP_RUNTIME_IP}"
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v POLICY_PARTICIPANT_IP:${POLICY_PARTICIPANT_IP}"
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v K8S_PARTICIPANT_IP:${K8S_PARTICIPANT_IP}"
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v HTTP_PARTICIPANT_IP:${HTTP_PARTICIPANT_IP}"
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v POLICY_API_IP:${POLICY_API_IP}"
index e0fc58e..1bc4204 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
 # ============LICENSE_START=======================================================
-#  Copyright (C) 2021 Nordix Foundation.
+#  Copyright (C) 2021,2023 Nordix Foundation.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -17,4 +17,3 @@
 # SPDX-License-Identifier: Apache-2.0
 # ============LICENSE_END=========================================================
 
-docker-compose -f ${SCRIPTS}/docker-compose-all.yml down -v
diff --git a/csit/clamp/tests/data/InstantiateCL.json b/csit/clamp/tests/data/InstantiateCL.json
deleted file mode 100644 (file)
index 46cab32..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-    "controlLoopList": [
-        {
-            "name": "PMSHInstance0",
-            "version": "1.0.1",
-            "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
-                "version": "1.2.3"
-            },
-            "state": "UNINITIALISED",
-            "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 0",
-            "elements": {
-                "709c62b3-8918-41b9-a747-d21eb79c6c21": {
-                    "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
-                    "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
-                        "version": "1.2.3"
-                    },
-                   "participantType":{
-                        "name":"org.onap.policy.controlloop.PolicyControlLoopParticipant",
-                        "version":"2.3.1"
-                    },
-                   "participantId":{
-                        "name":"org.onap.PM_Policy",
-                        "version":"1.0.0"
-                    },
-                    "state":"UNINITIALISED",
-                    "orderedState":"UNINITIALISED",
-                    "propertiesMap": {
-                        "provider_instance": {
-                            "name": "provider_instance",
-                            "version": "1.2.3",
-                            "type": "org.onap.datatypes.policy.clamp.controlloop.policControlLoopElement.Chart",
-                            "typeVersion": "1.0.0",
-                            "description": "The helm chart for the microservice",
-                            "required": true
-                        }
-                     },
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop"
-                },
-                "709c62b3-8918-41b9-a747-d21eb79c6c22": {
-                    "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
-                    "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
-                        "version": "1.2.3"
-                    },
-                   "participantType":{
-                        "name":"org.onap.policy.controlloop.PolicyControlLoopParticipant",
-                        "version":"2.3.1"
-                    },
-                   "participantId":{
-                        "name":"org.onap.PM_Policy",
-                        "version":"1.0.0"
-                    },
-                    "state":"UNINITIALISED",
-                    "orderedState":"UNINITIALISED",
-                    "propertiesMap": {
-                        "provider_instance": {
-                            "name": "provider_instance",
-                            "version": "1.2.3",
-                            "type": "org.onap.datatypes.policy.clamp.controlloop.policControlLoopElement.Chart",
-                            "typeVersion": "1.0.0",
-                            "description": "The helm chart for the microservice",
-                            "required": true
-                        }
-                     },
-                     "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop"
-                }
-            }
-        }
-    ]
-}
diff --git a/csit/clamp/tests/data/PMSHMultipleCLTosca.yaml b/csit/clamp/tests/data/PMSHMultipleCLTosca.yaml
deleted file mode 100644 (file)
index 2a68d18..0000000
+++ /dev/null
@@ -1,671 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-data_types:
-  onap.datatypes.ToscaConceptIdentifier:
-    derived_from: tosca.datatypes.Root
-    properties:
-      name:
-        type: string
-        required: true
-      version:
-        type: string
-        required: true
-  onap.datatype.controlloop.Target:
-    derived_from: tosca.datatypes.Root
-    description: Definition for a entity in A&AI to perform a control loop operation on
-    properties:
-      targetType:
-        type: string
-        description: Category for the target type
-        required: true
-        constraints:
-          - valid_values:
-              - VNF
-              - VM
-              - VFMODULE
-              - PNF
-      entityIds:
-        type: map
-        description: |
-          Map of values that identify the resource. If none are provided, it is assumed that the
-          entity that generated the ONSET event will be the target.
-        required: false
-        metadata:
-          clamp_possible_values: ClampExecution:CSAR_RESOURCES
-        entry_schema:
-          type: string
-  onap.datatype.controlloop.Actor:
-    derived_from: tosca.datatypes.Root
-    description: An actor/operation/target definition
-    properties:
-      actor:
-        type: string
-        description: The actor performing the operation.
-        required: true
-        metadata:
-          clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor
-      operation:
-        type: string
-        description: The operation the actor is performing.
-        metadata:
-          clamp_possible_values: Dictionary:DefaultOperations,ClampExecution:CDS/operation
-        required: true
-      target:
-        type: onap.datatype.controlloop.Target
-        description: The resource the operation should be performed on.
-        required: true
-      payload:
-        type: map
-        description: Name/value pairs of payload information passed by Policy to the actor
-        required: false
-        metadata:
-          clamp_possible_values: ClampExecution:CDS/payload
-        entry_schema:
-          type: string
-  onap.datatype.controlloop.Operation:
-    derived_from: tosca.datatypes.Root
-    description: An operation supported by an actor
-    properties:
-      id:
-        type: string
-        description: Unique identifier for the operation
-        required: true
-      description:
-        type: string
-        description: A user-friendly description of the intent for the operation
-        required: false
-      operation:
-        type: onap.datatype.controlloop.Actor
-        description: The definition of the operation to be performed.
-        required: true
-      timeout:
-        type: integer
-        description: The amount of time for the actor to perform the operation.
-        required: true
-      retries:
-        type: integer
-        description: The number of retries the actor should attempt to perform the operation.
-        required: true
-        default: 0
-      success:
-        type: string
-        description: Points to the operation to invoke on success. A value of "final_success" indicates and end to the operation.
-        required: false
-        default: final_success
-      failure:
-        type: string
-        description: Points to the operation to invoke on Actor operation failure.
-        required: false
-        default: final_failure
-      failure_timeout:
-        type: string
-        description: Points to the operation to invoke when the time out for the operation occurs.
-        required: false
-        default: final_failure_timeout
-      failure_retries:
-        type: string
-        description: Points to the operation to invoke when the current operation has exceeded its max retries.
-        required: false
-        default: final_failure_retries
-      failure_exception:
-        type: string
-        description: Points to the operation to invoke when the current operation causes an exception.
-        required: false
-        default: final_failure_exception
-      failure_guard:
-        type: string
-        description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.
-        required: false
-        default: final_failure_guard
-  onap.datatypes.monitoring.managedObjectDNsBasic:
-    constraints: []
-    properties:
-      DN:
-        name: DN
-        type: string
-        typeVersion: 0.0.0
-        description: Managed object distinguished name
-        required: true
-        constraints: []
-        metadata: {}
-    name: onap.datatypes.monitoring.managedObjectDNsBasic
-    version: 0.0.0
-    derived_from: tosca.datatypes.Root
-    metadata: {}
-  onap.datatypes.monitoring.managedObjectDNsBasics:
-    constraints: []
-    properties:
-      managedObjectDNsBasic:
-        name: managedObjectDNsBasic
-        type: map
-        typeVersion: 0.0.0
-        description: Managed object distinguished name object
-        required: true
-        constraints: []
-        entry_schema:
-          type: onap.datatypes.monitoring.managedObjectDNsBasic
-          typeVersion: 0.0.0
-          constraints: []
-        metadata: {}
-    name: onap.datatypes.monitoring.managedObjectDNsBasics
-    version: 0.0.0
-    derived_from: tosca.datatypes.Root
-    metadata: {}
-  onap.datatypes.monitoring.measurementGroup:
-    constraints: []
-    properties:
-      measurementTypes:
-        name: measurementTypes
-        type: list
-        typeVersion: 0.0.0
-        description: List of measurement types
-        required: true
-        constraints: []
-        entry_schema:
-          type: onap.datatypes.monitoring.measurementTypes
-          typeVersion: 0.0.0
-          constraints: []
-        metadata: {}
-      managedObjectDNsBasic:
-        name: managedObjectDNsBasic
-        type: list
-        typeVersion: 0.0.0
-        description: List of managed object distinguished names
-        required: true
-        constraints: []
-        entry_schema:
-          type: onap.datatypes.monitoring.managedObjectDNsBasics
-          typeVersion: 0.0.0
-          constraints: []
-        metadata: {}
-    name: onap.datatypes.monitoring.measurementGroup
-    version: 0.0.0
-    derived_from: tosca.datatypes.Root
-    metadata: {}
-  onap.datatypes.monitoring.measurementGroups:
-    constraints: []
-    properties:
-      measurementGroup:
-        name: measurementGroup
-        type: map
-        typeVersion: 0.0.0
-        description: Measurement Group
-        required: true
-        constraints: []
-        entry_schema:
-          type: onap.datatypes.monitoring.measurementGroup
-          typeVersion: 0.0.0
-          constraints: []
-        metadata: {}
-    name: onap.datatypes.monitoring.measurementGroups
-    version: 0.0.0
-    derived_from: tosca.datatypes.Root
-    metadata: {}
-  onap.datatypes.monitoring.measurementType:
-    constraints: []
-    properties:
-      measurementType:
-        name: measurementType
-        type: string
-        typeVersion: 0.0.0
-        description: Measurement type
-        required: true
-        constraints: []
-        metadata: {}
-    name: onap.datatypes.monitoring.measurementType
-    version: 0.0.0
-    derived_from: tosca.datatypes.Root
-    metadata: {}
-  onap.datatypes.monitoring.measurementTypes:
-    constraints: []
-    properties:
-      measurementType:
-        name: measurementType
-        type: map
-        typeVersion: 0.0.0
-        description: Measurement type object
-        required: true
-        constraints: []
-        entry_schema:
-          type: onap.datatypes.monitoring.measurementType
-          typeVersion: 0.0.0
-          constraints: []
-        metadata: {}
-    name: onap.datatypes.monitoring.measurementTypes
-    version: 0.0.0
-    derived_from: tosca.datatypes.Root
-    metadata: {}
-  onap.datatypes.monitoring.nfFilter:
-    constraints: []
-    properties:
-      modelNames:
-        name: modelNames
-        type: list
-        typeVersion: 0.0.0
-        description: List of model names
-        required: true
-        constraints: []
-        entry_schema:
-          type: string
-          typeVersion: 0.0.0
-          constraints: []
-        metadata: {}
-      modelInvariantIDs:
-        name: modelInvariantIDs
-        type: list
-        typeVersion: 0.0.0
-        description: List of model invariant IDs
-        required: true
-        constraints: []
-        entry_schema:
-          type: string
-          typeVersion: 0.0.0
-          constraints: []
-        metadata: {}
-      modelVersionIDs:
-        name: modelVersionIDs
-        type: list
-        typeVersion: 0.0.0
-        description: List of model version IDs
-        required: true
-        constraints: []
-        entry_schema:
-          type: string
-          typeVersion: 0.0.0
-          constraints: []
-        metadata: {}
-      nfNames:
-        name: nfNames
-        type: list
-        typeVersion: 0.0.0
-        description: List of network functions
-        required: true
-        constraints: []
-        entry_schema:
-          type: string
-          typeVersion: 0.0.0
-          constraints: []
-        metadata: {}
-    name: onap.datatypes.monitoring.nfFilter
-    version: 0.0.0
-    derived_from: tosca.datatypes.Root
-    metadata: {}
-  onap.datatypes.monitoring.subscription:
-    constraints: []
-    properties:
-      measurementGroups:
-        name: measurementGroups
-        type: list
-        typeVersion: 0.0.0
-        description: Measurement Groups
-        required: true
-        constraints: []
-        entry_schema:
-          type: onap.datatypes.monitoring.measurementGroups
-          typeVersion: 0.0.0
-          constraints: []
-        metadata: {}
-      fileBasedGP:
-        name: fileBasedGP
-        type: integer
-        typeVersion: 0.0.0
-        description: File based granularity period
-        required: true
-        constraints: []
-        metadata: {}
-      fileLocation:
-        name: fileLocation
-        type: string
-        typeVersion: 0.0.0
-        description: ROP file location
-        required: true
-        constraints: []
-        metadata: {}
-      subscriptionName:
-        name: subscriptionName
-        type: string
-        typeVersion: 0.0.0
-        description: Name of the subscription
-        required: true
-        constraints: []
-        metadata: {}
-      administrativeState:
-        name: administrativeState
-        type: string
-        typeVersion: 0.0.0
-        description: State of the subscription
-        required: true
-        constraints:
-          - valid_values:
-              - LOCKED
-              - UNLOCKED
-        metadata: {}
-      nfFilter:
-        name: nfFilter
-        type: map
-        typeVersion: 0.0.0
-        description: Network function filter
-        required: true
-        constraints: []
-        entry_schema:
-          type: onap.datatypes.monitoring.nfFilter
-          typeVersion: 0.0.0
-          constraints: []
-        metadata: {}
-    name: onap.datatypes.monitoring.subscription
-    version: 0.0.0
-    derived_from: tosca.datatypes.Root
-    metadata: {}
-policy_types:
-  onap.policies.Monitoring:
-    derived_from: tosca.policies.Root
-    description: a base policy type for all policies that govern monitoring provisioning
-    version: 1.0.0
-    name: onap.policies.Monitoring
-  onap.policies.TestPolicy:
-    derived_from: tosca.policies.Root
-    description: a base policy type for all policies that govern monitoring provisioning
-    version: 1.0.0
-    name: onap.policies.TestPolicy
-  onap.policies.monitoring.dcae-pm-subscription-handler:
-    properties:
-      pmsh_policy:
-        name: pmsh_policy
-        type: onap.datatypes.monitoring.subscription
-        typeVersion: 0.0.0
-        description: PMSH Policy JSON
-        required: false
-        constraints: []
-        metadata: {}
-    name: onap.policies.monitoring.dcae-pm-subscription-handler
-    version: 1.0.0
-    derived_from: onap.policies.Monitoring
-    metadata: {}
-node_types:
-  org.onap.policy.clamp.controlloop.Participant:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        requred: false
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        required: false
-        metadata:
-          common: true
-        description: Specifies the organization that provides the control loop element
-      participantType:
-        type: onap.datatypes.ToscaConceptIdentifier
-        required: true
-        metadata:
-          common: true
-        description: The identity of the participant type that hosts this type of Control Loop Element
-      startPhase:
-        type: integer
-        required: false
-        constraints:
-          - greater_or_equal: 0
-        metadata:
-          common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-          first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-          in reverse start phase order. Control Loop Elements with the same start phase are started and
-          stopped simultaneously
-      uninitializedToPassiveTimeout:
-        type: integer
-        required: false
-        constraints:
-          - greater_or_equal: 0
-        default: 60
-        metadata:
-          common: true
-        description: The maximum time in seconds to wait for a state chage from uninitialized to passive
-      passiveToRunningTimeout:
-        type: integer
-        required: false
-        constraints:
-          - greater_or_equal: 0
-        default: 60
-        metadata:
-          common: true
-        description: The maximum time in seconds to wait for a state chage from passive to running
-      runningToPassiveTimeout:
-        type: integer
-        required: false
-        constraints:
-          - greater_or_equal: 0
-        default: 60
-        metadata:
-          common: true
-        description: The maximum time in seconds to wait for a state chage from running to passive
-      passiveToUninitializedTimeout:
-        type: integer
-        required: false
-        constraints:
-          - greater_or_equal: 0
-        default: 60
-        metadata:
-          common: true
-        description: The maximum time in seconds to wait for a state chage from passive to uninitialized
-  org.onap.policy.clamp.controlloop.ControlLoop:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        required: false
-        metadata:
-          common: true
-        description: Specifies the organization that provides the control loop element
-      elements:
-        type: list
-        required: true
-        metadata:
-          common: true
-        entry_schema:
-          type: onap.datatypes.ToscaConceptIdentifier
-        description: Specifies a list of control loop element definitions that make up this control loop definition
-  org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
-    properties:
-      dcae_blueprint_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: false
-      dcae_blueprint:
-        type: onap.dcae.cloudify_blueprint
-        requred: false
-      consul_info:
-        type: list
-        required: false
-        entry_schema:
-          type: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo
-  org.onap.policy.clamp.controlloop.PolicyControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
-    properties:
-      policy_type_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-      policy_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: false
-  org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
-    properties:
-      policy_type_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-      policy_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: false
-  org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement
-    properties:
-      policy_type_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-      policy_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: false
-  org.onap.policy.clamp.controlloop.CDSControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
-    properties:
-      cds_blueprint_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-topology_template:
-  inputs:
-    pmsh_monitoring_policy:
-      type: onap.datatypes.ToscaConceptIdentifier
-      description: The ID of the PMSH monitoring policy to use
-      default:
-        name: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test
-        version: 1.0.0
-    pmsh_operational_policy:
-      type: onap.datatypes.ToscaConceptIdentifier
-      description: The ID of the PMSH operational policy to use
-      default:
-        name: operational.apex.pmcontrol
-        version: 1.0.0
-  node_templates:
-    org.onap.policy.controlloop.PolicyControlLoopParticipant:
-      version: 2.3.1
-      type: org.onap.policy.clamp.controlloop.Participant
-      type_version: 1.0.1
-      description: Participant for DCAE microservices
-      properties:
-        provider: ONAP
-    org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for the monitoring policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
-          version: 2.3.1
-        policy_type_id:
-          name: onap.policies.monitoring.pm-subscription-handler
-          version: 1.0.0
-        policy_id:
-          get_input: pmsh_monitoring_policy
-    org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for the operational policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
-          version: 2.3.1
-        policy_type_id:
-          name: onap.policies.operational.pm-subscription-handler
-          version: 1.0.0
-        policy_id:
-          get_input: pmsh_operational_policy
-    org.onap.domain.pmsh.DerivedPolicyControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement
-      type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        elements:
-          - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
-            version: 1.2.3
-    org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement
-      type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson Software Technologies
-        elements:
-          - name: org.onap.domain.pmsh.PMSH_DerivedTestMicroservice
-            version: 1.2.3
-    org.onap.domain.pmsh.PMSHControlLoopDefinition:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
-      type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        elements:
-          - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
-            version: 1.2.3
-  policies:
-    - MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test:
-        type: onap.policies.monitoring.dcae-pm-subscription-handler
-        type_version: 1.0.0
-        name: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test
-        version: 1.0.0
-        metadata:
-          policy-id: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test
-          policy-version: 1.0.0
-        properties:
-          pmsh_policy:
-            fileBasedGP: 15
-            fileLocation: /pm/pm.xml
-            subscriptionName: subscriptiona
-            administrativeState: UNLOCKED
-            nfFilter:
-              onap.datatypes.monitoring.nfFilter:
-                modelVersionIDs:
-                  - e80a6ae3-cafd-4d24-850d-e14c084a5ca9
-                modelInvariantIDs:
-                  - 5845y423-g654-6fju-po78-8n53154532k6
-                  - 7129e420-d396-4efb-af02-6b83499b12f8
-                modelNames: []
-                nfNames:
-                  - '"^pnf1.*"'
-            measurementGroups:
-              - measurementGroup:
-                  onap.datatypes.monitoring.measurementGroup:
-                    measurementTypes:
-                      - measurementType:
-                          onap.datatypes.monitoring.measurementType:
-                            measurementType: countera
-                      - measurementType:
-                          onap.datatypes.monitoring.measurementType:
-                            measurementType: counterb
-                    managedObjectDNsBasic:
-                      - managedObjectDNsBasic:
-                          onap.datatypes.monitoring.managedObjectDNsBasic:
-                            DN: dna
-                      - managedObjectDNsBasic:
-                          onap.datatypes.monitoring.managedObjectDNsBasic:
-                            DN: dnb
-              - measurementGroup:
-                  onap.datatypes.monitoring.measurementGroup:
-                    measurementTypes:
-                      - measurementType:
-                          onap.datatypes.monitoring.measurementType:
-                            measurementType: counterc
-                      - measurementType:
-                          onap.datatypes.monitoring.measurementType:
-                            measurementType: counterd
-                    managedObjectDNsBasic:
-                      - managedObjectDNsBasic:
-                          onap.datatypes.monitoring.managedObjectDNsBasic:
-                            DN: dnc
-                      - managedObjectDNsBasic:
-                          onap.datatypes.monitoring.managedObjectDNsBasic:
-                            DN: dnd
diff --git a/csit/clamp/tests/data/PassivateCL.json b/csit/clamp/tests/data/PassivateCL.json
deleted file mode 100644 (file)
index 472d5f4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "orderedState": "PASSIVE",
-    "controlLoopIdentifierList": [
-        {
-            "name": "PMSHInstance0",
-            "version": "1.0.1"
-        }
-    ]
-}
diff --git a/csit/clamp/tests/data/StateChangeRunningCL.json b/csit/clamp/tests/data/StateChangeRunningCL.json
deleted file mode 100644 (file)
index bbba0b1..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "orderedState": "RUNNING",
-    "controlLoopIdentifierList": [
-        {
-            "name": "PMSHInstance0",
-            "version": "1.0.1"
-        }
-    ]
-}
index bb590f5..58c31fa 100644 (file)
@@ -1,82 +1,4 @@
-*** Settings ***
-Library     Collections
-Library     RequestsLibrary
-Library     OperatingSystem
-Library     json
-
 *** Test Cases ***
 
-CommissionControlLoopV1
-     [Documentation]  Commission control loop.
-     ${auth}=    Create List    healthcheck    zb!XztG34
-     Log    Creating session http://${POLICY_CONTROLLOOP_RUNTIME_IP}:6969
-     ${postyaml}=  Get file  ${CURDIR}/data/PMSHMultipleCLTosca.yaml
-     ${session}=    Create Session      policy  http://${POLICY_CONTROLLOOP_RUNTIME_IP}:6969   auth=${auth}
-     ${headers}=  Create Dictionary     Accept=application/yaml    Content-Type=application/yaml
-     ${resp}=   POST On Session     policy  /onap/controlloop/v2/commission   data=${postyaml}  headers=${headers}
-     Log    Received response from controlloop runtime ${resp.text}
-     Should Be Equal As Strings    ${resp.status_code}     200
-
-InstantiateControlLoopV1
-     [Documentation]  Instantiate control loop.
-     ${auth}=    Create List    healthcheck    zb!XztG34
-     Log    Creating session http://${POLICY_CONTROLLOOP_RUNTIME_IP}:6969
-     ${postjson}=  Get file  ${CURDIR}/data/InstantiateCL.json
-     ${session}=    Create Session      policy  http://${POLICY_CONTROLLOOP_RUNTIME_IP}:6969   auth=${auth}
-     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
-     ${resp}=   POST On Session     policy  /onap/controlloop/v2/instantiation   data=${postjson}  headers=${headers}
-     Log    Received response from controlloop runtime ${resp.text}
-     Should Be Equal As Strings    ${resp.status_code}     200
-
-PassivateControlLoop
-     [Documentation]  Passivate control loop.
-     ${auth}=    Create List    healthcheck    zb!XztG34
-     Log    Creating session http://${POLICY_CONTROLLOOP_RUNTIME_IP}:6969
-     ${postjson}=  Get file  ${CURDIR}/data/PassivateCL.json
-     ${session}=    Create Session      policy  http://${POLICY_CONTROLLOOP_RUNTIME_IP}:6969   auth=${auth}
-     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
-     ${resp}=   PUT On Session     policy  /onap/controlloop/v2/instantiation/command   data=${postjson}  headers=${headers}
-     Log    Received response from controlloop runtime ${resp.text}
-     Should Be Equal As Strings    ${resp.status_code}     202
-
-QueryPolicies
-     [Documentation]    Runs Policy Participant Query New Policies
-     ${auth}=    Create List    healthcheck    zb!XztG34
-     Log    Creating session http://${POLICY_API_IP}:6969
-     ${session}=    Create Session      policy  http://${POLICY_API_IP}:6969   auth=${auth}
-     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
-     ${resp}=   GET On Session     policy  /policy/api/v1/policies     headers=${headers}
-     Log    Received response from policy-api {resp.text}
-     Should Be Equal As Strings    ${resp.status_code}     200
-
-QueryPolicyTypes
-     [Documentation]    Runs Policy Participant Query New Policy Types
-     ${auth}=    Create List    healthcheck    zb!XztG34
-     Log    Creating session http://${POLICY_API_IP}:6969
-     ${session}=    Create Session      policy  http://${POLICY_API_IP}:6969   auth=${auth}
-     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
-     ${resp}=   GET On Session     policy  /policy/api/v1/policytypes     headers=${headers}
-     Log    Received response from policy-api ${resp.text}
-     Should Be Equal As Strings    ${resp.status_code}     200
-
-StateChangeRunningControlLoop
-     [Documentation]  ControlLoop State Change to RUNNING.
-     ${auth}=    Create List    healthcheck    zb!XztG34
-     Log    Creating session http://${POLICY_CONTROLLOOP_RUNTIME_IP}:6969
-     ${postjson}=  Get file  ${CURDIR}/data/StateChangeRunningCL.json
-     ${session}=    Create Session      policy  http://${POLICY_CONTROLLOOP_RUNTIME_IP}:6969   auth=${auth}
-     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
-     ${resp}=   PUT On Session     policy  /onap/controlloop/v2/instantiation/command   data=${postjson}  headers=${headers}  expected_status=406
-     Log    Received response from controlloop runtime ${resp.text}
-
-QueryInstantiatedCLs
-     [Documentation]    Get Instantiated ControlLoops
-     ${auth}=    Create List    healthcheck    zb!XztG34
-     Log    Creating session http://${POLICY_CONTROLLOOP_RUNTIME_IP}:6969
-     ${session}=    Create Session      policy  http://${POLICY_CONTROLLOOP_RUNTIME_IP}:6969   auth=${auth}
-     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
-     ${resp}=   GET On Session     policy  /onap/controlloop/v2/instantiation     headers=${headers}
-     Log    Received response from controlloop runtime ${resp.text}
-     Should Be Equal As Strings    ${resp.status_code}     200
-     Should Be Equal As Strings  ${resp.json()['controlLoopList'][0]['state']}  UNINITIALISED2PASSIVE
-     Should Be Equal As Strings  ${resp.json()['controlLoopList'][0]['orderedState']}  RUNNING
+Dummy CLAMP Istanbul Robot Test
+    Log To Console           Dummy CLAMP Robot tests for Istanbul
diff --git a/csit/config/clamp/ClRuntimeParameters.yaml b/csit/config/clamp/ClRuntimeParameters.yaml
deleted file mode 100644 (file)
index 170fe72..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-spring:
-  security:
-    user:
-      name: healthcheck
-      password: zb!XztG34
-  http:
-    converters:
-      preferred-json-mapper: gson
-
-security:
-  enable-csrf: false
-
-server:
-  port: 6969
-  servlet:
-    context-path: /onap/controlloop
-  error:
-    path: /error
-  ssl:
-    enabled: false
-
-runtime:
-  supervisionScannerIntervalSec: 1000
-  participantClUpdateIntervalSec: 1000
-  participantClStateChangeIntervalSec: 1000
-  participantParameters:
-    heartBeatMs: 20000
-    maxStatusWaitMs: 100000
-    updateParameters:
-      maxRetryCount: 3
-      maxWaitMs: 20000
-  databaseProviderParameters:
-    name: PolicyProviderParameterGroup
-    implementation: org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl
-    databaseDriver: org.mariadb.jdbc.Driver
-    databaseUrl: jdbc:mariadb://${mariadb.host:mariadb}:${mariadb.port:3306}/controlloop
-    databaseUser: policy_user
-    databasePassword: policy_user
-    persistenceUnit: CommissioningMariaDb
-  topicParameterGroup:
-    topicSources:
-      -
-        topic: POLICY-CLRUNTIME-PARTICIPANT
-        servers:
-          - ${topicServer:message-router}
-        topicCommInfrastructure: dmaap
-        fetchTimeout: 15000
-        useHttps: false
-    topicSinks:
-      -
-        topic: POLICY-CLRUNTIME-PARTICIPANT
-        servers:
-          - ${topicServer:message-router}
-        topicCommInfrastructure: dmaap
-        useHttps: false
-
-management:
-  endpoints:
-    web:
-      exposure:
-        include: health, metrics, prometheus
diff --git a/csit/config/clamp/HttpParticipantParameters.yaml b/csit/config/clamp/HttpParticipantParameters.yaml
deleted file mode 100644 (file)
index 609fc7e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-participant:
-  intermediaryParameters:
-    reportingTimeIntervalMs: 120000
-    description: Participant Description
-    participantId:
-      name: HttpParticipant0
-      version: 1.0.0
-    participantType:
-      name: org.onap.k8s.controlloop.HttpControlLoopParticipant
-      version: 2.3.4
-    clampControlLoopTopics:
-      topicSources:
-        - topic: POLICY-CLRUNTIME-PARTICIPANT
-          servers:
-            - ${topicServer:message-router}
-          topicCommInfrastructure: dmaap
-          fetchTimeout: 15000
-          useHttps: false
-      topicSinks:
-        - topic: POLICY-CLRUNTIME-PARTICIPANT
-          servers:
-            - ${topicServer:message-router}
-          topicCommInfrastructure: dmaap
-          useHttps: false
-
-server:
-  ssl:
-    enabled: false
-          
\ No newline at end of file
diff --git a/csit/config/clamp/KubernetesParticipantParameters.yaml b/csit/config/clamp/KubernetesParticipantParameters.yaml
deleted file mode 100644 (file)
index 76b8d76..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-spring:
-  security:
-    user:
-      name: healthcheck
-      password: zb!XztG34
-security:
-  enable-csrf: false
-
-participant:
-  localChartDirectory: /home/policy/local-charts
-  infoFileName: CHART_INFO.json
-  intermediaryParameters:
-    reportingTimeIntervalMs: 120000
-    description: Participant Description
-    participantId:
-      name: K8sParticipant0
-      version: 1.0.0
-    participantType:
-      name: org.onap.k8s.controlloop.K8SControlLoopParticipant
-      version: 2.3.4
-    clampControlLoopTopics:
-      topicSources:
-        -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
-          servers:
-            - ${topicServer:message-router}
-          topicCommInfrastructure: dmaap
-          fetchTimeout: 15000
-          useHttps: false
-      topicSinks:
-        -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
-          servers:
-            - ${topicServer:message-router}
-          topicCommInfrastructure: dmaap
-          useHttps: false
-
-management:
-  endpoints:
-    web:
-      exposure:
-        include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
-
-server:
-  # Configuration of the HTTP/REST server. The parameters are defined and handled by the springboot framework.
-  # See springboot documentation.
-  port: 8083
-  servlet:
-    context-path: /onap/k8sparticipant
-  ssl:
-    enabled: false
-
-logging:
-  # Configuration of logging
-  level:
-    ROOT: INFO
-    org.springframework: ERROR
-    org.springframework.data: ERROR
-    org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
-  file:
-    name: /var/log/onap/policy/clamp/application.log
diff --git a/csit/config/clamp/PolicyParticipantParameters.yaml b/csit/config/clamp/PolicyParticipantParameters.yaml
deleted file mode 100644 (file)
index f490538..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-participant:
-  pdpGroup: defaultGroup
-  pdpType: apex
-  policyApiParameters:
-    clientName: api
-    hostname: policy-api
-    port: 6969
-    userName: healthcheck
-    password: zb!XztG34
-    useHttps: false
-    allowSelfSignedCerts: true
-  policyPapParameters:
-    clientName: pap
-    hostname: policy-pap
-    port: 6969
-    userName: healthcheck
-    password: zb!XztG34
-    useHttps: false
-    allowSelfSignedCerts: true
-  intermediaryParameters:
-    reportingTimeIntervalMs: 120000
-    description: Participant Description
-    participantId:
-      name: org.onap.PM_Policy
-      version: 1.0.0
-    participantType:
-      name: org.onap.policy.controlloop.PolicyControlLoopParticipant
-      version: 2.3.1
-    clampControlLoopTopics:
-      topicSources:
-        -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
-          servers:
-            - ${topicServer:message-router}
-          topicCommInfrastructure: dmaap
-          fetchTimeout: 15000
-          useHttps: false
-      topicSinks:
-        -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
-          servers:
-            - ${topicServer:message-router}
-          topicCommInfrastructure: dmaap
-          useHttps: false
-
-server:
-  ssl:
-    enabled: false
-          
\ No newline at end of file
diff --git a/csit/run-k8s-csit.sh b/csit/run-k8s-csit.sh
new file mode 100755 (executable)
index 0000000..79da27c
--- /dev/null
@@ -0,0 +1,442 @@
+#!/bin/bash
+#
+# ============LICENSE_START====================================================
+#  Copyright (C) 2023 Nordix Foundation.
+# =============================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END======================================================
+
+# This script generates dummy robot result files for jenkins since k8s CSIT is not supported.
+
+if [ -z "${WORKSPACE}" ]; then
+    WORKSPACE=$(git rev-parse --show-toplevel)
+    export WORKSPACE
+fi
+
+export ROBOT_LOG_DIR=${WORKSPACE}/csit/archives/$2
+
+mkdir -p $ROBOT_LOG_DIR
+
+echo "This version of policy does not support CSIT in kubernetes. Generating dummy results..."
+
+cat >${ROBOT_LOG_DIR}/output.xml <<EOF
+<robot generator="Robot 6.1a1 (Python 3.11.2 on linux)" rpa="false" schemaversion="4">
+<statistics>
+<total>
+<stat pass="1" fail="0" skip="0">All Tests</stat>
+</total>
+<tag>
+</tag>
+<suite>
+<stat pass="1" fail="0" skip="0" id="s1" name="Dummy-Test">Dummy-Test</stat>
+</suite>
+</statistics>
+<errors></errors>
+</robot>
+EOF
+
+cat >${ROBOT_LOG_DIR}/log.html <<EOF
+<!DOCTYPE html>
+<head>
+    <style media="all" type="text/css">
+        /* Generic and misc styles */
+        body {
+            font-family: Helvetica, sans-serif;
+            font-size: 0.8em;
+            color: black;
+            padding: 6px;
+            background: white;
+        }
+        table {
+            table-layout: fixed;
+            word-wrap: break-word;
+            empty-cells: show;
+            font-size: 1em;
+        }
+        th, td {
+            vertical-align: top;
+        }
+        br {
+            mso-data-placement: same-cell; /* maintain line breaks in Excel */
+        }
+        hr {
+            background: #ccc;
+            height: 1px;
+            border: 0;
+        }
+        a, a:link, a:visited {
+            text-decoration: none;
+            color: #15c;
+        }
+        a > img {
+            border: 1px solid #15c !important;
+        }
+        a:hover, a:active {
+            text-decoration: underline;
+            color: #61c;
+        }
+        .parent-name {
+            font-size: 0.7em;
+            letter-spacing: -0.07em;
+        }
+        .message {
+            white-space: pre-wrap;
+        }
+        /* Headers */
+        #header {
+            width: 65em;
+            height: 3em;
+            margin: 6px 0;
+        }
+        h1 {
+            float: left;
+            margin: 0 0 0.5em 0;
+            width: 75%;
+        }
+        h2 {
+            clear: left;
+        }
+        #generated {
+            float: right;
+            text-align: right;
+            font-size: 0.9em;
+            white-space: nowrap;
+        }
+        /* Documentation headers */
+        .doc > h2 {
+            font-size: 1.2em;
+        }
+        .doc > h3 {
+            font-size: 1.1em;
+        }
+        .doc > h4 {
+            font-size: 1.0em;
+        }
+        /* Status text colors -- !important allows using them in links */
+        .fail {
+            color: #ce3e01 !important;
+            font-weight: bold;
+        }
+        .pass {
+            color: #098a09 !important;
+        }
+        .skip {
+            color: #927201 !important;
+            font-weight: bold;
+        }
+        .label {
+            padding: 2px 5px;
+            font-size: 0.75em;
+            letter-spacing: 1px;
+            white-space: nowrap;
+            color: black;
+            background-color: #ddd;
+            border-radius: 3px;
+        }
+        .label.debug, .label.trace, .label.error, .label.keyword {
+            letter-spacing: 0;
+        }
+        .label.pass, .label.fail, .label.error, .label.skip, .label.warn {
+            font-weight: bold;
+        }
+        .label.pass {
+            background-color: #97bd61;
+            color: #000 !important;
+        }
+        .label.fail, .label.error {
+            background-color: #ce3e01;
+            color: #fff !important;
+        }
+        .label.skip, .label.warn {
+            background-color: #fed84f;
+            color: #000 !important;
+        }
+        /* Top right header */
+        #top-right-header {
+            position: fixed;
+            top: 0;
+            right: 0;
+            z-index: 1000;
+            width: 12em;
+            text-align: center;
+        }
+        #report-or-log-link a {
+            display: block;
+            background: black;
+            color: white;
+            text-decoration: none;
+            font-weight: bold;
+            letter-spacing: 0.1em;
+            padding: 0.3em 0;
+            border-bottom-left-radius: 4px;
+        }
+        #report-or-log-link a:hover {
+            color: #ddd;
+        }
+        #log-level-selector {
+            padding: 0.3em 0;
+            font-size: 0.9em;
+            border-bottom-left-radius: 4px;
+            background: #ddd;
+        }
+        /* Statistics table */
+        .statistics {
+            width: 65em;
+            border-collapse: collapse;
+            empty-cells: show;
+            margin-bottom: 1em;
+        }
+        .statistics tr:hover {
+            background: #f4f4f4;
+            cursor: pointer;
+        }
+        .statistics th, .statistics td {
+            border: 1px solid #ccc;
+            padding: 0.1em 0.3em;
+        }
+        .statistics th {
+            background-color: #ddd;
+            padding: 0.2em 0.3em;
+        }
+        .statistics td {
+            vertical-align: middle;
+        }
+        .stats-col-stat {
+            width: 4.5em;
+            text-align: center;
+        }
+        .stats-col-elapsed {
+            width: 5.5em;
+            text-align: center;
+        }
+        .stats-col-graph {
+            width: 9em;
+        }
+        th.stats-col-graph:hover {
+            cursor: default;
+        }
+        .stat-name {
+            float: left;
+        }
+        .stat-name a, .stat-name span {
+            font-weight: bold;
+        }
+        .tag-links {
+            font-size: 0.9em;
+            float: right;
+            margin-top: 0.05em;
+        }
+        .tag-links span {
+            margin-left: 0.2em;
+        }
+        /* Statistics graph */
+        .graph, .empty-graph {
+            border: 1px solid #ccc;
+            width: auto;
+            height: 7px;
+            padding: 0;
+            background: #aaa;
+        }
+        .empty-graph {
+            background: #eee;
+        }
+        .pass-bar, .fail-bar, .skip-bar {
+            float: left;
+            height: 100%;
+        }
+        .fail-bar {
+            background: #ce3e01;
+        }
+        .pass-bar {
+            background: #97bd61;
+        }
+        .skip-bar {
+            background: #fed84f;
+        }
+        /* Tablesorter - adapted from provided Blue Skin */
+        .tablesorter-header {
+            background-image: url(data:image/gif;base64,R0lGODlhCwAJAIAAAH9/fwAAACH5BAEAAAEALAAAAAALAAkAAAIRjAOnBr3cnIr0WUjTrC9e9BQAOw==);
+            background-repeat: no-repeat;
+            background-position: center right;
+            cursor: pointer;
+        }
+        .tablesorter-header:hover {
+            background-color: #ccc;
+        }
+        .tablesorter-headerAsc {
+            background-image: url(data:image/gif;base64,R0lGODlhCwAJAKEAAAAAAH9/fwAAAAAAACH5BAEAAAIALAAAAAALAAkAAAIUlBWnFr3cnIr0WQOyBmvzp13CpxQAOw==);
+            background-color: #ccc !important;
+        }
+        .tablesorter-headerDesc {
+            background-image: url(data:image/gif;base64,R0lGODlhCwAJAKEAAAAAAH9/fwAAAAAAACH5BAEAAAIALAAAAAALAAkAAAIUlAWnBr3cnIr0WROyDmvzp13CpxQAOw==);
+            background-color: #ccc !important;
+        }
+        .sorter-false {
+            background-image: none;
+            cursor: default;
+        }
+        .sorter-false:hover {
+            background-color: #ddd;
+        }
+        </style>
+
+
+</head>
+<body>
+  <div id="statistics-container">
+    <h2>Test Statistics</h2>
+    <table class="statistics tablesorter tablesorter-default tablesorter2e2fe879cc465" id="total-stats" role="grid">
+      <thead>
+        <tr role="row" class="tablesorter-headerRow">
+          <th class="stats-col-name tablesorter-header tablesorter-headerUnSorted" data-column="0" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="total-stats" unselectable="on" aria-sort="none" aria-label="Total Statistics: No sort applied, activate to apply an ascending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Total Statistics</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="1" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="total-stats" unselectable="on" aria-sort="none" aria-label="Total: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Total</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="2" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="total-stats" unselectable="on" aria-sort="none" aria-label="Pass: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Pass</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="3" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="total-stats" unselectable="on" aria-sort="none" aria-label="Fail: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Fail</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="4" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="total-stats" unselectable="on" aria-sort="none" aria-label="Skip: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Skip</div>
+          </th>
+          <th class="stats-col-elapsed tablesorter-header tablesorter-headerUnSorted" title="Total execution time of these tests. Excludes suite setups and teardowns." data-column="5" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="total-stats" unselectable="on" aria-sort="none" aria-label="Elapsed: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Elapsed</div>
+          </th>
+          <th class="stats-col-graph tablesorter-header sorter-false tablesorter-headerUnSorted" data-column="6" scope="col" role="columnheader" aria-disabled="true" unselectable="on" aria-sort="none" aria-label="Pass / Fail / Skip: No sort applied, sorting is disabled" style="user-select: none;">
+            <div class="tablesorter-header-inner">Pass / Fail / Skip</div>
+          </th>
+        </tr>
+      </thead>
+      <tbody aria-live="polite" aria-relevant="all">
+        <tr class="row-0" role="row">
+          <td class="stats-col-name">
+            <div class="stat-name">
+              <span>All Tests</span>
+            </div>
+          </td>
+          <td class="stats-col-stat">1</td>
+          <td class="stats-col-stat">1</td>
+          <td class="stats-col-stat">0</td>
+          <td class="stats-col-stat">0</td>
+          <td class="stats-col-elapsed" title="Total execution time of these tests. Excludes suite setups and teardowns.">00:00:00</td>
+          <td class="stats-col-graph">
+            <div class="graph">
+              <div class="pass-bar" style="width: 100%" title="100%"></div>
+              <div class="fail-bar" style="width: 0%" title="0%"></div>
+              <div class="skip-bar" style="width: 0%" title="0%"></div>
+            </div>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <table class="statistics tablesorter tablesorter-default tablesorter8e8ffd77a824a" id="tag-stats" role="grid">
+      <thead>
+        <tr role="row" class="tablesorter-headerRow">
+          <th class="stats-col-name tablesorter-header tablesorter-headerUnSorted" data-column="0" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="tag-stats" unselectable="on" aria-sort="none" aria-label="Statistics by Tag: No sort applied, activate to apply an ascending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Statistics by Tag</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="1" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="tag-stats" unselectable="on" aria-sort="none" aria-label="Total: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Total</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="2" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="tag-stats" unselectable="on" aria-sort="none" aria-label="Pass: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Pass</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="3" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="tag-stats" unselectable="on" aria-sort="none" aria-label="Fail: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Fail</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="4" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="tag-stats" unselectable="on" aria-sort="none" aria-label="Skip: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Skip</div>
+          </th>
+          <th class="stats-col-elapsed tablesorter-header tablesorter-headerUnSorted" title="Total execution time of these tests. Excludes suite setups and teardowns." data-column="5" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="tag-stats" unselectable="on" aria-sort="none" aria-label="Elapsed: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Elapsed</div>
+          </th>
+          <th class="stats-col-graph tablesorter-header sorter-false tablesorter-headerUnSorted" data-column="6" scope="col" role="columnheader" aria-disabled="true" unselectable="on" aria-sort="none" aria-label="Pass / Fail / Skip: No sort applied, sorting is disabled" style="user-select: none;">
+            <div class="tablesorter-header-inner">Pass / Fail / Skip</div>
+          </th>
+        </tr>
+      </thead>
+      <tbody aria-live="polite" aria-relevant="all">
+        <tr class="row-0" role="row">
+          <td class="stats-col-name">No Tags</td>
+          <td class="stats-col-stat"></td>
+          <td class="stats-col-stat"></td>
+          <td class="stats-col-stat"></td>
+          <td class="stats-col-stat"></td>
+          <td class="stats-col-elapsed" title="Total execution time of these tests. Excludes suite setups and teardowns."></td>
+          <td class="stats-col-graph">
+            <div class="empty-graph"></div>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <table class="statistics tablesorter tablesorter-default tablesorter06030fd685e0f" id="suite-stats" role="grid">
+      <thead>
+        <tr role="row" class="tablesorter-headerRow">
+          <th class="stats-col-name tablesorter-header tablesorter-headerUnSorted" data-column="0" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="suite-stats" unselectable="on" aria-sort="none" aria-label="Statistics by Suite: No sort applied, activate to apply an ascending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Statistics by Suite</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="1" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="suite-stats" unselectable="on" aria-sort="none" aria-label="Total: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Total</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="2" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="suite-stats" unselectable="on" aria-sort="none" aria-label="Pass: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Pass</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="3" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="suite-stats" unselectable="on" aria-sort="none" aria-label="Fail: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Fail</div>
+          </th>
+          <th class="stats-col-stat tablesorter-header tablesorter-headerUnSorted" data-column="4" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="suite-stats" unselectable="on" aria-sort="none" aria-label="Skip: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Skip</div>
+          </th>
+          <th class="stats-col-elapsed tablesorter-header tablesorter-headerUnSorted" title="Total execution time of this suite." data-column="5" tabindex="0" scope="col" role="columnheader" aria-disabled="false" aria-controls="suite-stats" unselectable="on" aria-sort="none" aria-label="Elapsed: No sort applied, activate to apply a descending sort" style="user-select: none;">
+            <div class="tablesorter-header-inner">Elapsed</div>
+          </th>
+          <th class="stats-col-graph tablesorter-header sorter-false tablesorter-headerUnSorted" data-column="6" scope="col" role="columnheader" aria-disabled="true" unselectable="on" aria-sort="none" aria-label="Pass / Fail / Skip: No sort applied, sorting is disabled" style="user-select: none;">
+            <div class="tablesorter-header-inner">Pass / Fail / Skip</div>
+          </th>
+        </tr>
+      </thead>
+      <tbody aria-live="polite" aria-relevant="all">
+        <tr onclick="makeElementVisible('s1')" class="row-0" role="row">
+          <td class="stats-col-name" title="pap">
+            <div class="stat-name">
+              <span href="#s1">
+                <span class="parent-name"></span>Dummy Test</span>
+            </div>
+          </td>
+          <td class="stats-col-stat">1</td>
+          <td class="stats-col-stat">1</td>
+          <td class="stats-col-stat">0</td>
+          <td class="stats-col-stat">0</td>
+          <td class="stats-col-elapsed" title="Total execution time of this suite.">00:00:00</td>
+          <td class="stats-col-graph">
+            <div class="graph">
+              <div class="pass-bar" style="width: 100%" title="100%"></div>
+              <div class="fail-bar" style="width: 0%" title="0%"></div>
+              <div class="skip-bar" style="width: 0%" title="0%"></div>
+            </div>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+</body>
+</html>
+EOF
+
+cp ${ROBOT_LOG_DIR}/log.html ${ROBOT_LOG_DIR}/report.html