Added functional tests for unauthenticated MR

NOTE: because these tests are all related, this commit
also addresses DMAAP-294,495, 297, 301 and 302.

Change-Id: I862f459e34517c838413728e6193e53a5ab20bc3
Signed-off-by: Dominic Lunanuova <dgl@research.att.com>
Issue-ID: DMAAP-293
diff --git a/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh b/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh
index a19454b..d5c77b0 100755
--- a/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh
+++ b/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh
@@ -40,3 +40,6 @@
 # Pass any variables required by Robot test suites in ROBOT_VARIABLES
 ROBOT_VARIABLES="-v AAF_IP:${AAF_IP} -v MRC_IP:${MRC_IP} -v DRPS_IP:${DRPS_IP} -v DMAAPBC_IP:${DMAAPBC_IP}"
 
+set -x
+${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh ${DMAAPBC_IP} ${DRPS_IP} ${MRC_IP}
+set +x
diff --git a/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh b/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh
index 35534de..3b604fe 100755
--- a/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh
+++ b/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh
@@ -20,25 +20,35 @@
 # 
 #
 
+if [ "$USE_EXISTING_DMAAP" = "Y" ]
+then
+	ROBOT_VARIABLES="-v AAF_IP:0.0.0 -v MRC_IP:172.18.0.3 -v DRPS_IP:0.0.0.0 -v DMAAPBC_IP:172.17.0.4"
+else
 
-# Place the scripts in run order:
-source ${WORKSPACE}/test/csit/scripts/dmaap-message-router/dmaap-mr-launch.sh
-dmaap_mr_launch
-MRC_IP=${IP}
+	# Place the scripts in run order:
+	source ${WORKSPACE}/test/csit/scripts/dmaap-message-router/dmaap-mr-launch.sh
+	dmaap_mr_launch
+	MRC_IP=${IP}
 
-source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/start-mock.sh
-#start_mock "aaf" 
-AAF_IP=${IP}
-start_mock "drps" 
-DRPS_IP=${IP}
+	source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/start-mock.sh
+	#start_mock "aaf" 
+	#AAF_IP=${IP}
+	AAF_IP=0.0.0.0
+	#start_mock "drps" 
+	#DRPS_IP=${IP}
+	DRPS_IP=0.0.0.0
 
-source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh 
-dmaapbc_launch $AAF_IP $MRC_IP $DRPS_IP
-DMAAPBC_IP=${IP}
+	source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh 
+	dmaapbc_launch $AAF_IP $MRC_IP $DRPS_IP
+	DMAAPBC_IP=${IP}
 
 
-echo "AAF_IP=$AAF_IP MRC_IP=$MRC_IP DRPS_IP=$DRPS_IP DMAAPBC_IP=$DMAAPBC_IP"
+	echo "AAF_IP=$AAF_IP MRC_IP=$MRC_IP DRPS_IP=$DRPS_IP DMAAPBC_IP=$DMAAPBC_IP"
 
-# Pass any variables required by Robot test suites in ROBOT_VARIABLES
-ROBOT_VARIABLES="-v AAF_IP:${AAF_IP} -v MRC_IP:${MRC_IP} -v DRPS_IP:${DRPS_IP} -v DMAAPBC_IP:${DMAAPBC_IP}"
+	# Pass any variables required by Robot test suites in ROBOT_VARIABLES
+	ROBOT_VARIABLES="-v AAF_IP:${AAF_IP} -v MRC_IP:${MRC_IP} -v DRPS_IP:${DRPS_IP} -v DMAAPBC_IP:${DMAAPBC_IP}"
+	set -x
+	${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh ${DMAAPBC_IP} ${DRPS_IP} ${MRC_IP}
+	set +x
+fi
 
diff --git a/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh b/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh
index 0474dde..f35b022 100644
--- a/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh
+++ b/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh
@@ -21,8 +21,9 @@
 #
 source ${WORKSPACE}/test/csit/scripts/dmaap-message-router/dmaap-mr-teardown.sh
 
+if [ "$KEEP_DMAAP" != "Y" ]
+then
 dmaap_mr_teardown
-kill-instance.sh aaf-mock
-kill-instance.sh drps-mock
 kill-instance.sh dmaapbc
+fi
 
diff --git a/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh b/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh
index 7ec7345..96ac40f 100755
--- a/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh
+++ b/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh
@@ -17,6 +17,7 @@
 }
 EOF
 
+echo "Initializing /dmaap endpoint"
 curl -v -X POST -d @${JSON} -H "Content-Type: application/json" http://$1:8080/webapi/dmaap 
 
 
@@ -33,20 +34,28 @@
 }
 EOF
 
