Merge "Refactor and complete MR UTs"
diff --git a/bootstrap/vagrant-onap/lib/sdnc b/bootstrap/vagrant-onap/lib/sdnc
index 8bf6ae6..3326321 100755
--- a/bootstrap/vagrant-onap/lib/sdnc
+++ b/bootstrap/vagrant-onap/lib/sdnc
@@ -3,7 +3,6 @@
 set -o xtrace
 
 source /var/onap/functions
-source /var/onap/asserts
 
 src_folder=$git_src_folder/openecomp/sdnc
 sdnc_repos=("core" "adaptors" "northbound" "plugins" "oam")
@@ -25,41 +24,35 @@
     done
 }
 
-# _build_sdnc_images() - Builds SDNC images from source code
-function _build_sdnc_images {
-    local folder=$1
+# build_sdnc_images() - Builds SDNC images from source code
+function build_sdnc_images {
+    local folder=${1:-$src_folder/oam}
 
-    build_docker_image $folder/installation/ubuntu
-    asserts_image openecomp/ubuntu-sdnc-image
-
-    build_docker_image $folder/installation/sdnc
-    asserts_image openecomp/sdnc-image
-
-    build_docker_image $folder/installation/admportal
-    asserts_image openecomp/admportal-sdnc-image
-
-    build_docker_image $folder/installation/dgbuilder
-    asserts_image openecomp/dgbuilder-sdnc-image
+    install_package unzip
+    clone_repo sdnc/oam $src_folder/oam
+    # The OAM code depends on all the SDNC repos which should be downloaded and compiled first
+    if [[ "$compile_repo" == "False" ]]; then
+        compile_src $src_folder/oam/
+    fi
+    for dirc in ubuntu sdnc admportal dgbuilder; do
+        build_docker_image $folder/installation/$dirc
+    done
 }
 
 # get_sdnc_images() - Build or retrieve necessary images
 function get_sdnc_images {
     if [[ "$build_image" == "True" ]]; then
-        # The OAM code depends on all the SDNC repos which should be downloaded and compiled first
-        if [[ "$compile_repo" == "False" ]]; then
-            compile_all_sdnc_repos
-        fi
-        _build_sdnc_images $src_folder/oam
+        build_sdnc_images
     else
         pull_openecomp_image sdnc-image openecomp/sdnc-image:latest
         pull_openecomp_image admportal-sdnc-image openecomp/admportal-sdnc-image:latest
         pull_openecomp_image dgbuilder-sdnc-image openecomp/dgbuilder-sdnc-image:latest
     fi
+    pull_docker_image mysql/mysql-server:5.6
 }
 
 # install_sdnc() -  Download and install SDNC services from source code
 function install_sdnc {
-    install_package unzip
     clone_repo sdnc/oam $src_folder/oam
     pushd $src_folder/oam/installation/src/main/yaml
     install_docker_compose
diff --git a/bootstrap/vagrant-onap/tests/test_sdnc b/bootstrap/vagrant-onap/tests/test_sdnc
index be900d3..93110a3 100644
--- a/bootstrap/vagrant-onap/tests/test_sdnc
+++ b/bootstrap/vagrant-onap/tests/test_sdnc
@@ -4,7 +4,7 @@
 source /var/onap/sdnc
 
 covered_functions=(
-"clone_all_sdnc_repos" "compile_all_sdnc_repos" "get_sdnc_images"
+"clone_all_sdnc_repos" "compile_all_sdnc_repos" "get_sdnc_images" "install_sdnc"
 )
 
 # test_clone_all_sdnc_repos() - Verify the source code retrieve of SDNC project
@@ -23,9 +23,36 @@
     clone_all_sdnc_repos
     compile_all_sdnc_repos
 
-    asserts_file_exist $src_folder/core/rootpom/boron-sr1/target/classes/LICENSE
-    asserts_file_exist $src_folder/core/rootpom/boron-sr3/target/classes/LICENSE
+    for adaptor in aai-service mdsal-resource resource-assignment sql-resource; do
+        asserts_file_exist $src_folder/adaptors/$adaptor/features/target/$adaptor-features-1.1.2-SNAPSHOT.jar
+        asserts_file_exist $src_folder/adaptors/$adaptor/installer/target/sdnc-$adaptor-1.1.2-SNAPSHOT-installer.zip
+        asserts_file_exist $src_folder/adaptors/$adaptor/provider/target/$adaptor-provider-1.1.2-SNAPSHOT.jar
+    done
+
+    asserts_file_exist $src_folder/core/dblib/provider/target/dblib-provider-1.1.2-SNAPSHOT.jar
     asserts_file_exist $src_folder/core/rootpom/target/rootpom-1.1.0-site_en.xml
+    asserts_file_exist $src_folder/core/target/sdnc-core-1.1.2-SNAPSHOT-site.xml
+
+    for component in asdcApi dataChange vnfapi vnftools; do
+        asserts_file_exist $src_folder/northbound/$component/features/target/$component-features-1.1.2-SNAPSHOT.jar
+        asserts_file_exist $src_folder/northbound/$component/installer/target/sdnc-$component-1.1.2-SNAPSHOT-installer.zip
+        if [[ "$component" != "vnftools" ]]; then
+            asserts_file_exist $src_folder/northbound/$component/model/target/$component-model-1.1.2-SNAPSHOT.jar
+        fi
+        asserts_file_exist $src_folder/northbound/$component/provider/target/$component-provider-1.1.2-SNAPSHOT.jar
+    done
+    asserts_file_exist $src_folder/northbound/dmaap-listener/target/dmaap-listener-1.1.2-SNAPSHOT.jar
+    asserts_file_exist $src_folder/northbound/ueb-listener/target/ueb-listener-1.1.2-SNAPSHOT.jar
+
+    asserts_file_exist $src_folder/oam/admportal/target/admportal.1.1.2-SNAPSHOT.zip
+    asserts_file_exist $src_folder/oam/dgbuilder/target/dgbuilder.1.1.2-SNAPSHOT.zip
+    asserts_file_exist $src_folder/oam/platform-logic/installer/target/platform-logic-installer-1.1.2-SNAPSHOT.zip
+
+    for plugin in properties-node restapi-call-node; do
+        asserts_file_exist $src_folder/plugins/$plugin/features/target/$plugin-features-1.1.2-SNAPSHOT.jar
+        asserts_file_exist $src_folder/plugins/$plugin/installer/target/sdnc-$plugin-1.1.2-SNAPSHOT-installer.zip
+        asserts_file_exist $src_folder/plugins/$plugin/provider/target/$plugin-provider-1.1.2-SNAPSHOT.jar
+    done
 }
 
 # test_get_sdnc_images() - Verify that the SDNC images are created or retrieved
@@ -36,6 +63,19 @@
     asserts_image openecomp/sdnc-image
     asserts_image openecomp/admportal-sdnc-image
     asserts_image openecomp/dgbuilder-sdnc-image
+    asserts_image mysql/mysql-server:5.6
+}
+
+# test_install_sdnc() - Verify that the SDNC Docker containers are up and running
+function test_install_sdnc {
+    clone_all_sdnc_repos
+    get_sdnc_images
+    install_sdnc
+
+    asserts_image_running openecomp/dgbuilder-sdnc-image
+    asserts_image_running openecomp/admportal-sdnc-image
+    asserts_image_running openecomp/sdnc-image
+    asserts_image_running mysql/mysql-server:5.6
 }
 
 if [ "$1" != '*' ]; then
