Skip to content

Commit

Permalink
mock out http requests
Browse files Browse the repository at this point in the history
  • Loading branch information
ivy-rew committed Apr 3, 2024
1 parent 37d0876 commit 86b2aa2
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 14 deletions.
5 changes: 4 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,14 @@ jobs:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt install -y bats
sudo apt install -y bats python3
- name: Test with Bats
shell: 'script -q -e -c "bash {0}"' # work around tty issues
env:
TERM: linux # fix tput for tty issue work around
run: |
cd tests
python3 -m http.server --bind 127.0.0.1 &
export BASE_URL="http://127.0.0.1:8000"
curl "$BASE_URL/"
bats -t .
24 changes: 13 additions & 11 deletions bin/jenkinsOp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@
SELECT=$1

JOB=core_ci
if [ ! -z "$3" ]
then
JOB=$3
if [ ! -z "$3" ]; then
JOB=$3
fi

JENKINS="jenkins.ivyteam.io"
URL="https://${JENKINS}/job/${JOB}/"
if [ -z "${BASE_URL}" ]; then
BASE_URL="https://${JENKINS}/"
fi
DIR="$( cd "$( dirname "$BASH_SOURCE" )" && pwd )"
echo "working with ${BASE_URL}"

ENV="$DIR/.env"
if [ -f $ENV ]; then
Expand All @@ -29,14 +31,14 @@ if ! [ -x "$(command -v curl)" ]; then
fi

getAvailableBranches(){
local JSON=$(curl -sS "${URL}/api/json?tree=jobs\[name\]")
local JSON=$(curl -sS "${BASE_URL}/job/${JOB}/api/json?tree=jobs\[name\]")
local BRANCHES="$(jsonField "${JSON}" "name" \
| sed -e 's|%2F|/|' )"
echo ${BRANCHES}
}

getAvailableTestJobs(){
local JSON=$(curl -sS "https://$JENKINS/api/json?tree=jobs\[name\]")
local JSON=$(curl -sS "${BASE_URL}/api/json?tree=jobs\[name\]")
local JOBS="$(jsonField "$JSON" "name" \
| grep 'core_product\|core_test\|core_ci\|core_json-schema' \
| sed -e 's|%2F|/|' )"
Expand All @@ -46,7 +48,7 @@ getAvailableTestJobs(){
getHealth(){
JOB="$1"
BRANCH="$2"
API_URI="https://${JENKINS}/job/${JOB}/job/${BRANCH}/api/json?tree=color"
API_URI="${BASE_URL}/job/${JOB}/job/${BRANCH}/api/json?tree=color"
JSON=$(curl -sS "${API_URI}")
COLOR=$(jsonField "${JSON}" "color")
colorToEmo $COLOR
Expand Down Expand Up @@ -95,13 +97,13 @@ triggerBuild(){
RUN_JOB=$1
BRANCH=$2

JOB_URL="https://$JENKINS/job/${RUN_JOB}/job/${BRANCH}"
JOB_URL="${BASE_URL}/job/${RUN_JOB}/job/${BRANCH}"
RESPONSE=$( requestBuild ${JOB_URL} )
echo -e "[ $( statusColor ${RESPONSE} ) ] @ $JOB_URL"

if [ "$RESPONSE" == 404 ] || [ "$RESPONSE" == 409 ] ; then
# job may requires a manual rescan to expose our new branch | isolate in sub bash to avoid conflicts!
SCANNED=$( rescanBranches "https://$JENKINS/job/$RUN_JOB/" 3>&1 1>&2 2>&3 )
SCANNED=$( rescanBranches "${BASE_URL}/job/$RUN_JOB/" 3>&1 1>&2 2>&3 )
# re-try
RESPONSE=$( requestBuild ${JOB_URL} )
echo -e "[ $( statusColor ${RESPONSE} ) ] @ $JOB_URL"
Expand All @@ -121,7 +123,7 @@ requestBuild(){

# get XSS preventention token
if [ -z ${CRUMB+x} ]; then
ISSUER_URI="https://${JENKINS}/crumbIssuer/api/xml"
ISSUER_URI="${BASE_URL}/crumbIssuer/api/xml"
CRUMB=$(curl -sS --basic -u "${JENKINS_USER}:${JENKINS_TOKEN}" "$ISSUER_URI") \
| grep -o -E '"crumb":"[^"]*' | sed -e 's|"crumb":"||'
export CRUMB="$CRUMB" #re-use for follow up requests
Expand Down Expand Up @@ -164,7 +166,7 @@ createView(){
BRANCH=$1
BRANCH_NAME=$( echo $BRANCH | sed -e 's|/|_|')
ISSUE_REGEX=$( echo ".*${BRANCH}" | sed -e 's|.*/|\.*|' )
MYVIEWS_URL="https://$JENKINS/user/${JENKINS_USER}/my-views"
MYVIEWS_URL="${BASE_URL}/user/${JENKINS_USER}/my-views"
curl -sS -k -X POST -u "$JENKINS_USER:$JENKINS_TOKEN" -H "$CRUMB" \
--form name="${BRANCH_NAME}" --form mode=hudson.model.ListView \
--form json="{'name': '${BRANCH_NAME}', 'mode': 'hudson.model.ListView', 'useincluderegex': 'on', 'includeRegex': '${ISSUE_REGEX}', 'recurse': 'true'}" \
Expand Down
3 changes: 1 addition & 2 deletions tests/jenkins_test.bats
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ setup(){
}

@test "loadBranches" {
skip "http"
branches=$(getAvailableBranches)
[[ " ${branches[@]} " =~ "master" ]] # contains master
}
Expand All @@ -29,7 +28,7 @@ setup(){
}

@test "connectability" {
URL="http://jenkins.ivyteam.oblivion"
BASE_URL="http://jenkins.ivyteam.oblivion"
rm -f /tmp/stderr
getAvailableBranches 2> /tmp/stderr
grep "Could not resolve host" /tmp/stderr
Expand Down
42 changes: 42 additions & 0 deletions tests/mock/job/core_ci/api/json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{"_class":"org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject",
"jobs":[
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"PR-4741"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"PR-5076"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"PR-5287"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"PR-5412"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"PR-5435"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"XIVY-11800-zRemove"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"XIVY-13150%2Ffix-button"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"XIVY-13553_primefaces_update"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"XIVY-13553_primefaces_update_130"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"XIVY-13635-pjson-113"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"basicAuthLogs"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"coolstuff%2Fclassfile"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"coolstuff%2Fhealthcheck"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"crypto"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"crypto-base64"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"dev10.0"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"dev11.1"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"dev11.2"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"eclipse-2023-12"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"es-escape-whitspaces"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"exclude-CVE-2024-28752"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"java21"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"mail-semaphore"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"master"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"maven-mirror.ivyteam.io"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"priority"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"public-api-jar"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"public-api-jar-rule"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"r8-ticket-3999"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"release%2F10.0"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"release%2F11.2"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"release%2F8.0"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"release%2F9.1"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"release%2F9.2"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"release%2F9.3"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"release%2F9.4"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"snakeyaml-rexport"},
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob","name":"test_cluster_slave"}
]
}

0 comments on commit 86b2aa2

Please sign in to comment.