Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/bats'
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Oct 3, 2018
2 parents 54f02b6 + 9a16f7b commit a88d5a3
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 66 deletions.
39 changes: 33 additions & 6 deletions demo/complex/tests/main.bats
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ load ../../../library
touch $BATS_TMPDIR/not-started
wait_for_midpoint_start complex_midpoint-server_1 complex_midpoint-data_1
wait_for_shibboleth_idp_start complex_idp_1
wait_for_grouper_ui_start complex_grouper-ui_1
rm $BATS_TMPDIR/not-started
# TODO wait for shibboleth, grouper-ui, (also something other?)
}

@test "040 Check midPoint health" {
Expand Down Expand Up @@ -53,19 +53,34 @@ load ../../../library
add_object users /tmp/test110.xml
rm /tmp/test110.xml
search_and_check_object users test110
# TODO delete user after
delete_object_by_name users test110
}

@test "200 Upload objects" {
if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
check_health
pwd >&2
./upload-objects

search_and_check_object objectTemplates template-org-course
search_and_check_object objectTemplates template-org-department
search_and_check_object objectTemplates template-role-affiliation
search_and_check_object objectTemplates template-role-generic-group
# TODO check other objects that were uploaded

search_and_check_object orgs courses
search_and_check_object orgs departments

search_and_check_object resources "OpenLDAP (directory)"
search_and_check_object resources "Grouper SQL/MQ"
search_and_check_object resources "SQL SIS courses (sources)"
search_and_check_object resources "SQL SIS persons (sources)"

search_and_check_object roles metarole-affiliation
search_and_check_object roles metarole-course
search_and_check_object roles metarole-department
search_and_check_object roles metarole-generic-group
search_and_check_object roles role-grouper-sysadmin
search_and_check_object roles role-ldap-basic
}

@test "210 Test resource" {
Expand Down Expand Up @@ -94,7 +109,18 @@ load ../../../library
search_and_check_object users amorrison
search_and_check_object users wprice
search_and_check_object users mroberts
# TODO check in LDAP, check assignments etc

check_ldap_account_by_user_name jsmith complex_directory_1
check_ldap_account_by_user_name banderson complex_directory_1
check_ldap_account_by_user_name kwhite complex_directory_1
check_ldap_account_by_user_name whenderson complex_directory_1
check_ldap_account_by_user_name ddavis complex_directory_1
check_ldap_account_by_user_name cmorrison complex_directory_1
check_ldap_account_by_user_name danderson complex_directory_1
check_ldap_account_by_user_name amorrison complex_directory_1
check_ldap_account_by_user_name wprice complex_directory_1
check_ldap_account_by_user_name mroberts complex_directory_1
# TODO check assignments etc
}

@test "230 Check 'TestUser230' in Midpoint and LDAP" {
Expand All @@ -105,12 +131,13 @@ load ../../../library
rm /tmp/testuser230.xml
search_and_check_object users TestUser230

execute_bulk_action tests/resources/bulk-action/recom-role-grouper-sysadmin.xml

execute_bulk_action tests/resources/bulk-action/recom-role-grouper-sysadmin.xml
execute_bulk_action tests/resources/bulk-action/assign-role-grouper-sysadmin-to-test-user.xml

check_ldap_account_by_user_name TestUser230 complex_directory_1
check_of_ldap_membership TestUser230 sysadmingroup complex_directory_1

delete_object_by_name users TestUser230
}


Expand Down
33 changes: 0 additions & 33 deletions demo/shibboleth/test.sh

This file was deleted.