diff --git a/test/csit/plans/aai/search-data-service/appconfig/analysis-config.json b/test/csit/plans/aai/search-data-service/appconfig/analysis-config.json
new file mode 100644
index 0000000..f98ea37
--- /dev/null
+++ b/test/csit/plans/aai/search-data-service/appconfig/analysis-config.json
@@ -0,0 +1,32 @@
+[
+	{
+		"name": "whitespace_analyzer", 
+	 	"description": "A standard whitespace analyzer.",
+	 	"behaviours": [
+	 		"Tokenize the text using white space characters as delimeters.",
+	 		"Convert all characters to lower case.",
+	 		"Convert all alphanumeric and symbolic Unicode characters above the first 127 ASCII characters into their ASCII equivalents."
+	 	],
+	 	"tokenizer": "whitespace",
+	 	"filters": [
+	 		"lowercase",
+	 		"asciifolding"
+	 	]
+	},
+	{
+		"name": "ngram_analyzer", 
+	 	"description": "An analyzer which performs ngram filtering on the data stream.",
+	 	"behaviours": [
+	 		"Tokenize the text using white space characters as delimeters.",
+	 		"Convert all characters to lower case.",
+	 		"Convert all alphanumeric and symbolic Unicode characters above the first 127 ASCII characters into their ASCII equivalents.",
+	 		"Apply ngram filtering using the following values for minimum and maximum size in codepoints of a single n-gram: minimum = 1, maximum = 2."
+	 	],
+	 	"tokenizer": "whitespace",
+	 	"filters": [
+	 		"lowercase",
+	 		"asciifolding",
+	 		"ngram_filter"
+	 	]
+	}
+]
\ No newline at end of file
diff --git a/test/csit/plans/aai/search-data-service/appconfig/auth/search_policy.json b/test/csit/plans/aai/search-data-service/appconfig/auth/search_policy.json
new file mode 100644
index 0000000..72d8902
--- /dev/null
+++ b/test/csit/plans/aai/search-data-service/appconfig/auth/search_policy.json
@@ -0,0 +1,18 @@
+{
+	"roles": [
+		{
+			"name": "admin",
+			"functions": [
+				{
+					"name": "search", "methods": [ { "name": "GET" },{ "name": "DELETE" }, { "name": "PUT" }, { "name": "POST" } ]
+				}
+			],
+
+			"users": [
+				{
+					"username": "CN=ONAP, OU=ONAP, O=ONAP, L=Ottawa, ST=Ontario, C=CA"
+				}
+			]
+		}		
+	]
+}
diff --git a/test/csit/plans/aai/search-data-service/appconfig/auth/tomcat_keystore b/test/csit/plans/aai/search-data-service/appconfig/auth/tomcat_keystore
new file mode 100644
index 0000000..9eec841
--- /dev/null
+++ b/test/csit/plans/aai/search-data-service/appconfig/auth/tomcat_keystore
Binary files differ
diff --git a/test/csit/plans/aai/search-data-service/appconfig/elastic-search.properties b/test/csit/plans/aai/search-data-service/appconfig/elastic-search.properties
new file mode 100644
index 0000000..5d9a37c
--- /dev/null
+++ b/test/csit/plans/aai/search-data-service/appconfig/elastic-search.properties
@@ -0,0 +1,6 @@
+# ElasticSearch Configuration
+
+es.cluster-name=ES_AAI
+es.http-port=9200
+
+## The IP address will be injected by the csit setup script
diff --git a/test/csit/plans/aai/search-data-service/appconfig/filter-config.json b/test/csit/plans/aai/search-data-service/appconfig/filter-config.json
new file mode 100644
index 0000000..e2d5285
--- /dev/null
+++ b/test/csit/plans/aai/search-data-service/appconfig/filter-config.json
@@ -0,0 +1,7 @@
+[
+	{
+		"name": "ngram_filter",
+		"description": "Custom NGram Filter.",
+		"configuration": " \"type\": \"nGram\", \"min_gram\": 1, \"max_gram\": 50, \"token_chars\": [ \"letter\", \"digit\", \"punctuation\", \"symbol\" ]"
+	}
+]
\ No newline at end of file
diff --git a/test/csit/plans/aai/search-data-service/docker-compose.yml b/test/csit/plans/aai/search-data-service/docker-compose.yml
new file mode 100644
index 0000000..d48c9fa
--- /dev/null
+++ b/test/csit/plans/aai/search-data-service/docker-compose.yml
@@ -0,0 +1,26 @@
+version: '2'
+services:
+  aai.searchservice.simpledemo.openecomp.org:
+    image: ${DOCKER_REGISTRY}/openecomp/search-data-service
+    hostname: aai.searchservice.simpledemo.openecomp.org
+    container_name: search-service-container
+    volumes:
+      - ${SEARCH_LOGS}:/logs
+      - ./appconfig:/opt/app/search-data-service/config
+    ports:
+      - 9509:9509
+    environment:
+      - CONFIG_HOME=/opt/app/search-data-service/config/
+      - KEY_STORE_PASSWORD=OBF:1y0q1uvc1uum1uvg1pil1pjl1uuq1uvk1uuu1y10
+      - KEY_MANAGER_PASSWORD=OBF:1y0q1uvc1uum1uvg1pil1pjl1uuq1uvk1uuu1y10
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "30m"
+        max-file: "5"
+        
+networks:
+  default:
+      driver: bridge
+      driver_opts:
+        com.docker.network.driver.mtu: ${MTU}
diff --git a/test/csit/plans/aai/search-data-service/setup.sh b/test/csit/plans/aai/search-data-service/setup.sh
new file mode 100644
index 0000000..df50fed
--- /dev/null
+++ b/test/csit/plans/aai/search-data-service/setup.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+#
+# Copyright © 2017 AT&T Intellectual Property.
+# Copyright © 2017 Amdocs
+# 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.
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+echo search service setup script running
+
+export SEARCH_LOGS="/opt/aai/logroot/AAI-SEARCH";
+export MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1);
+export DOCKER_REGISTRY="nexus3.onap.org:10001";
+
+# inject the current IP to the elastic-search config file
+echo "es.ip-address="`ip addr show docker0 | head -3 | tail -1 | cut -d' ' -f6 | cut -d'/' -f1` >> appconfig/elastic-search.properties
+
+docker run -d --name "stretchy" -p 9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" elasticsearch:2.4.6
+docker-compose -f docker-compose.yml up -d aai.searchservice.simpledemo.openecomp.org
+
+echo sleeping for 10 seconds while services start up
+sleep 10
diff --git a/test/csit/plans/aai/search-data-service/teardown.sh b/test/csit/plans/aai/search-data-service/teardown.sh
new file mode 100644
index 0000000..36d3e1d
--- /dev/null
+++ b/test/csit/plans/aai/search-data-service/teardown.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+#
+# Copyright © 2017 AT&T Intellectual Property.
+# Copyright © 2017 Amdocs
+# 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.
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+
+export SEARCH_LOGS="/opt/aai/logroot/AAI-SEARCH";
+export MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1);
+export DOCKER_REGISTRY="nexus3.onap.org:10001";
+
+docker-compose -f docker-compose.yml stop
+docker stop stretchy
+docker-compose -f docker-compose.yml rm -f -v
+docker rm stretchy
+
+# remove the line we injected into the elastic-search config
+sed -i '$ d' appconfig/elastic-search.properties
diff --git a/test/csit/plans/aai/search-data-service/testplan.txt b/test/csit/plans/aai/search-data-service/testplan.txt
new file mode 100644
index 0000000..b0a72a0
--- /dev/null
+++ b/test/csit/plans/aai/search-data-service/testplan.txt
@@ -0,0 +1,3 @@
+# Test suites are relative paths under [integration.git]/test/csit/tests/.
+# Place the suites in run order.
+aai/search-data-service/suite1
diff --git a/test/csit/tests/aai/search-data-service/suite1/__init__.robot b/test/csit/tests/aai/search-data-service/suite1/__init__.robot
new file mode 100644
index 0000000..f14ab69
--- /dev/null
+++ b/test/csit/tests/aai/search-data-service/suite1/__init__.robot
@@ -0,0 +1,2 @@
+*** Settings ***
+Documentation    Search Service - Suite 1
diff --git a/test/csit/tests/aai/search-data-service/suite1/private.key b/test/csit/tests/aai/search-data-service/suite1/private.key
new file mode 100644
index 0000000..3dd5464
--- /dev/null
+++ b/test/csit/tests/aai/search-data-service/suite1/private.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAmxCmMHlTR7FkdYpW3rEPOYEGEuIC2/tBvzOxsBwhk/G4qyJ4
+4nKRYMJp/4inuh75vzqd/guYqs2bgoywM2eVTsGDv7ccVrub61mB8gs5G/Yc8xFe
+C9yo8WvV3GBMGSnG2VwZceEDygGmapOY4KK0T6eBUf4UFXE33docQPP4OBzTo/LO
+g//FYjQaO+U6y/+pl5cKPorgem78VI82TTo+Kr0z6sPBQy7JpG1j0VaNgy+QwKtG
++VlSgBqysLQEbJFQBugd2TlpbcBnRxVHo0xKUQty8JQWrNpwA5YuB99fdvm+GQ5o
+CyaefObEA1XqzS1KqsPoyaODk5xglbhUUqvCNQIDAQABAoIBADRbOsHDNUtPqgvF
+2e72+Z0A43wcs7py65ATdDtyRCQfyap+yTIsXMm+2utcyMUfEFRxBkdwwuto4MkD
+l7rDjrY4wLNKsFbYoZylbCq9f1rhjoTDqG1449IgBuWR3h/g6zMY1b6NqynZxMbX
+bxbp2NfMRu3YTA+xWpuduUx1E6peCssYU+1+jK30tXhY20eqACBjY6DU8MshIxJu
+Mrxztz5xtjXsiHru8yDtpPhopgAF07TdwCt9JZq9/t+ZOqPl0AIQxOP+prJ+owVU
+nS3yt+QExRsK6Iw9GwoAC0eElDRMnYt957jSxsniOwz1m6po8lkFvblixSQ/OVnt
+h86gWUECgYEAyKyeDy72BO+XRVp0mpQa9R2W5f8eZj+ejFRIsE2m0W1LCaFypV+O
+JZvYcEGj27qFAH5W9WbTSm8okVbLjRbeUU6FPT1l8hbXNnsiwiU6MRyODIbLhkQG
+hHonOfpddsHaUcZe+Hnl3SiSuD/4lPMHYUsQxtnpJI+pcsnuZeYsHAcCgYEAxdD6
+bXLPsjws/RUagph0/yOEEytVUg+plhdmHdihFGuGqHCG/i+eoISX2EfnpyHvYR5m
+9LpaJiWiy04nGSZOn3w32kKQhQYkuwYqw6h1/M5ZwR3j6wc2T8gORHxjC8ZT+LlJ
+OINvCTBQSWmUxFwJ0C1B9JiJtKNGEZm7GlaP2OMCgYBbBvIrsQGn+4aCzyVVeRlB
+Vsq8SZ1ghDtHLHRMhOzG0uzW0YVPvqicJrVnNl89rL3oG2cWqi3t9b5RLy3mMhlm
+iFeoD9HOns3AyNpbdseOv4Uv6XUo0nKiZUal5gu/cu+1aGZsD99VErJ7IYmBBzyx
+xXs2uGIpU4FpsG+TiXU4wQKBgQCQQtD+1IXnY78jaiqFJw3bq1j8adO1Hrr8PGA6
+T+tY6vmvCTFJWg0C3u+lyPqFhlf+qZ9HxkdMHpJUVdBppOgdowdQYs7mVA6hXeP+
+AHLbRNlr3pKCqiXPlQPiqhvJUH+YmfduAVwOhW9nulnFwaFeckLxT/TNCW1mFIjA
+snQBJQKBgQCqH+/K/Dzn0z6vX0APSNM7EBp8ap0qsiLucqGzNxslxwTzinXr5ccl
+8bjJxk6+7qUjWaw66wPn+Qs5buxWrKnbf+T5qmEI0bFaBzUBWrVMx1sMdr1Nj69Y
+waWRQaZ45y8J9wN+flBFp9d5wo5JWk6w54hHMiHeMmuXDCw5zO2YMA==
+-----END RSA PRIVATE KEY-----
diff --git a/test/csit/tests/aai/search-data-service/suite1/publickey.crt b/test/csit/tests/aai/search-data-service/suite1/publickey.crt
new file mode 100644
index 0000000..5696aa3
--- /dev/null
+++ b/test/csit/tests/aai/search-data-service/suite1/publickey.crt
@@ -0,0 +1,25 @@
+Bag Attributes
+    friendlyName: tomcat
+    localKeyID: 54 69 6D 65 20 31 34 39 33 33 32 33 39 32 32 37 35 31 
+subject=/C=CA/ST=Ontario/L=Ottawa/O=ONAP/OU=ONAP/CN=ONAP
+issuer=/C=CA/ST=Ontario/L=Ottawa/O=ONAP/OU=ONAP/CN=ONAP
+-----BEGIN CERTIFICATE-----
+MIIDWTCCAkGgAwIBAgIERWHcIzANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJD
+QTEQMA4GA1UECBMHT250YXJpbzEPMA0GA1UEBxMGT3R0YXdhMQ0wCwYDVQQKEwRP
+TkFQMQ0wCwYDVQQLEwRPTkFQMQ0wCwYDVQQDEwRPTkFQMB4XDTE3MDQyNzIwMDUz
+N1oXDTM3MDExMjIwMDUzN1owXTELMAkGA1UEBhMCQ0ExEDAOBgNVBAgTB09udGFy
+aW8xDzANBgNVBAcTBk90dGF3YTENMAsGA1UEChMET05BUDENMAsGA1UECxMET05B
+UDENMAsGA1UEAxMET05BUDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AJsQpjB5U0exZHWKVt6xDzmBBhLiAtv7Qb8zsbAcIZPxuKsieOJykWDCaf+Ip7oe
++b86nf4LmKrNm4KMsDNnlU7Bg7+3HFa7m+tZgfILORv2HPMRXgvcqPFr1dxgTBkp
+xtlcGXHhA8oBpmqTmOCitE+ngVH+FBVxN93aHEDz+Dgc06PyzoP/xWI0GjvlOsv/
+qZeXCj6K4Hpu/FSPNk06Piq9M+rDwUMuyaRtY9FWjYMvkMCrRvlZUoAasrC0BGyR
+UAboHdk5aW3AZ0cVR6NMSlELcvCUFqzacAOWLgffX3b5vhkOaAsmnnzmxANV6s0t
+SqrD6Mmjg5OcYJW4VFKrwjUCAwEAAaMhMB8wHQYDVR0OBBYEFNji+IU70Qgptn4i
+boq/rOKNAg8tMA0GCSqGSIb3DQEBCwUAA4IBAQBc5mJLeeUUzJ4MujZjn0DS3Lvv
+THJTE54Id1euT3ddzfX3htF0Ewd90YzmLuj1y8r8PXj7b/8Bq+cvoKbmJ42c8h3X
+If0tqde+gYWx1X3NAWHwz00Cje9R0KY4Bx1Cvr39jTw/ESnuSQDKPHBnn8WyAS9K
+08ZhvrVSK54d3U7tDVut9UVva8Scdi12utTAWaOIlusLo3bU9Z6t+tgg7AnQBYc0
+N9oCMbq/MACFlLSdc1J6NITYS8XHY2RS8u88eLbWkCcEEx1glYz/PMX3+V1Ow9Uy
+MjenEx8ifl96ZSOe9XsI2gl2TCaevCY/QuREu4LZB9XmO0gncH7gF5w9Bw2b
+-----END CERTIFICATE-----
diff --git a/test/csit/tests/aai/search-data-service/suite1/test1.robot b/test/csit/tests/aai/search-data-service/suite1/test1.robot
new file mode 100644
index 0000000..db05f83
--- /dev/null
+++ b/test/csit/tests/aai/search-data-service/suite1/test1.robot
@@ -0,0 +1,59 @@
+*** Settings ***
+Library       OperatingSystem
+Library       RequestsLibrary
+Library       requests
+
+*** Variables ***
+${TARGETURL}  https://10.147.124.100:9509/services/search-data-service/v1/search/indexes/test-index3
+${INDEXDATA}  {"fields": [{"name": "Name", "data-type": "string"}, {"name": "Number", "data-type": "long"}]}
+${DOCUMENTDATA}  {"Name": "A", "Number": 5}
+
+*** Test Cases ***
+Index Create Test
+    [Documentation]             Create an index and verify success
+    ${resp}=                    PutWithCert              ${TARGETURL}              ${INDEXDATA}
+    Should Be Equal As Strings  ${resp.status_code}      201
+
+Insert Document Test
+    [Documentation]             Insert a document into the previously created index
+    ${resp}=                    PutWithCert             ${TARGETURL}/documents/testdoc   ${DOCUMENTDATA} 
+    Should Be Equal As Strings  ${resp.status_code}      201
+
+Get Document Test
+    [Documentation]             Get the document that was just created
+    ${resp}                     GetWithCert              ${TARGETURL}/documents/testdoc
+    ${content}=                 Evaluate                 $resp.json().get('content')
+    ${originaljson}=            Evaluate                 json.loads('${DOCUMENTDATA}')   json
+    Should Be Equal As Strings  ${resp.status_code}      200
+    Should Be Equal             ${content}               ${originaljson}
+
+Delete Index Test
+    [Documentation]             Delete the index
+    ${resp}=                    DeleteWithCert           ${TARGETURL}
+    Should Be Equal As Strings  ${resp.status_code}      200
+
+*** Keywords ***
+PutWithCert
+    [Arguments]      ${url}      ${data}
+    ${certinfo}=     Evaluate    ('${CURDIR}/publickey.crt', '${CURDIR}/private.key')
+    ${resp}=         Evaluate    requests.put('${url}', data='${data}', cert=${certinfo}, verify=False)    requests
+    [return]         ${resp}
+
+PostWithCert
+    [Arguments]      ${url}      ${data}
+    ${certinfo}=     Evaluate    ('${CURDIR}/publickey.crt', '${CURDIR}/private.key')
+    ${resp}=         Evaluate    requests.post('${url}', data='${data}', cert=${certinfo}, verify=False)    requests
+    [return]         ${resp}
+
+GetWithCert
+    [Arguments]      ${url}
+    ${certinfo}=     Evaluate    ('${CURDIR}/publickey.crt', '${CURDIR}/private.key')
+    ${resp}=         Evaluate    requests.get('${url}', cert=${certinfo}, verify=False)    requests
+    [return]         ${resp}
+
+DeleteWithCert
+    [Arguments]      ${url}
+    ${certinfo}=     Evaluate    ('${CURDIR}/publickey.crt', '${CURDIR}/private.key')
+    ${resp}=         Evaluate    requests.delete('${url}', cert=${certinfo}, verify=False)    requests
+    [return]         ${resp}
+