Skip to content
Permalink
Browse files

Add more Bats tests

Also with other minor enhancements.
  • Loading branch information
mederly committed Sep 28, 2018
1 parent 87f255c commit 8b9b0ede8b1c60d8b87f05941b8294c8190ba7fc
Showing with 154 additions and 39 deletions.
  1. +3 −0 .dockerignore
  2. +7 −27 Jenkinsfile
  3. +10 −2 build.sh
  4. +1 −4 demo/simple/.env
  5. +0 −4 demo/simple/docker-compose.yml
  6. +38 −0 demo/simple/tests/main.bats
  7. +95 −2 library.bash
@@ -0,0 +1,3 @@
demo
.git
tests
@@ -34,9 +34,10 @@ pipeline {
steps { steps {
script { script {
try { try {
sh './download-midpoint &> debug' sh '(docker image ls ; echo Destroying ; bin/destroy.sh ; docker image ls) 2>&1 | tee debug' // temporary
sh 'bin/rebuild.sh &>> debug' sh './download-midpoint 2>&1 | tee -a debug'
sh 'echo Build output ; cat debug' sh 'bin/rebuild.sh 2>&1 | tee -a debug'
//sh 'echo Build output ; cat debug'
} catch (error) { } catch (error) {
def error_details = readFile('./debug') def error_details = readFile('./debug')
def message = "BUILD ERROR: There was a problem building ${imagename}:${tag}. \n\n ${error_details}" def message = "BUILD ERROR: There was a problem building ${imagename}:${tag}. \n\n ${error_details}"
@@ -50,9 +51,9 @@ pipeline {
steps { steps {
script { script {
try { try {
sh 'bin/test.sh &> debug' sh 'bin/test.sh 2>&1 | tee debug'
sh '(cd demo/simple ; bats tests ) &>> debug' sh '(cd demo/simple ; bats tests ) 2>&1 | tee -a debug'
sh 'echo Test output ; cat debug' // sh 'echo Test output ; cat debug'
} catch (error) { } catch (error) {
def error_details = readFile('./debug') def error_details = readFile('./debug')
def message = "BUILD ERROR: There was a problem testing ${imagename}:${tag}. \n\n ${error_details}" def message = "BUILD ERROR: There was a problem testing ${imagename}:${tag}. \n\n ${error_details}"
@@ -62,27 +63,6 @@ pipeline {
} }
} }
} }
/*
stage ('Test2') {
steps {
script {
try {
try {
sh 'docker pull tier/mariadb:mariadb10' // temporary
sh 'env NOCOLOR=true ./test.sh'
} finally {
sh './cleanup.sh'
}
} catch (error) {
def error_details = readFile('./debug')
def message = "BUILD ERROR: There was a problem building ${imagename}:${tag}. \n\n ${error_details}"
sh "rm -f ./debug"
handleError(message)
}
}
}
}
*/
stage ('Push') { stage ('Push') {
steps { steps {
script { script {
@@ -14,8 +14,16 @@ function normalize_path()
} }


cd "$(dirname "$0")" cd "$(dirname "$0")"
./download-midpoint SKIP_DOWNLOAD=0
docker build --tag tier/midpoint:latest midpoint-server while getopts "nh?" opt; do
case $opt in
n) SKIP_DOWNLOAD=1 ;;
h | ?) echo "Options: -n skip download" ; exit 0 ;;
*) echo "Unknown option: $opt" ; exit 1 ;;
esac
done
if [ "$SKIP_DOWNLOAD" = "0" ]; then ./download-midpoint; fi
docker build --tag tier/midpoint:latest .
echo "---------------------------------------------------------------------------------------" echo "---------------------------------------------------------------------------------------"
echo "The midPoint containers were successfully built. To start them, execute the following:" echo "The midPoint containers were successfully built. To start them, execute the following:"
echo "" echo ""
@@ -1,3 +1,4 @@
# These parameters can be overridden by setting environment variables before calling docker-compose up
AUTHENTICATION=internal AUTHENTICATION=internal
ENV=demo ENV=demo
USERTOKEN= USERTOKEN=
@@ -7,8 +8,4 @@ REPO_HOST=midpoint-data
REPO_PORT=default REPO_PORT=default
REPO_DATABASE=registry REPO_DATABASE=registry
REPO_USER=registry_user REPO_USER=registry_user
REPO_PASSWORD_FILE=/run/secrets/m_database_password.txt
KEYSTORE_PASSWORD_FILE=/run/secrets/m_keystore_password.txt
MEM=2048m MEM=2048m
LOGOUT_URL=https://localhost:8443/Shibboleth.sso/Logout
SSO_HEADER=uid
@@ -27,11 +27,7 @@ services:
- REPO_PORT - REPO_PORT
- REPO_DATABASE - REPO_DATABASE
- REPO_USER - REPO_USER
- REPO_PASSWORD_FILE
- KEYSTORE_PASSWORD_FILE
- MEM - MEM
- SSO_HEADER
- LOGOUT_URL
- TIER_BEACON_OPT_OUT - TIER_BEACON_OPT_OUT
networks: networks:
- back - back
@@ -9,6 +9,44 @@ load ../../../library
wait_for_midpoint_start simple_midpoint-server_1 wait_for_midpoint_start simple_midpoint-server_1
} }


@test "010 Check health" {
check_health
}

@test "100 Get 'administrator'" {
check_health
get_and_check_object users 00000000-0000-0000-0000-000000000002 administrator
}

@test "110 And and get 'test110'" {
check_health
echo "<user><name>test110</name></user>" >/tmp/test110.xml
add_object users /tmp/test110.xml
rm /tmp/test110.xml
search_and_check_object users test110
}

@test "300 Check repository preserved between restarts" {
check_health

echo "Creating user test300 and checking its existence"
echo "<user><name>test300</name></user>" >/tmp/test300.xml
add_object users /tmp/test300.xml
rm /tmp/test300.xml
search_and_check_object users test300

echo "Bringing the containers down"
docker-compose down

echo "Re-creating the containers"
docker-compose up --no-start
docker-compose start
wait_for_midpoint_start simple_midpoint-server_1

echo "Searching for the user again"
search_and_check_object users test300
}

@test "999 Clean up" { @test "999 Clean up" {
docker-compose down -v docker-compose down -v
} }
@@ -1,6 +1,12 @@
#!/bin/bash #!/bin/bash


#
# Contains common functions usable for midPoint system tests
#

# Waits until midPoint starts
function wait_for_midpoint_start () { function wait_for_midpoint_start () {
CONTAINER_NAME=$1
ATTEMPT=0 ATTEMPT=0
MAX_ATTEMPTS=20 MAX_ATTEMPTS=20
DELAY=10 DELAY=10
@@ -10,9 +16,96 @@ function wait_for_midpoint_start () {
echo "Waiting $DELAY seconds for midPoint to start (attempt $ATTEMPT) ..." echo "Waiting $DELAY seconds for midPoint to start (attempt $ATTEMPT) ..."
sleep $DELAY sleep $DELAY
docker ps docker ps
( docker logs $1 2>&1 | grep "INFO (com.evolveum.midpoint.web.boot.MidPointSpringApplication): Started MidPointSpringApplication in" ) && return 0 ( docker logs $CONTAINER_NAME 2>&1 | grep "INFO (com.evolveum.midpoint.web.boot.MidPointSpringApplication): Started MidPointSpringApplication in" ) && return 0
done done


echo midPoint did not start in $(( $MAX_ATTEMPTS * $DELAY )) seconds echo midPoint did not start in $(( $MAX_ATTEMPTS * $DELAY )) seconds in $CONTAINER_NAME
return 1 return 1
} }

# Checks the health of midPoint server
function check_health () {
echo Checking health...
(set -o pipefail ; curl -k -f https://localhost:8443/midpoint/actuator/health | tr -d '[:space:]' | grep -q "\"status\":\"UP\"")
status=$?
if [ $status -ne 0 ]; then
echo Error: $status
docker ps
return 1
else
echo OK
return 0
fi
}

# Retrieves XML object and checks if the name matches
function get_and_check_object () {
TYPE=$1
OID=$2
NAME=$3
TMPFILE=$(mktemp /tmp/get.XXXXXX)
echo tmp file is $TMPFILE
curl -k --user administrator:5ecr3t -H "Content-Type: application/xml" -X GET "https://localhost:8443/midpoint/ws/rest/$TYPE/$OID" >$TMPFILE || (rm $TMPFILE ; return 1)
if (grep -q "<name>$NAME</name>" <$TMPFILE); then
echo "Object $TYPE/$OID '$NAME' is OK"
rm $TMPFILE
return 0
else
echo "Object $TYPE/$OID '$NAME' was not found or not retrieved correctly:"
cat $TMPFILE
rm $TMPFILE
return 1
fi
}

# Adds object from a given file
# TODO Returns the OID in OID variable
# it can be found in the following HTTP reader returned: Location: "https://localhost:8443/midpoint/ws/rest/users/85e62669-d36b-41ce-b4f1-1ffdd9f66262"
function add_object () {
TYPE=$1
FILE=$2
echo "Adding to $TYPE from $FILE..."
curl -k --user administrator:5ecr3t -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/$TYPE" -d @$FILE || return 1
#TODO check the returned XML
return 0
}

# Tries to find an object with a given name
# Results of the search are in the $SEARCH_RESULT_FILE
# TODO check if the result is valid (i.e. not an error) - return 1 if invalid, otherwise return 0 ("no objects" is considered OK here)
function search_objects_by_name () {
TYPE=$1
NAME=$2
TMPFILE=$(mktemp /tmp/search.XXXXXX)

curl -k --user administrator:5ecr3t -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/$TYPE/search" -d @- << EOF >$TMPFILE || (rm $TMPFILE ; return 1)
<q:query xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3">
<q:filter>
<q:equal>
<q:path>name</q:path>
<q:value>$NAME</q:value>
</q:equal>
</q:filter>
</q:query>
EOF
SEARCH_RESULT_FILE=$TMPFILE
# TODO check validity of the file
return 0
}

# Searches for object with a given name and verifies it was found
function search_and_check_object () {
TYPE=$1
NAME=$2
search_objects_by_name $TYPE $NAME || return 1
if (grep -q "<name>$NAME</name>" <$SEARCH_RESULT_FILE); then
echo "Object $TYPE/'$NAME' is OK"
rm $SEARCH_RESULT_FILE
return 0
else
echo "Object $TYPE/'$NAME' was not found or not retrieved correctly:"
cat $SEARCH_RESULT_FILE
rm $SEARCH_RESULT_FILE
return 1
fi
}

0 comments on commit 8b9b0ed

Please sign in to comment.
You can’t perform that action at this time.