+echo "Initializing /dcaeLocations endpoint"
 curl -v -X POST -d @${JSON} -H "Content-Type: application/json" http://$1:8080/webapi/dcaeLocations 
 
 
 # INITIALIZE: MR object in 1 site
+# since MR is currently deployed via docker-compose, its IP doesn't seem
+# to be routable from DBCL. Fortunately, the MR port is mapped from the docker bridge IP address.
+# Found this article for how to deterine the docker bridge IP so using it as a workaround.
+# https://stackoverflow.com/questions/22944631/how-to-get-the-ip-address-of-the-docker-host-from-inside-a-docker-container
+# Used the following snippet found buried in a comment to an answer and then modified for only 1 value.
+DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+' | head -1 )
+# Perhaps there is a better way...
 JSON=/tmp/$$.mrc
 cat << EOF > $JSON
 {
 	"dcaeLocationName": "csit-sanfrancisco",
-	"fqdn": "$3",
-	"hosts" : [ "$3", "$3", "$3" ],
-	"protocol" : "https",
-	"port": "3094"
+	"fqdn": "$DOCKER_HOST",
+	"topicProtocol" : "http",
+	"topicPort": "3904"
 
 }
 EOF
 
+echo "Initializing /mr_clusters endpoint"
 curl -v -X POST -d @${JSON} -H "Content-Type: application/json" http://$1:8080/webapi/mr_clusters
