diff options
-rwxr-xr-x | csit/clamp/plans/setup.sh | 47 | ||||
-rwxr-xr-x | csit/clamp/plans/teardown.sh | 3 | ||||
-rw-r--r-- | csit/clamp/tests/data/InstantiateCL.json | 73 | ||||
-rw-r--r-- | csit/clamp/tests/data/PMSHMultipleCLTosca.yaml | 671 | ||||
-rw-r--r-- | csit/clamp/tests/data/PassivateCL.json | 9 | ||||
-rw-r--r-- | csit/clamp/tests/data/StateChangeRunningCL.json | 9 | ||||
-rw-r--r-- | csit/clamp/tests/policy-clamp-test.robot | 82 | ||||
-rw-r--r-- | csit/config/clamp/ClRuntimeParameters.yaml | 61 | ||||
-rw-r--r-- | csit/config/clamp/HttpParticipantParameters.yaml | 29 | ||||
-rw-r--r-- | csit/config/clamp/KubernetesParticipantParameters.yaml | 61 | ||||
-rw-r--r-- | csit/config/clamp/PolicyParticipantParameters.yaml | 50 | ||||
-rwxr-xr-x | csit/run-k8s-csit.sh | 442 |
12 files changed, 446 insertions, 1091 deletions
diff --git a/csit/clamp/plans/setup.sh b/csit/clamp/plans/setup.sh index 0f6141b5..32bf7a7c 100755 --- a/csit/clamp/plans/setup.sh +++ b/csit/clamp/plans/setup.sh @@ -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. @@ -16,48 +16,3 @@ # # 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}" diff --git a/csit/clamp/plans/teardown.sh b/csit/clamp/plans/teardown.sh index e0fc58ed..1bc4204a 100755 --- a/csit/clamp/plans/teardown.sh +++ b/csit/clamp/plans/teardown.sh @@ -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 index 46cab320..00000000 --- a/csit/clamp/tests/data/InstantiateCL.json +++ /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 index 2a68d18c..00000000 --- a/csit/clamp/tests/data/PMSHMultipleCLTosca.yaml +++ /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 index 472d5f4e..00000000 --- a/csit/clamp/tests/data/PassivateCL.json +++ /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 index bbba0b16..00000000 --- a/csit/clamp/tests/data/StateChangeRunningCL.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "orderedState": "RUNNING", - "controlLoopIdentifierList": [ - { - "name": "PMSHInstance0", - "version": "1.0.1" - } - ] -} diff --git a/csit/clamp/tests/policy-clamp-test.robot b/csit/clamp/tests/policy-clamp-test.robot index bb590f52..58c31faf 100644 --- a/csit/clamp/tests/policy-clamp-test.robot +++ b/csit/clamp/tests/policy-clamp-test.robot @@ -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 index 170fe722..00000000 --- a/csit/config/clamp/ClRuntimeParameters.yaml +++ /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 index 609fc7eb..00000000 --- a/csit/config/clamp/HttpParticipantParameters.yaml +++ /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 index 76b8d765..00000000 --- a/csit/config/clamp/KubernetesParticipantParameters.yaml +++ /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 index f490538a..00000000 --- a/csit/config/clamp/PolicyParticipantParameters.yaml +++ /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 index 00000000..79da27c6 --- /dev/null +++ b/csit/run-k8s-csit.sh @@ -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 |