summaryrefslogtreecommitdiffstats
path: root/csit
diff options
context:
space:
mode:
authorRam Krishna Verma <ram_krishna.verma@bell.ca>2021-05-13 15:34:57 -0400
committerRam Krishna Verma <ram_krishna.verma@bell.ca>2021-05-21 09:18:25 -0400
commit2d3f3875f2b218a10fd9eb8d6aa7125334e70bfe (patch)
tree75843709412d92f8256cccda098b71163e67db8a /csit
parenta1415eec743404beca205e5f51a926afb80404b9 (diff)
Remove csit folder from policy/drools-apps
The csit test files for all repos have been consolidated in policy/docker to maintain them at single place and allow us to trigger verify jobs in gerrit reviews. Issue-ID: POLICY-3257 Change-Id: I98e34906398d9e6fc239a319aea9a2ef72042890 Signed-off-by: Ram Krishna Verma <ram_krishna.verma@bell.ca> (cherry picked from commit c7bf8c313d5e17f78bfbbcbccd1c6d13bd4caf16) Signed-off-by: Ram Krishna Verma <ram_krishna.verma@bell.ca>
Diffstat (limited to 'csit')
-rwxr-xr-xcsit/plans/setup.sh65
-rwxr-xr-xcsit/plans/teardown.sh19
-rw-r--r--csit/plans/testplan.txt3
-rw-r--r--csit/tests/data/deploy.drools.policies.json27
-rw-r--r--csit/tests/data/deploy.xacml.policies.json27
-rw-r--r--csit/tests/data/vcpeOnset.json16
-rw-r--r--csit/tests/data/vdnsOnset.json16
-rw-r--r--csit/tests/data/vfwOnset.json17
-rw-r--r--csit/tests/drools-applications-test.robot227
9 files changed, 0 insertions, 417 deletions
diff --git a/csit/plans/setup.sh b/csit/plans/setup.sh
deleted file mode 100755
index dcad3a387..000000000
--- a/csit/plans/setup.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/bash
-#
-# ===========LICENSE_START====================================================
-# Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
-# ============================================================================
-# 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.
-# ============LICENSE_END=====================================================
-#
-source ${SCRIPTS}/get-branch-mariadb.sh
-
-echo "Uninstall docker-py and reinstall docker."
-pip uninstall -y docker-py
-pip uninstall -y docker
-pip install -U docker==2.7.0
-
-sudo apt-get -y install libxml2-utils
-
-bash ${SCRIPTS}/get-models-examples.sh
-source ${SCRIPTS}/detmVers.sh
-
-docker-compose -f ${SCRIPTS}/docker-compose-all.yml up -d drools-apps
-
-unset http_proxy https_proxy
-
-DROOLS_IP=`get-instance-ip.sh drools-apps`
-API_IP=`get-instance-ip.sh policy-api`
-PAP_IP=`get-instance-ip.sh policy-pap`
-XACML_IP=`get-instance-ip.sh policy-xacml-pdp`
-SIM_IP=`get-instance-ip.sh policy.api.simpledemo.onap.org`
-export SIM_IP
-
-echo DROOLS IP IS ${DROOLS_IP}
-echo API IP IS ${API_IP}
-echo PAP IP IS ${PAP_IP}
-echo XACML IP IS ${XACML_IP}
-echo SIMULATORS IP IS ${SIM_IP}
-
-# wait for the app to start up
-${SCRIPTS}/wait_for_port.sh ${DROOLS_IP} 6969
-
-# give enough time for the controllers to come up
-sleep 15
-
-DATA=${WORKSPACE}/models/models-examples/src/main/resources/policies
-DATA2=${TESTPLANDIR}/csit/tests/data
-
-ROBOT_VARIABLES=""
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v SCR2:${SCRIPTS}"
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v DATA:${DATA}"
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v DATA2:${DATA2}"
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v DROOLS_IP:${DROOLS_IP}"
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v API_IP:${API_IP}"
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v PAP_IP:${PAP_IP}"
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v XACML_IP:${XACML_IP}"
-ROBOT_VARIABLES="${ROBOT_VARIABLES} -v SIM_IP:${SIM_IP}"
diff --git a/csit/plans/teardown.sh b/csit/plans/teardown.sh
deleted file mode 100755
index ce89740d2..000000000
--- a/csit/plans/teardown.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-#
-# ===========LICENSE_START====================================================
-# Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved.
-# ============================================================================
-# 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.
-# ============LICENSE_END=====================================================
-#
-docker-compose -f ${SCRIPTS}/docker-compose-all.yml down -v
diff --git a/csit/plans/testplan.txt b/csit/plans/testplan.txt
deleted file mode 100644
index 7acf3cd90..000000000
--- a/csit/plans/testplan.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# Test suites are relative paths under [policy/drools-applications.git]/tests/.
-# Place the suites in run order.
-drools-applications-test.robot
diff --git a/csit/tests/data/deploy.drools.policies.json b/csit/tests/data/deploy.drools.policies.json
deleted file mode 100644
index 24c90d0d2..000000000
--- a/csit/tests/data/deploy.drools.policies.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "groups": [
- {
- "name": "defaultGroup",
- "deploymentSubgroups": [
- {
- "pdpType": "drools",
- "action": "POST",
- "policies": [
- {
- "name": "operational.restart",
- "version": "1.0.0"
- },
- {
- "name": "operational.scaleout",
- "version": "1.0.0"
- },
- {
- "name": "operational.modifyconfig",
- "version": "1.0.0"
- }
- ]
- }
- ]
- }
- ]
-}
diff --git a/csit/tests/data/deploy.xacml.policies.json b/csit/tests/data/deploy.xacml.policies.json
deleted file mode 100644
index 46da90217..000000000
--- a/csit/tests/data/deploy.xacml.policies.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "groups": [
- {
- "name": "defaultGroup",
- "deploymentSubgroups": [
- {
- "pdpType": "xacml",
- "action": "POST",
- "policies": [
- {
- "name": "onap.restart.tca",
- "version": "1.0.0"
- },
- {
- "name": "onap.scaleout.tca",
- "version": "1.0.0"
- },
- {
- "name": "onap.vfirewall.tca",
- "version": "1.0.0"
- }
- ]
- }
- ]
- }
- ]
-}
diff --git a/csit/tests/data/vcpeOnset.json b/csit/tests/data/vcpeOnset.json
deleted file mode 100644
index 7dd9d5a01..000000000
--- a/csit/tests/data/vcpeOnset.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "closedLoopControlName": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e",
- "closedLoopAlarmStart": 1463679805324,
- "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
- "closedLoopEventStatus": "ONSET",
- "requestID": "664be3d2-6c12-4f4b-a3e7-c349acced200",
- "target_type": "VNF",
- "target": "generic-vnf.vnf-id",
- "AAI": {
- "vserver.is-closed-loop-disabled": "false",
- "vserver.prov-status": "ACTIVE",
- "generic-vnf.vnf-id": "vCPE_Infrastructure_vGMUX_demo_app"
- },
- "from": "DCAE",
- "version": "1.0.2"
-}
diff --git a/csit/tests/data/vdnsOnset.json b/csit/tests/data/vdnsOnset.json
deleted file mode 100644
index 13f690952..000000000
--- a/csit/tests/data/vdnsOnset.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3",
- "closedLoopAlarmStart": 1463679805324,
- "closedLoopEventClient": "microservice.stringmatcher",
- "closedLoopEventStatus": "ONSET",
- "requestID": "c7c6a4aa-bb61-4a15-b831-ba1472dd4a65",
- "target_type": "VNF",
- "target": "vserver.vserver-name",
- "AAI": {
- "vserver.is-closed-loop-disabled": "false",
- "vserver.prov-status": "ACTIVE",
- "vserver.vserver-name": "OzVServer"
- },
- "from": "DCAE",
- "version": "1.0.2"
-}
diff --git a/csit/tests/data/vfwOnset.json b/csit/tests/data/vfwOnset.json
deleted file mode 100644
index 7782867a1..000000000
--- a/csit/tests/data/vfwOnset.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "closedLoopControlName": "ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a",
- "closedLoopAlarmStart": 1463679805324,
- "closedLoopEventClient": "microservice.stringmatcher",
- "closedLoopEventStatus": "ONSET",
- "requestID": "c7c6a4aa-bb61-4a15-b831-ba1472dd4a65",
- "target_type": "VNF",
- "target": "generic-vnf.vnf-name",
- "AAI": {
- "vserver.is-closed-loop-disabled": "false",
- "vserver.prov-status": "ACTIVE",
- "generic-vnf.vnf-name": "fw0002vm002fw002",
- "vserver.vserver-name": "OzVServer"
- },
- "from": "DCAE",
- "version": "1.0.2"
-}
diff --git a/csit/tests/drools-applications-test.robot b/csit/tests/drools-applications-test.robot
deleted file mode 100644
index cb04c23af..000000000
--- a/csit/tests/drools-applications-test.robot
+++ /dev/null
@@ -1,227 +0,0 @@
-*** Settings ***
-Library Collections
-Library String
-Library RequestsLibrary
-Library OperatingSystem
-Library Process
-Library json
-
-*** Test Cases ***
-Alive
- [Documentation] Runs Policy PDP Alive Check
- ${resp}= PeformGetRequest /policy/pdp/engine ${DROOLS_IP} 9696 200
- Should Be Equal As Strings ${resp.json()['alive']} True
-
-Healthcheck
- [Documentation] Runs Policy PDP-D Health check
- ${resp}= PeformGetRequest /healthcheck ${DROOLS_IP} 6969 200
- Should Be Equal As Strings ${resp.json()['healthy']} True
-
-Controller
- [Documentation] Checks controller is up
- Wait Until Keyword Succeeds 2 min 15 sec VerifyController
-
-MakeTopics
- [Documentation] Creates the Policy topics
- ${result}= Run Process ${SCR2}/make_topic.sh POLICY-PDP-PAP
- Should Be Equal As Integers ${result.rc} 0
- ${result}= Run Process ${SCR2}/make_topic.sh POLICY-CL-MGT
- Should Be Equal As Integers ${result.rc} 0
-
-CreateVcpeXacmlPolicy
- [Documentation] Create VCPE Policy for Xacml
- PerformPostRequest /policy/api/v1/policies null ${API_IP} 6969 vCPE.policy.monitoring.input.tosca.yaml ${DATA} yaml 200
-
-CreateVcpeDroolsPolicy
- [Documentation] Create VCPE Policy for Drools
- PerformPostRequest /policy/api/v1/policies null ${API_IP} 6969 vCPE.policy.operational.input.tosca.yaml ${DATA} yaml 200
-
-CreateVdnsXacmlPolicy
- [Documentation] Create VDNS Policy for Xacml
- PerformPostRequest /policy/api/v1/policies null ${API_IP} 6969 vDNS.policy.monitoring.input.tosca.yaml ${DATA} yaml 200
-
-CreateVdnsDroolsPolicy
- [Documentation] Create VDNS Policy for Drools
- PerformPostRequest /policy/api/v1/policies null ${API_IP} 6969 vDNS.policy.operational.input.tosca.json ${DATA} json 200
-
-CreateVfwXacmlPolicy
- [Documentation] Create VFW Policy for Xacml
- PerformPostRequest /policy/api/v1/policies null ${API_IP} 6969 vFirewall.policy.monitoring.input.tosca.yaml ${DATA} yaml 200
-
-CreateVfwDroolsPolicy
- [Documentation] Create VFW Policy for Drools
- PerformPostRequest /policy/api/v1/policies null ${API_IP} 6969 vFirewall.policy.operational.input.tosca.json ${DATA} json 200
-
-DeployXacmlPolicies
- [Documentation] Deploys the Policies to Xacml
- PerformPostRequest /policy/pap/v1/pdps/deployments/batch null ${PAP_IP} 6969 deploy.xacml.policies.json ${DATA2} json 202
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-PDP-PAP
- ... responseTo xacml ACTIVE restart
- Log Received status ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} onap.restart.tca
- Should Contain ${result.stdout} onap.scaleout.tca
- Should Contain ${result.stdout} onap.vfirewall.tca
-
-DeployDroolsPolicies
- [Documentation] Deploys the Policies to Drools
- PerformPostRequest /policy/pap/v1/pdps/deployments/batch null ${PAP_IP} 6969 deploy.drools.policies.json ${DATA2} json 202
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-PDP-PAP
- ... responseTo drools ACTIVE
- Log Received status ${result.stdout}
- Sleep 3s
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} operational.restart
- Should Contain ${result.stdout} operational.scaleout
- Should Contain ${result.stdout} operational.modifyconfig
-
-VcpeExecute
- [Documentation] Executes VCPE Policy
- ${result}= Run Process ${SCR2}/onset.sh ${DATA2}/vcpeOnset.json
- Should Be Equal As Integers ${result.rc} 0
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} ACTIVE
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION
- Should Contain ${result.stdout} Sending guard query for APPC Restart
- Should Be Equal As Integers ${result.rc} 0
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION
- Should Contain ${result.stdout} Guard result for APPC Restart is Permit
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION
- Should Contain ${result.stdout} actor=APPC,operation=Restart
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION: SUCCESS
- Should Contain ${result.stdout} actor=APPC,operation=Restart
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} FINAL: SUCCESS
- Should Contain ${result.stdout} APPC
- Should Contain ${result.stdout} Restart
-
-VdnsExecute
- [Documentation] Executes VDNS Policy
- ${result}= Run Process ${SCR2}/onset.sh ${DATA2}/vdnsOnset.json
- Should Be Equal As Integers ${result.rc} 0
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} ACTIVE
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION
- Should Contain ${result.stdout} Sending guard query for SO VF Module Create
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION
- Should Contain ${result.stdout} Guard result for SO VF Module Create is Permit
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION
- Should Contain ${result.stdout} actor=SO,operation=VF Module Create
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION: SUCCESS
- Should Contain ${result.stdout} actor=SO,operation=VF Module Create
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} FINAL: SUCCESS
- Should Contain ${result.stdout} SO
- Should Contain ${result.stdout} VF Module Create
-
-VfwExecute
- [Documentation] Executes VFW Policy
- ${result}= Run Process ${SCR2}/onset.sh ${DATA2}/vfwOnset.json
- Should Be Equal As Integers ${result.rc} 0
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} ACTIVE
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION
- Should Contain ${result.stdout} Sending guard query for APPC ModifyConfig
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION
- Should Contain ${result.stdout} Guard result for APPC ModifyConfig is Permit
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION
- Should Contain ${result.stdout} actor=APPC,operation=ModifyConfig
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} OPERATION: SUCCESS
- Should Contain ${result.stdout} actor=APPC,operation=ModifyConfig
- ${result}= Run Process ${SCR2}/wait_topic.sh POLICY-CL-MGT
- ... ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a
- Log Received notification ${result.stdout}
- Should Be Equal As Integers ${result.rc} 0
- Should Contain ${result.stdout} FINAL: SUCCESS
- Should Contain ${result.stdout} APPC
- Should Contain ${result.stdout} ModifyConfig
-
-*** Keywords ***
-
-VerifyController
- ${resp}= PeformGetRequest /policy/pdp/engine/controllers/usecases/drools/facts ${DROOLS_IP} 9696 200
- Should Be Equal As Strings ${resp.json()['usecases']} 0
-
-PeformGetRequest
- [Arguments] ${url} ${hostname} ${port} ${expectedstatus}
- ${auth}= Create List demo@people.osaaf.org demo123456!
- Log Creating session https://${hostname}:${port}
- ${session}= Create Session policy https://${hostname}:${port} auth=${auth}
- ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
- ${resp}= GET On Session policy ${url} headers=${headers} expected_status=${expectedstatus}
- Log Received response from policy ${resp.text}
- [return] ${resp}
-
-PerformPostRequest
- [Arguments] ${url} ${params} ${hostname} ${port} ${jsonfile} ${filepath} ${contenttype} ${expectedstatus}
- ${auth}= Create List healthcheck zb!XztG34
- ${postjson}= Get file ${filepath}/${jsonfile}
- Log Creating session https://${hostname}:6969
- ${session}= Create Session policy https://${hostname}:6969 auth=${auth}
- ${headers}= Create Dictionary Accept=application/${contenttype} Content-Type=application/${contenttype}
- ${resp}= POST On Session policy ${url} params=${params} data=${postjson} headers=${headers} expected_status=${expectedstatus}
- Log Received response from policy ${resp.text}
- [return] ${resp}