108 changes: 81 additions & 27 deletions library.bash
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ function generic_wait_for_log () {
FAILURE="$4"
ADDITIONAL_CONTAINER_NAME=$5
ATTEMPT=0
MAX_ATTEMPTS=20
MAX_ATTEMPTS=40
DELAY=10

until [[ $ATTEMPT = $MAX_ATTEMPTS ]]; do
Expand Down Expand Up @@ -45,11 +45,17 @@ function wait_for_midpoint_start () {
generic_wait_for_log $1 "INFO (com.evolveum.midpoint.web.boot.MidPointSpringApplication): Started MidPointSpringApplication in" "midPoint to start" "midPoint did not start" $2
}

# Waits until Shibboleth IDP starts ... TODO refactor using generic waiting function
# Waits until Shibboleth IDP starts
function wait_for_shibboleth_idp_start () {
generic_wait_for_log $1 "INFO:oejs.Server:main: Started" "shibboleth idp to start" "shibboleth idp did not start" $2
}

# Waits until Grouper UI starts
function wait_for_grouper_ui_start () {
generic_wait_for_log $1 "INFO org.apache.catalina.startup.Catalina- Server startup in" "grouper ui to start" "grouper ui did not start" $2
}


# Checks the health of midPoint server
function check_health () {
echo Checking health...
Expand Down Expand Up @@ -110,32 +116,31 @@ function get_and_check_object () {
}

# 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 () {
local TYPE=$1
local FILE=$2
TMPFILE=$(mktemp /tmp/execbulkaction.XXXXXX)
echo "Adding to $TYPE from $FILE..."

local response=$(curl -k -sD - --silent --write-out "%{http_code}" --user administrator:5ecr3t -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/$TYPE" -d @$FILE)
local http_code=$(sed '$!d' <<<"$response")
curl -k -sD - --silent --write-out "%{http_code}" --user administrator:5ecr3t -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/$TYPE" -d @$FILE >$TMPFILE
local HTTP_CODE=$(sed '$!d' $TMPFILE)

if [ "$http_code" -eq 201 ] || [ "$http_code" -eq 202 ]; then
if [ "$HTTP_CODE" -eq 201 ] || [ "$HTTP_CODE" -eq 202 ]; then

# get the real Location
local location=$(grep -oP "Location: \K.*" <<<"$response")
OID=$(sed 's/.*\///' <<<"$location")
OID=$(grep -oP "Location: \K.*" $TMPFILE | awk -F "$TYPE/" '{print $2}') || (echo "Couldn't extract oid from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)

echo "Oid created object: $OID"
rm $TMPFILE
return 0
else
echo "Error code: $http_code"
if [ "$http_code" -eq 500 ]; then
echo "Error code: $HTTP_CODE"
if [ "$HTTP_CODE" -ge 500 ]; then
echo "Error message: Internal server error. Unexpected error occurred, if necessary please contact system administrator."
else
local error_message=$(grep 'message' <<<"$response" | head -1 | awk -F">" '{print $2}' | awk -F"<" '{print $1}')
echo "Error message: $error_message"
local ERROR_MESSAGE=$(xmllint --xpath "/*/*[local-name()='error']/text()" $TMPFILE) || (echo "Couldn't extract error message from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
echo "Error message: $ERROR_MESSAGE"
fi
rm $TMPFILE
return 1
fi
}
Expand All @@ -145,14 +150,16 @@ function execute_bulk_action () {
echo "Executing bulk action from $FILE..."
TMPFILE=$(mktemp /tmp/execbulkaction.XXXXXX)

curl -k --silent --write-out "%{http_code}" --user administrator:5ecr3t -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/rpc/executeScript" -d @$FILE >$TMPFILE
(curl -k --silent --write-out "%{http_code}" --user administrator:5ecr3t -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/rpc/executeScript" -d @$FILE >$TMPFILE) || (echo "Midpoint logs: " ; docker logs "complex_midpoint-server_1" ; return 1)
local HTTP_CODE=$(sed '$!d' $TMPFILE)
sed -i '$ d' $TMPFILE

if [ "$HTTP_CODE" -eq 200 ]; then

local STATUS=$(xmllint --xpath "/*/*/*[local-name()='status']/text()" $TMPFILE) || (echo "Couldn't extract status from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
if [ $STATUS = "success" ]; then
local CONSOLE_OUTPUT=$(xmllint --xpath "/*/*/*[local-name()='consoleOutput']/text()" $TMPFILE) || (echo "Couldn't extract console output from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
echo "Console output: $CONSOLE_OUTPUT"
rm $TMPFILE
return 0
else
Expand All @@ -165,20 +172,61 @@ function execute_bulk_action () {

else
echo "Error code: $HTTP_CODE"
if [ "$http_code" -eq 500 ]; then
if [ "$HTTP_CODE" -ge 500 ]; then
echo "Error message: Internal server error. Unexpected error occurred, if necessary please contact system administrator."
else
local ERROR_MESSAGE=$(xmllint --xpath "/*/*[local-name()='error']/text()" $TMPFILE) || (echo "Couldn't extract error message from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
echo "Error message: $ERROR_MESSAGE"
fi
rm $TMPFILE
return 1
fi
}

function delete_object_by_name () {
local TYPE=$1
local NAME=$2
search_objects_by_name users $NAME
local OID=$(xmllint --xpath "/*/*[local-name()='object']/@oid" $SEARCH_RESULT_FILE | awk -F"\"" '{print $2}' ) || (echo "Couldn't extract oid from file:" ; cat $SEARCH_RESULT_FILE ; rm $SEARCH_RESULT_FILE; return 1)
delete_object $TYPE $OID
}

function delete_object () {
local TYPE=$1
local OID=$2
echo "Deleting object with type $TYPE and oid $OID..."
TMPFILE=$(mktemp /tmp/delete.XXXXXX)

curl -k --silent --write-out "%{http_code}" --user administrator:5ecr3t -H "Content-Type: application/xml" -X DELETE "https://localhost:8443/midpoint/ws/rest/$TYPE/$OID" >$TMPFILE
local HTTP_CODE=$(sed '$!d' $TMPFILE)
sed -i '$ d' $TMPFILE

if [ "$HTTP_CODE" -eq 204 ]; then

echo "Object with type $TYPE and oid $OID was deleted"
rm $TMPFILE
return 0
else
echo "Error code: $HTTP_CODE"
if [ "$HTTP_CODE" -ge 500 ]; then
echo "Error message: Internal server error. Unexpected error occurred, if necessary please contact system administrator."
else
local ERROR_MESSAGE=$(xmllint --xpath "/*/*[local-name()='error']/text()" $TMPFILE) || (echo "Couldn't extract error message from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
echo "Error message: $ERROR_MESSAGE"
fi
rm $TMPFILE
return 1
fi
}



# 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"
local TYPE=$1
local NAME="$2"
TMPFILE=$(mktemp /tmp/search.XXXXXX)

curl -k --write-out %{http_code} --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)
Expand All @@ -191,15 +239,21 @@ function search_objects_by_name () {
</q:filter>
</q:query>
EOF
SEARCH_RESULT_FILE=$TMPFILE

http_code=$(sed '$!d' <<<"$(cat $SEARCH_RESULT_FILE)")
local HTTP_CODE=$(sed '$!d' <<<"$(cat $TMPFILE)")
sed -i '$ d' $TMPFILE
cat $TMPFILE

sed -i '$ d' $SEARCH_RESULT_FILE
cat $SEARCH_RESULT_FILE
if [ "$http_code" -eq 200 ]; then
if [ "$HTTP_CODE" -eq 200 ]; then
SEARCH_RESULT_FILE=$TMPFILE
return 0
else
echo "Error code: $HTTP_CODE"
if [ "$HTTP_CODE" -ge 500 ]; then
echo "Error message: Internal server error. Unexpected error occurred, if necessary please contact system administrator."
else
local ERROR_MESSAGE=$(xmllint --xpath "/*/*[local-name()='error']/text()" $TMPFILE) || (echo "Couldn't extract error message from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
echo "Error message: $ERROR_MESSAGE"
fi
rm $SEARCH_RESULT_FILE
return 1
fi
Expand Down Expand Up @@ -293,7 +347,7 @@ function search_ldap_object_by_filter () {
}

function check_ldap_account_by_user_name () {
local NAME=$1
local NAME="$1"
local LDAP_CONTAINER=$2
search_ldap_object_by_filter "ou=people,dc=internet2,dc=edu" "uid=$NAME" $LDAP_CONTAINER
search_objects_by_name users $NAME
Expand All @@ -318,8 +372,8 @@ function check_ldap_account_by_user_name () {
}

function check_of_ldap_membership () {
local NAME_OF_USER=$1
local NAME_OF_GROUP=$2
local NAME_OF_USER="$1"
local NAME_OF_GROUP="$2"
local LDAP_CONTAINER=$3
search_ldap_object_by_filter "ou=people,dc=internet2,dc=edu" "uid=$NAME_OF_USER" $LDAP_CONTAINER

Expand Down

0 comments on commit a88d5a3

Please sign in to comment.