summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGary Wu <gary.i.wu@huawei.com>2018-07-26 03:48:09 +0000
committerGerrit Code Review <gerrit@onap.org>2018-07-26 03:48:09 +0000
commitbd0bd931e084fc918190340c9141ff95423b2e71 (patch)
treef549525371e611cb77df4ae5cf8fa8b81fe661ea
parent318f436d17eeb8934aeaa0f28efea813c59222ef (diff)
parentdfb69e3b0abe21faf38a68e7e73468f874e045f9 (diff)
Merge "Add CDT CSIT support."
-rw-r--r--test/csit/plans/appc/healthcheck/testplan.txt1
-rw-r--r--test/csit/tests/appc/cdt/__init__.robot15
-rw-r--r--test/csit/tests/appc/cdt/cdt.robot187
-rw-r--r--test/csit/tests/appc/cdt/common.robot60
-rwxr-xr-xtest/csit/tests/appc/cdt/data/pd_Configure_vUSP - Revenue Assurance_0.0.1V.yaml13
-rwxr-xr-xtest/csit/tests/appc/cdt/data/reference_AllAction_HealthCheckAnsible_0.0.1V.json48
-rwxr-xr-xtest/csit/tests/appc/cdt/data/reference_AllAction_vUSP - Revenue Assurance_0.0.1V.json124
-rwxr-xr-xtest/csit/tests/appc/cdt/data/template_Configure_vUSP - Revenue Assurance_0.0.1V.json5
-rwxr-xr-xtest/csit/tests/appc/cdt/data/vUSP_User Input Spreadsheet v.07.xlsxbin0 -> 609997 bytes
9 files changed, 453 insertions, 0 deletions
diff --git a/test/csit/plans/appc/healthcheck/testplan.txt b/test/csit/plans/appc/healthcheck/testplan.txt
index 2a8c1ea84..97d827869 100644
--- a/test/csit/plans/appc/healthcheck/testplan.txt
+++ b/test/csit/plans/appc/healthcheck/testplan.txt
@@ -1,4 +1,5 @@
# Test suites are relative paths under [integration.git]/test/csit/tests/.
# Place the suites in run order.
appc/healthcheck
+appc/cdt
diff --git a/test/csit/tests/appc/cdt/__init__.robot b/test/csit/tests/appc/cdt/__init__.robot
new file mode 100644
index 000000000..b03cdaeb5
--- /dev/null
+++ b/test/csit/tests/appc/cdt/__init__.robot
@@ -0,0 +1,15 @@
+# This does setup and tear down of the suite
+
+# NOTE 1: The subdirectories must include a symbolic link to this file
+# in order to run an individual .robot file (as compared to directory)
+# NOTE 2: The Resource file must also be included in the test case .robot files
+
+*** Settings ***
+
+# Include a file of common variables, keywords and other settings
+| Resource | common.robot
+
+#| Suite Setup | Run Keywords | Setup1 | Setup2
+| Suite Setup | Run Keywords | Setup2 | Setup1
+| Suite Teardown | Close all browsers
+
diff --git a/test/csit/tests/appc/cdt/cdt.robot b/test/csit/tests/appc/cdt/cdt.robot
new file mode 100644
index 000000000..03ba3a4f9
--- /dev/null
+++ b/test/csit/tests/appc/cdt/cdt.robot
@@ -0,0 +1,187 @@
+*** Settings ***
+| Resource | common.robot
+
+*** Test Cases ***
+# Based on Robot test cases created by Dawn Zelinski (dz2438@att.com).
+| Verify Home page and links
+# Access Home page - All tests files use this as starting point
+| | RefreshMainURL
+# Verify the links
+| | Page should contain link | Home
+| | Page should contain link | MY VNFs
+| | Page should contain link | Test
+| | Page should contain link | About us
+| | Page Should Not Contain | ${USER_ID}
+# Verify MY VNFs link will will ask for user entry
+| | Click Link | MY VNFs
+| | Wait Until Element Is Visible | id=userId | ${LONGTIME}
+| | Input Text | id=userId | ${USERID}
+| | Click Button | Submit
+| | Page Should Contain | ${USER_ID}
+| Verify Logout of user id
+# Access Home page - All tests files use this as starting point
+| | RefreshMainURL
+| | Page Should Contain | ${USER_ID}
+# Log out of user id and then see if My Vnfs asks for user entry
+| | Click Element | id=more-button
+# Line below also works.
+#| | Click Element | xpath=(//*[@class='android-more-button mdl-button mdl-js-button mdl-button--primary'])
+# Now Logout
+| | Wait Until Element Is Visible | xpath=(//*[@class='mdl-menu__item mdl-js-ripple-effect']) | ${LONGTIME}
+| | Click Element | xpath=(//*[@class='mdl-menu__item mdl-js-ripple-effect'])
+| | Page Should Not Contain | ${USER_ID}
+# Verify MY VNFs link will will ask for user entry
+| | Click Link | MY VNFs
+| | Wait Until Element Is Visible | id=userId | ${LONGTIME}
+| | Input Text | id=userId | ${USERID}
+| | Click Button | Submit
+| | Page Should Contain | ${USER_ID}
+
+| Test Uploading an existing VNF Reference file that was previously downloaded
+# Access Home page - All tests files use this as starting point
+| | RefreshMainURL
+| | Click Link | MY VNFs
+# Verify button element is ready before clicking it.
+| | Wait Until Page Contains Element | xpath=(//*[@class='mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary']) | ${LONGTIME}
+| | Click Button | Create New VNF Type or VNFC Type
+| | Page Should Contain | Enter VNF type and VNFC to proceed
+| | Page Should Contain Element | id=vnfType
+# Proceed without entering any new information
+| | Click Button | Proceed anyway
+| | Page Should Contain Element | id=cmbAction
+| | Click Button | Upload Reference File
+| | Choose File | id=inputFile | ${CURDIR}/data/reference_AllAction_HealthCheckAnsible_0.0.1V.json
+| | Sleep | ${SHORTTIME}
+# Verify the screen is populated with the HealthCheck (action), dawnMay17 (VNF Type and ANSIBLE (device protocol)
+| | ${theVNFType} | Get Value | id=txtVnfType
+| | ${theAction} | Get Selected List Value | id=cmbAction
+| | ${theProtocol} | Get Selected List Value | id=txtDeviceProtocol
+| | Should Be Equal As Strings | ${theVNFType} | csit
+| | Should Be Equal As Strings | ${theAction} | HealthCheck
+| | Should Be Equal As Strings | ${theProtocol} | ANSIBLE
+
+| Test Creation of VNF
+# Access Home page - All tests files use this as starting point
+| | RefreshMainURL
+| | Click Link | MY VNFs
+# Verify button element is ready before clicking it.
+| | Wait Until Page Contains Element | xpath=(//*[@class='mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary']) | ${LONGTIME}
+| | Click Button | Create New VNF Type or VNFC Type
+| | Page Should Contain | Enter VNF type and VNFC to proceed
+| | Page Should Contain Element | id=vnfType
+# Create a date to use in VNF Type to make it unique
+| | ${THEDATE} | Get Current Date | result_format=%m%d%H%M%S | exclude_millis=True
+| | Input Text | id=vnfType | csit${THEDATE}
+| | Click Button | Next
+| | Page Should Contain Element | id=cmbAction
+# Verify 17 selections available
+| | Select From List By Index | id=cmbAction | 17
+# Select HealthCheck and ANSIBLE and verify it gets created
+| | Select From List By Value | id=cmbAction | HealthCheck
+| | Select From List By Value | id=txtDeviceProtocol | ANSIBLE
+| | Click Button | saveToAppc
+| | Sleep | ${SHORTTIME}
+#| | Wait Until Page Contains | successfully uploaded the Reference Data | ${LONGTIME}
+| | Click Link | MY VNFs
+| | Page Should Contain | csit${THEDATE}
+
+| Test Creation of VNF with multiple VNFCs
+# This test is based on the 1806 Releases,
+# APPC-C Design Tool User Guide for Self-Service Onboarding (section 5.1)
+# Access Home page - All tests files use this as starting point
+| | RefreshMainURL
+| | Click Link | MY VNFs
+# Verify button element is ready before clicking it.
+| | Wait Until Page Contains Element | xpath=(//*[@class='mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary']) | ${LONGTIME}
+| | Click Button | Create New VNF Type or VNFC Type
+| | Wait Until Page Contains Element | id=vnfType | ${LONGTIME}
+# Create a date to use in VNF Type to make it unique
+| | ${THEDATE} | Get Current Date | result_format=%m%d%H%M%S | exclude_millis=True
+| | Input Text | id=vnfType | csit${THEDATE}
+| | Click Button | Next
+| | Wait Until Page Contains Element | id=cmbAction | ${LONGTIME}
+# Populate the action and protocol
+| | Select From List By Value | id=cmbAction | Configure
+| | Select From List By Value | id=txtDeviceProtocol | NETCONF-XML
+# Populate the other VNF descriptors
+| | Select From List By Value | name=template | Y
+| | Input Text | name=loginUserName | ${USER_ID}
+| | Input Text | name=portNumber | 777
+# Describe the first VNFC Type and enter the number of VMs for this VNFC Type
+| | Input Text | name=samplevnfcType | VNFC_type_A
+| | Input Text | name=samplevnfcFunctionCode | aaa
+| | Select From List By Value | name=sampleIpaddress | Y
+| | Select From List By Value | name=sampleGroupNotation | first-vnfc-name
+| | Input Text | name=sampleGroupValue | pair
+| | Input Text | name=txtNumber23 | 2
+| | Click Button | Add VM Information
+| | Wait Until Page Contains | VM Number: 2 | ${LONGTIME}
+# Clear information about the first VNFC
+| | Click Button | Clear VNFC Info
+# Describe the second VNFC Type and enter the number of VMs for this VNFC Type
+| | Input Text | name=samplevnfcType | VNFC_type_B
+| | Input Text | name=samplevnfcFunctionCode | bbb
+| | Select From List By Value | name=sampleIpaddress | Y
+| | Select From List By Value | name=sampleGroupNotation | first-vnfc-name
+| | Input Text | name=sampleGroupValue | pair
+| | Input Text | name=txtNumber23 | 2
+| | Click Button | Add VM Information
+| | Wait Until Page Contains | VM Number: 4 | ${LONGTIME}
+| | Click Button | saveToAppc
+| | Sleep | ${SHORTTIME}
+#| | Wait Until Page Contains | successfully uploaded the Reference Data | ${LONGTIME}
+| | Click Link | MY VNFs
+| | Wait Until Page Contains | ARTIFACT NAME | ${LONGTIME}
+| | Page Should Contain | csit${THEDATE}
+
+| Test Creation of VNF with VNFC box checked
+# This test is based on the 1806 Releases,
+# APPC-C Design Tool User Guide for Self-Service Onboarding (section 5.1)
+# Access Home page - All tests files use this as starting point
+| | RefreshMainURL
+| | Click Link | MY VNFs
+# Verify button element is ready before clicking it.
+| | Wait Until Page Contains Element | xpath=(//*[@class='mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary']) | ${LONGTIME}
+| | Click Button | Create New VNF Type or VNFC Type
+| | Wait Until Page Contains Element | id=vnfType | ${LONGTIME}
+# Create a date to use in VNF Type to make it unique
+| | ${THEDATE} | Get Current Date | result_format=%m%d%H%M%S | exclude_millis=True
+| | Input Text | id=vnfType | csit${THEDATE}
+# Check the box indicating VNFC templates
+| | Select Checkbox | id=vnfcRequired
+| | Input Text | id=vnfcType | csitVNFC
+| | Click Button | Next
+| | Wait Until Page Contains Element | id=cmbAction | ${LONGTIME}
+# Populate the action and protocol
+| | Select From List By Value | id=cmbAction | Configure
+| | Select From List By Value | id=txtDeviceProtocol | NETCONF-XML
+# Populate the other VNF descriptors
+| | Select From List By Value | name=template | Y
+| | Input Text | name=loginUserName | ${USER_ID}
+| | Input Text | name=portNumber | 777
+# Describe the first VNFC Type and enter the number of VMs for this VNFC Type
+| | Input Text | name=samplevnfcType | csitVNFC
+| | Input Text | name=samplevnfcFunctionCode | aaa
+| | Select From List By Value | name=sampleIpaddress | Y
+| | Select From List By Value | name=sampleGroupNotation | first-vnfc-name
+| | Input Text | name=sampleGroupValue | pair
+| | Input Text | name=txtNumber23 | 2
+| | Click Button | Add VM Information
+| | Wait Until Page Contains | VM Number: 2 | ${LONGTIME}
+# Clear information about the first VNFC
+| | Click Button | Clear VNFC Info
+# Describe the second VNFC Type and enter the number of VMs for this VNFC Type
+| | Input Text | name=samplevnfcType | csitVNFC
+| | Input Text | name=samplevnfcFunctionCode | bbb
+| | Select From List By Value | name=sampleIpaddress | Y
+| | Select From List By Value | name=sampleGroupNotation | first-vnfc-name
+| | Input Text | name=sampleGroupValue | pair
+| | Input Text | name=txtNumber23 | 2
+| | Click Button | Add VM Information
+| | Wait Until Page Contains | VM Number: 4 | ${LONGTIME}
+| | Click Button | saveToAppc
+| | Sleep | ${SHORTTIME}
+| | Click Link | MY VNFs
+| | Wait Until Page Contains | ARTIFACT NAME | ${LONGTIME}
+| | Page Should Contain | csit${THEDATE}
+
diff --git a/test/csit/tests/appc/cdt/common.robot b/test/csit/tests/appc/cdt/common.robot
new file mode 100644
index 000000000..3492924f1
--- /dev/null
+++ b/test/csit/tests/appc/cdt/common.robot
@@ -0,0 +1,60 @@
+# CDT Regression Testing # Set the MAINURL via the command line
+# run as:
+# 1) execute a .profile that sets and exports DEV2 and DEV4
+# 2) robot --variable MAINURL:$DEV# filename.robot
+
+
+*** Variables ***
+
+# ${MAINURL} is now set from the command line per above
+| ${BROWSER} | chrome
+| ${SHORTTIME} | 5s
+| ${LONGTIME} | 90s
+| ${TENMINUTES} | 600s
+#| ${FFPROFILE_DIR} | /home/dvz/.mozilla/firefox/s87c07vn.AppCZoomed50
+| ${MAINURL} | http://localhost:8080/index.html
+| ${USER_ID} | csituser
+
+*** Keywords ***
+| Setup1 | Open browser | ${MAINURL} | ${BROWSER} | | | | |
+| Setup2 | SLEEP | 2s
+
+# Refresh the ${MAINURL} which is used as starting point within each test file
+| RefreshMainURL
+| | Go To | ${MAINURL}
+| | Wait Until Page Contains | WELCOME TO CONTROLLER DESIGN TOOL | ${LONGTIME}
+
+
+# Make sure you can get to APPC server - Wrap in implicit wait then reset
+# Want to wait a few seconds to see if Server error appears.
+# Can't add an explicit wait to "Page should not contain"
+| CheckForServerError
+| | [Arguments] | ${WAITTIME}
+| | Set Selenium Implicit Wait | ${WAITTIME}
+| | Page Should Not Contain | Error in connecting to APPC Server
+| | Set Selenium Implicit Wait | 0
+
+
+| ClickButtonByContent
+| | [Arguments] | ${TEXT}
+| | ${RETVAL} | Execute Javascript | function clickButtonByTextContent(buttontext) { var buttons = document.querySelectorAll('button'); for (var i=0, l=buttons.length; i<l; i++) { if (buttons[i].firstChild.nodeValue == buttontext) { buttons[i].click(); return 0 } } return 1 }; var retval=clickButtonByTextContent('${TEXT}'); return retval;
+| | Return From Keyword | ${RETVAL}
+
+| ClickButtonByClassName
+| | [Arguments] | ${TEXT}
+| | ${RETVAL} | Execute Javascript | function clickButtonByClassName(theclass) { var buttons = document.querySelectorAll('button'); for (var i=0, l=buttons.length; i<l; i++) { if (buttons[i].firstChild.nodeValue == theclass) { buttons[i].click(); return 0 } } return 1 }; var retval=clickButtonByClassName(${TEXT}); return retval;
+| | Return From Keyword | ${RETVAL}
+
+| EnterElementByClassName
+| | [Arguments] | ${THECLASS} | ${INPUTVALUE}
+| | ${RETVAL} | Execute Javascript | function enterElementByClassName(theclass,theinput) { var element = document.querySelector('.'+theclass).value = theinput; return 0 }; var retval=enterElementByClassName(${THECLASS},${INPUTVALUE}); return retval;
+| | Return From Keyword | ${RETVAL}
+
+*** Settings ***
+
+| Library | ExtendedSelenium2Library
+| Library | OperatingSystem
+#| Library | Dialogs
+| Library | DateTime
+
+
diff --git a/test/csit/tests/appc/cdt/data/pd_Configure_vUSP - Revenue Assurance_0.0.1V.yaml b/test/csit/tests/appc/cdt/data/pd_Configure_vUSP - Revenue Assurance_0.0.1V.yaml
new file mode 100755
index 000000000..cea00f0f9
--- /dev/null
+++ b/test/csit/tests/appc/cdt/data/pd_Configure_vUSP - Revenue Assurance_0.0.1V.yaml
@@ -0,0 +1,13 @@
+---
+kind: "Property Definition"
+version: V1
+vnf-parameter-list:
+- name: vnf_name
+ type: null
+ description: dawnDescript
+ required: null
+ default: null
+ source: Manual
+ rule-type: null
+ request-keys: null
+ response-keys: null
diff --git a/test/csit/tests/appc/cdt/data/reference_AllAction_HealthCheckAnsible_0.0.1V.json b/test/csit/tests/appc/cdt/data/reference_AllAction_HealthCheckAnsible_0.0.1V.json
new file mode 100755
index 000000000..90fd0acd5
--- /dev/null
+++ b/test/csit/tests/appc/cdt/data/reference_AllAction_HealthCheckAnsible_0.0.1V.json
@@ -0,0 +1,48 @@
+{
+ "reference_data": [
+ {
+ "action": "HealthCheck",
+ "action-level": "vnf",
+ "scope": {
+ "vnf-type": "csit",
+ "vnfc-type-list": [],
+ "vnfc-type": ""
+ },
+ "template": "Y",
+ "vm": [],
+ "device-protocol": "ANSIBLE",
+ "user-name": "",
+ "port-number": "",
+ "artifact-list": [
+ {
+ "artifact-name": "template_HealthCheck_dawnMay17_0.0.1V.json",
+ "artifact-type": "config_template"
+ },
+ {
+ "artifact-name": "pd_HealthCheck_dawnMay17_0.0.1V.yaml",
+ "artifact-type": "parameter_definitions"
+ },
+ {
+ "artifact-name": "param_HealthCheck_dawnMay17_0.0.1V.json",
+ "artifact-type": "param_values"
+ }
+ ],
+ "scopeType": "vnf-type"
+ },
+ {
+ "action": "AllAction",
+ "action-level": "vnf",
+ "scope": {
+ "vnf-type": "csit",
+ "vnfc-type-list": [],
+ "vnfc-type": ""
+ },
+ "artifact-list": [
+ {
+ "artifact-name": "reference_AllAction_dawnMay17_0.0.1V.json",
+ "artifact-type": "reference_template"
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/csit/tests/appc/cdt/data/reference_AllAction_vUSP - Revenue Assurance_0.0.1V.json b/test/csit/tests/appc/cdt/data/reference_AllAction_vUSP - Revenue Assurance_0.0.1V.json
new file mode 100755
index 000000000..f78debef4
--- /dev/null
+++ b/test/csit/tests/appc/cdt/data/reference_AllAction_vUSP - Revenue Assurance_0.0.1V.json
@@ -0,0 +1,124 @@
+{
+ "reference_data": [
+ {
+ "action": "Configure",
+ "action-level": "vnf",
+ "scope": {
+ "vnf-type": "vUSP - Revenue Assurance",
+ "vnfc-type": ""
+ },
+ "template": "Y",
+ "vm": [
+ {
+ "vm-instance": 1,
+ "vnfc": [
+ {
+ "vnfc-instance": "1",
+ "vnfc-function-code": "rar",
+ "ipaddress-v4-oam-vip": "Y",
+ "group-notation-type": "first-vnfc-name",
+ "group-notation-value": "pair",
+ "vnfc-type": "vUSP vRAR"
+ }
+ ]
+ },
+ {
+ "vm-instance": 2,
+ "vnfc": [
+ {
+ "vnfc-instance": "1",
+ "vnfc-function-code": "rar",
+ "ipaddress-v4-oam-vip": "Y",
+ "group-notation-type": "first-vnfc-name",
+ "group-notation-value": "pair",
+ "vnfc-type": "vUSP vRAR"
+ }
+ ]
+ }
+ ],
+ "device-protocol": "ANSIBLE",
+ "user-name": "att",
+ "port-number": "5000",
+ "artifact-list": [
+ {
+ "artifact-name": "template_Configure_vUSP-RevenueAssurance_0.0.1V..json",
+ "artifact-type": "config_template"
+ },
+ {
+ "artifact-name": "pd_Configure_vUSP-RevenueAssurance_0.0.1V.yaml",
+ "artifact-type": "parameter_definitions"
+ },
+ {
+ "artifact-name": "param_Configure_vUSP-RevenueAssurance_0.0.1V.json",
+ "artifact-type": "param_values"
+ }
+ ],
+ "scopeType": "vnf-type"
+ },
+ {
+ "action": "ConfigBackup",
+ "action-level": "vnf",
+ "scope": {
+ "vnf-type": "vUSP - Revenue Assurance",
+ "vnfc-type": "",
+ "vnfc-type-list": []
+ },
+ "template": "Y",
+ "vm": [],
+ "device-protocol": "ANSIBLE",
+ "user-name": "att",
+ "port-number": "5000",
+ "artifact-list": [
+ {
+ "artifact-name": "template_ConfigBackup_vUSP-vRAR_0.0.1V.json",
+ "artifact-type": "config_template"
+ },
+ {
+ "artifact-name": "pd_ConfigBackup_vUSP-vRAR_0.0.1V.yaml",
+ "artifact-type": "parameter_definitions"
+ }
+ ],
+ "scopeType": "vnf-type"
+ },
+ {
+ "action": "ConfigRestore",
+ "action-level": "vnf",
+ "scope": {
+ "vnf-type": "vUSP - Revenue Assurance",
+ "vnfc-type": "",
+ "vnfc-type-list": []
+ },
+ "template": "Y",
+ "vm": [],
+ "device-protocol": "ANSIBLE",
+ "user-name": "att",
+ "port-number": "5000",
+ "artifact-list": [
+ {
+ "artifact-name": "template_ConfigRestore_vUSP-vRAR_0.0.1V.json",
+ "artifact-type": "config_template"
+ },
+ {
+ "artifact-name": "pd_ConfigRestore_vUSP-vRAR_0.0.1V.yaml",
+ "artifact-type": "parameter_definitions"
+ }
+ ],
+ "scopeType": "vnf-type"
+ },
+ {
+ "action": "AllAction",
+ "action-level": "vnf",
+ "scope": {
+ "vnf-type": "vUSP - Revenue Assurance",
+ "vnfc-type": "",
+ "vnfc-type-list": []
+ },
+ "artifact-list": [
+ {
+ "artifact-name": "reference_AllAction_vUSP-RevenueAssurance_0.0.1V.json",
+ "artifact-type": "reference_template"
+ }
+ ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/test/csit/tests/appc/cdt/data/template_Configure_vUSP - Revenue Assurance_0.0.1V.json b/test/csit/tests/appc/cdt/data/template_Configure_vUSP - Revenue Assurance_0.0.1V.json
new file mode 100755
index 000000000..5dd853c5a
--- /dev/null
+++ b/test/csit/tests/appc/cdt/data/template_Configure_vUSP - Revenue Assurance_0.0.1V.json
@@ -0,0 +1,5 @@
+{
+ "PlaybookName": "rarf/latest/ansible/restore/site.yml",
+ "EnvParameters": {"vnf_instance":"${vnf_name}"},
+ "Timeout": 600
+}
diff --git a/test/csit/tests/appc/cdt/data/vUSP_User Input Spreadsheet v.07.xlsx b/test/csit/tests/appc/cdt/data/vUSP_User Input Spreadsheet v.07.xlsx
new file mode 100755
index 000000000..3a5efcb22
--- /dev/null
+++ b/test/csit/tests/appc/cdt/data/vUSP_User Input Spreadsheet v.07.xlsx
Binary files differ