diff --git a/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh b/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh
index 72c4438..688ce7d 100755
--- a/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh
+++ b/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh
@@ -4,13 +4,13 @@
 # sets global var IP with assigned IP address
 
 function dmaapbc_launch() {
-	TAG=onap/dmaap/buscontroller
+	TAG="nexus3.onap.org:10001/onap/dmaap/buscontroller"
 	CONTAINER_NAME=dmaapbc
 	IP=""
 
 	cd ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller
 
-	TMP_CFG=/tmp/docker-databys-controller.conf
+	TMP_CFG=/tmp/docker-databus-controller.conf
 	. ./onapCSIT.env > $TMP_CFG
 	docker run -d --name $CONTAINER_NAME -v $TMP_CFG:/opt/app/config/conf $TAG
 	IP=`get-instance-ip.sh ${CONTAINER_NAME}`
@@ -22,9 +22,4 @@
     	sleep $i
 	done
 
-	set -x
-	${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh ${IP}
-	set +x
-
-	
 }
diff --git a/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot b/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot
index f69538d..d68b9ed 100644
--- a/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot
+++ b/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot
@@ -4,14 +4,25 @@
 Library           json
 Library           OperatingSystem
 Library           RequestsLibrary
-
+Library           HttpLibrary.HTTP
+Library           String
 
 
 *** Variables ***
 ${MESSAGE}    Hello, world!
 ${DBC_URI}    webapi
-${TOPIC1}     singleMRtopic1
-${TOPIC1_DATA} 	{ "topicName":"singleMRtopic1", "topicDescription":"generated for CSIT", "owner":"dgl"}
+${DBC_URL}    http://${DMAAPBC_IP}:8080/${DBC_URI}
+${TOPIC_NS}     org.onap.dmaap.onapCSIT
+${LOC}          csit-sanfrancisco
+${PUB_CORE}     "dcaeLocationName": "${LOC}", "clientRole": "org.onap.dmaap.client.pub", "action": [ "pub", "view" ] 
+${SUB_CORE}     "dcaeLocationName": "${LOC}", "clientRole": "org.onap.dmaap.client.sub", "action": [ "sub", "view" ] 
+${PUB}          { ${PUB_CORE} }
+${SUB}          { ${SUB_CORE} }
+${TOPIC1_DATA}  { "topicName":"singleMRtopic1", "topicDescription":"generated for CSIT", "owner":"dgl"}
+${TOPIC2_DATA}  { "topicName":"singleMRtopic2", "topicDescription":"generated for CSIT", "owner":"dgl", "clients": [ ${PUB}, ${SUB}] }
+${TOPIC3_DATA}  { "topicName":"singleMRtopic3", "topicDescription":"generated for CSIT", "owner":"dgl"}
+${PUB3_DATA}    { "fqtn": "${TOPIC_NS}.singleMRtopic3", ${PUB_CORE} }
+${SUB3_DATA}    { "fqtn": "${TOPIC_NS}.singleMRtopic3", ${SUB_CORE} }
 
 
 
@@ -22,11 +33,54 @@
     ${resp}=           Get Request   sanity    /  
     Should Be Equal As Integers  ${resp.status_code}  200
 
-Create Topic Test
-    [Documentation]        Check POST ${DBC_URI}/topics endpoint
-    ${resp}=         PostCall    http://${DMAAPBC_IP}:8080/${DBC_URI}/topics    ${TOPIC1_DATA}
+(DMAAP-293)
+    [Documentation]        Create Topic w no clients POST ${DBC_URI}/topics endpoint
+    ${resp}=         PostCall    ${DBC_URL}/topics    ${TOPIC1_DATA}
+    Should Be Equal As Integers  ${resp.status_code}  201   
+
+(DMAAP-294)
+    [Documentation]        Create Topic w pub and sub clients POST ${DBC_URI}/topics endpoint
+    ${resp}=         PostCall    ${DBC_URL}/topics    ${TOPIC2_DATA}
     Should Be Equal As Integers  ${resp.status_code}  201
 
+(DMAAP-295)
+    [Documentation]        Create Topic w no clients and then add a client POST ${DBC_URI}/mr_clients endpoint
+    ${resp}=         PostCall    ${DBC_URL}/topics    ${TOPIC3_DATA}
+    Should Be Equal As Integers  ${resp.status_code}  201   
+    ${resp}=         PostCall    ${DBC_URL}/mr_clients    ${PUB3_DATA}
+    Should Be Equal As Integers  ${resp.status_code}  200   
+    ${resp}=         PostCall    ${DBC_URL}/mr_clients    ${SUB3_DATA}
+    Should Be Equal As Integers  ${resp.status_code}  200   
+
+(DMAAP-297)
+    [Documentation]    Query for all topics and specific topic
+    Create Session     get          ${DBC_URL}
+    ${resp}=           Get Request   get    /topics  
+    Should Be Equal As Integers  ${resp.status_code}  200
+    ${resp}=           Get Request   get    /topics/${TOPIC_NS}.singleMRtopic3
+    Should Be Equal As Integers  ${resp.status_code}  200
+
+(DMAAP-301)
+    [Documentation]    Delete a subscriber
+    Create Session     get          ${DBC_URL}
+    ${resp}=           Get Request   get    /topics/${TOPIC_NS}.singleMRtopic3
+    Should Be Equal As Integers  ${resp.status_code}  200
+	${tmp}=            Get Json Value      ${resp.text}           /clients/1/mrClientId
+	${clientId}=       Remove String       ${tmp}         \"
+    ${resp}=           DelCall   ${DBC_URL}/mr_clients/${clientId}
+    Should Be Equal As Integers  ${resp.status_code}  204
+
+(DMAAP-302)
+    [Documentation]    Delete a publisher
+    Create Session     get          ${DBC_URL}
+    ${resp}=           Get Request   get    /topics/${TOPIC_NS}.singleMRtopic3
+    Should Be Equal As Integers  ${resp.status_code}  200
+	${tmp}=            Get Json Value      ${resp.text}           /clients/0/mrClientId
+	${clientId}=       Remove String       ${tmp}         \"
+    ${resp}=           DelCall   ${DBC_URL}/mr_clients/${clientId}
+    Should Be Equal As Integers  ${resp.status_code}  204
+
+
 *** Keywords ***
 CheckDir
     [Arguments]                 ${path}
@@ -43,3 +97,8 @@
     ${resp}=       Evaluate    requests.post('${url}',data='${data}', headers=${headers},verify=False)    requests
     [Return]       ${resp}
 
+DelCall
+    [Arguments]    ${url}           
+    ${headers}=    Create Dictionary    Accept=application/json    Content-Type=application/json
+    ${resp}=       Evaluate    requests.delete('${url}', headers=${headers},verify=False)    requests
+    [Return]       ${resp}