* feat: move to new run.sh container friendly file (#1244)
* fix: unit tests were very broken Co-authored-by: toast-gear <toast-gear@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									366f8927d8
								
							
						
					
					
						commit
						2cb04ddde7
					
				|  | @ -18,5 +18,4 @@ jobs: | ||||||
|       uses: actions/checkout@v3 |       uses: actions/checkout@v3 | ||||||
|     - name: Run unit tests for entrypoint.sh |     - name: Run unit tests for entrypoint.sh | ||||||
|       run: | |       run: | | ||||||
|         cd test/entrypoint |         make acceptance/runner/entrypoint | ||||||
|         bash entrypoint_unittest.sh |  | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										3
									
								
								Makefile
								
								
								
								
							|  | @ -197,6 +197,9 @@ acceptance/deploy: | ||||||
| acceptance/tests: | acceptance/tests: | ||||||
| 	acceptance/checks.sh | 	acceptance/checks.sh | ||||||
| 
 | 
 | ||||||
|  | acceptance/runner/entrypoint: | ||||||
|  | 	cd test/entrypoint/ && bash test.sh | ||||||
|  | 
 | ||||||
| # We use -count=1 instead of `go clean -testcache`
 | # We use -count=1 instead of `go clean -testcache`
 | ||||||
| # See https://terratest.gruntwork.io/docs/testing-best-practices/avoid-test-caching/
 | # See https://terratest.gruntwork.io/docs/testing-best-practices/avoid-test-caching/
 | ||||||
| .PHONY: e2e | .PHONY: e2e | ||||||
|  |  | ||||||
|  | @ -111,7 +111,6 @@ RUN mkdir /opt/hostedtoolcache \ | ||||||
|     && chmod g+rwx /opt/hostedtoolcache |     && chmod g+rwx /opt/hostedtoolcache | ||||||
| 
 | 
 | ||||||
| COPY entrypoint.sh / | COPY entrypoint.sh / | ||||||
| COPY --chown=runner:docker patched $RUNNER_ASSETS_DIR/patched |  | ||||||
| 
 | 
 | ||||||
| # Add the Python "User Script Directory" to the PATH | # Add the Python "User Script Directory" to the PATH | ||||||
| ENV PATH="${PATH}:${HOME}/.local/bin" | ENV PATH="${PATH}:${HOME}/.local/bin" | ||||||
|  |  | ||||||
|  | @ -114,8 +114,6 @@ RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
| 
 | 
 | ||||||
| VOLUME /var/lib/docker | VOLUME /var/lib/docker | ||||||
| 
 | 
 | ||||||
| COPY --chown=runner:docker patched $RUNNER_ASSETS_DIR/patched |  | ||||||
| 
 |  | ||||||
| # Add the Python "User Script Directory" to the PATH | # Add the Python "User Script Directory" to the PATH | ||||||
| ENV PATH="${PATH}:${HOME}/.local/bin" | ENV PATH="${PATH}:${HOME}/.local/bin" | ||||||
| ENV ImageOS=ubuntu20 | ENV ImageOS=ubuntu20 | ||||||
|  |  | ||||||
|  | @ -92,7 +92,7 @@ cd ${RUNNER_HOME} | ||||||
| # past that point, it's all relative pathes from /runner | # past that point, it's all relative pathes from /runner | ||||||
| 
 | 
 | ||||||
| config_args=() | config_args=() | ||||||
| if [ "${RUNNER_FEATURE_FLAG_EPHEMERAL:-}" == "true" -a "${RUNNER_EPHEMERAL}" != "false" ]; then | if [ "${RUNNER_FEATURE_FLAG_EPHEMERAL:-}" == "true" -a "${RUNNER_EPHEMERAL}" == "true" ]; then | ||||||
|   config_args+=(--ephemeral) |   config_args+=(--ephemeral) | ||||||
|   echo "Passing --ephemeral to config.sh to enable the ephemeral runner." |   echo "Passing --ephemeral to config.sh to enable the ephemeral runner." | ||||||
| fi | fi | ||||||
|  | @ -154,22 +154,17 @@ if [ -z "${UNITTEST:-}" ]; then | ||||||
|   mkdir ./externals |   mkdir ./externals | ||||||
|   # Hack due to the DinD volumes |   # Hack due to the DinD volumes | ||||||
|   mv ./externalstmp/* ./externals/ |   mv ./externalstmp/* ./externals/ | ||||||
| 
 |  | ||||||
|   for f in runsvc.sh RunnerService.js; do |  | ||||||
|     diff {bin,patched}/${f} || : |  | ||||||
|     sudo mv bin/${f}{,.bak} |  | ||||||
|     sudo mv {patched,bin}/${f} |  | ||||||
|   done |  | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| args=() | args=() | ||||||
| if [ "${RUNNER_FEATURE_FLAG_EPHEMERAL:-}" != "true" -a "${RUNNER_EPHEMERAL}" != "false" ]; then | if [ "${RUNNER_FEATURE_FLAG_EPHEMERAL:-}" != "true" -a "${RUNNER_EPHEMERAL}" == "true" ]; then | ||||||
|   args+=(--once) |   args+=(--once) | ||||||
|   echo "[WARNING] Passing --once is deprecated and will be removed as an option from the image and ARC at the release of 0.24.0." |   echo "[WARNING] Passing --once is deprecated and will be removed as an option from the image and ARC at the release of 0.24.0." | ||||||
|   echo "[WARNING] Upgrade to GHES => 3.3 to continue using actions-runner-controller. If you are using github.com ignore this warning." |   echo "[WARNING] Upgrade to GHES => 3.3 to continue using actions-runner-controller. If you are using github.com ignore this warning." | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| unset RUNNER_NAME RUNNER_REPO RUNNER_TOKEN | # Unset entrypoint environment variables so they don't leak into the runner environment | ||||||
|  | unset RUNNER_NAME RUNNER_REPO RUNNER_TOKEN STARTUP_DELAY_IN_SECONDS DISABLE_WAIT_FOR_DOCKER | ||||||
| 
 | 
 | ||||||
| # Docker ignores PAM and thus never loads the system environment variables that | # Docker ignores PAM and thus never loads the system environment variables that | ||||||
| # are meant to be set in every environment of every user. We emulate the PAM | # are meant to be set in every environment of every user. We emulate the PAM | ||||||
|  | @ -177,5 +172,10 @@ unset RUNNER_NAME RUNNER_REPO RUNNER_TOKEN | ||||||
| # | # | ||||||
| # https://github.com/actions-runner-controller/actions-runner-controller/issues/1135 | # https://github.com/actions-runner-controller/actions-runner-controller/issues/1135 | ||||||
| # https://github.com/actions/runner/issues/1703 | # https://github.com/actions/runner/issues/1703 | ||||||
| mapfile -t env </etc/environment | 
 | ||||||
| exec env -- "${env[@]}" ./bin/runsvc.sh "${args[@]}" | # /etc/environment may not exist when running unit tests depending on the platform being used | ||||||
|  | # (e.g. Mac OS) so we just skip the mapping entirely | ||||||
|  | if [ -z "${UNITTEST:-}" ]; then | ||||||
|  |   mapfile -t env </etc/environment | ||||||
|  | fi | ||||||
|  | exec env -- "${env[@]}" ./run.sh "${args[@]}" | ||||||
|  |  | ||||||
|  | @ -1,91 +0,0 @@ | ||||||
| #!/usr/bin/env node
 |  | ||||||
| // Copyright (c) GitHub. All rights reserved.
 |  | ||||||
| // Licensed under the MIT license. See LICENSE file in the project root for full license information.
 |  | ||||||
| 
 |  | ||||||
| var childProcess = require("child_process"); |  | ||||||
| var path = require("path") |  | ||||||
| 
 |  | ||||||
| var supported = ['linux', 'darwin'] |  | ||||||
| 
 |  | ||||||
| if (supported.indexOf(process.platform) == -1) { |  | ||||||
|     console.log('Unsupported platform: ' + process.platform); |  | ||||||
|     console.log('Supported platforms are: ' + supported.toString()); |  | ||||||
|     process.exit(1); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| var stopping = false; |  | ||||||
| var listener = null; |  | ||||||
| 
 |  | ||||||
| var runService = function() { |  | ||||||
|     var listenerExePath = path.join(__dirname, '../bin/Runner.Listener'); |  | ||||||
|     var interactive = process.argv[2] === "interactive"; |  | ||||||
| 
 |  | ||||||
|     if(!stopping) { |  | ||||||
|         try { |  | ||||||
|             if (interactive) { |  | ||||||
|                 console.log('Starting Runner listener interactively'); |  | ||||||
|                 listener = childProcess.spawn(listenerExePath, ['run'].concat(process.argv.slice(3)), { env: process.env }); |  | ||||||
|             } else { |  | ||||||
|                 console.log('Starting Runner listener with startup type: service'); |  | ||||||
|                 listener = childProcess.spawn(listenerExePath, ['run', '--startuptype', 'service'].concat(process.argv.slice(2)), { env: process.env }); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             console.log('Started listener process'); |  | ||||||
| 
 |  | ||||||
|             listener.stdout.on('data', (data) => { |  | ||||||
|                 process.stdout.write(data.toString('utf8')); |  | ||||||
|             }); |  | ||||||
| 
 |  | ||||||
|             listener.stderr.on('data', (data) => { |  | ||||||
|                 process.stdout.write(data.toString('utf8')); |  | ||||||
|             }); |  | ||||||
| 
 |  | ||||||
|             listener.on('close', (code) => { |  | ||||||
|                 console.log(`Runner listener exited with error code ${code}`); |  | ||||||
| 
 |  | ||||||
|                 if (code === 0) { |  | ||||||
|                     console.log('Runner listener exit with 0 return code, stop the service, no retry needed.'); |  | ||||||
|                     stopping = true; |  | ||||||
|                 } else if (code === 1) { |  | ||||||
|                     console.log('Runner listener exit with terminated error, stop the service, no retry needed.'); |  | ||||||
|                     stopping = true; |  | ||||||
|                 } else if (code === 2) { |  | ||||||
|                     console.log('Runner listener exit with retryable error, re-launch runner in 5 seconds.'); |  | ||||||
|                 } else if (code === 3) { |  | ||||||
|                     console.log('Runner listener exit because of updating, re-launch runner in 5 seconds.'); |  | ||||||
|                 } else { |  | ||||||
|                     console.log('Runner listener exit with undefined return code, re-launch runner in 5 seconds.'); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if(!stopping) { |  | ||||||
|                     setTimeout(runService, 5000); |  | ||||||
|                 } |  | ||||||
|             }); |  | ||||||
| 
 |  | ||||||
|         } catch(ex) { |  | ||||||
|             console.log(ex); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| runService(); |  | ||||||
| console.log('Started running service'); |  | ||||||
| 
 |  | ||||||
| var gracefulShutdown = function(code) { |  | ||||||
|     console.log('Shutting down runner listener'); |  | ||||||
|     stopping = true; |  | ||||||
|     if (listener) { |  | ||||||
|         console.log('Sending SIGINT to runner listener to stop'); |  | ||||||
|         listener.kill('SIGINT'); |  | ||||||
| 
 |  | ||||||
|         // TODO wait for 30 seconds and send a SIGKILL
 |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| process.on('SIGINT', () => { |  | ||||||
|     gracefulShutdown(0); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| process.on('SIGTERM', () => { |  | ||||||
|     gracefulShutdown(0); |  | ||||||
| }); |  | ||||||
|  | @ -1,20 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| # convert SIGTERM signal to SIGINT |  | ||||||
| # for more info on how to propagate SIGTERM to a child process see: http://veithen.github.io/2014/11/16/sigterm-propagation.html |  | ||||||
| trap 'kill -INT $PID' TERM INT |  | ||||||
| 
 |  | ||||||
| if [ -f ".path" ]; then |  | ||||||
|     # configure |  | ||||||
|     export PATH=`cat .path` |  | ||||||
|     echo ".path=${PATH}" |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # insert anything to setup env when running as a service |  | ||||||
| 
 |  | ||||||
| # run the host process which keep the listener alive |  | ||||||
| ./externals/node12/bin/node ./bin/RunnerService.js $* & |  | ||||||
| PID=$! |  | ||||||
| wait $PID |  | ||||||
| trap - TERM INT |  | ||||||
| wait $PID |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| #!/bin/bash | #!/usr/bin/env bash | ||||||
| 
 | 
 | ||||||
| export LIGHTGREEN='\e[0;32m' | export LIGHTGREEN='\e[0;32m' | ||||||
| export LIGHTRED='\e[0;31m' | export LIGHTRED='\e[0;31m' | ||||||
|  | @ -18,11 +18,15 @@ error(){ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| success "I'm configured normally" | success "I'm configured normally" | ||||||
| touch .runner | 
 | ||||||
| echo "$*" > runner_config | # Condition for should_retry_configuring test | ||||||
|  | if [ -z "${FAIL_RUNNER_CONFIG_SETUP}" ]; then | ||||||
|  |   touch .runner | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | echo "$@" > runner_config | ||||||
| success "created a dummy config file" | success "created a dummy config file" | ||||||
| success | # adding a counter to see how many times we've gone through the configuration step | ||||||
| # Adding a counter to see how many times we've gone through the configuration step |  | ||||||
| count=`cat counter 2>/dev/null|| echo "0"` | count=`cat counter 2>/dev/null|| echo "0"` | ||||||
| count=$((count + 1)) | count=$((count + 1)) | ||||||
| echo ${count} > counter | echo ${count} > counter | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| #!/bin/bash | #!/usr/bin/env bash | ||||||
| 
 | 
 | ||||||
| export LIGHTGREEN='\e[0;32m' | export LIGHTGREEN='\e[0;32m' | ||||||
| export LIGHTRED='\e[0;31m' | export LIGHTRED='\e[0;31m' | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| #!/bin/bash | #!/usr/bin/env bash | ||||||
| 
 | 
 | ||||||
| set -euo pipefail | set -euo pipefail | ||||||
| 
 | 
 | ||||||
|  | @ -20,12 +20,9 @@ error(){ | ||||||
|   exit 1 |   exit 1 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | log "Dumping set runner arguments" | ||||||
|  | echo "$@" > runner_args | ||||||
|  | success "Pretending to run service..." | ||||||
|  | touch run_sh_ran | ||||||
|  | success "Success" | ||||||
| success "" | success "" | ||||||
| success "Running the service..." |  | ||||||
| # SHOULD NOT HAPPEN |  | ||||||
| # creating a file to show this script has run |  | ||||||
| touch runsvc_ran |  | ||||||
| success "...successful" |  | ||||||
| success "" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  | @ -1,29 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| set -euo pipefail |  | ||||||
| 
 |  | ||||||
| export LIGHTGREEN='\e[0;32m' |  | ||||||
| export LIGHTRED='\e[0;31m' |  | ||||||
| export WHITE='\e[0;97m' |  | ||||||
| export RESET='\e[0m' |  | ||||||
| 
 |  | ||||||
| log(){ |  | ||||||
|   printf "\t${WHITE}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success(){ |  | ||||||
|   printf "\t${LIGHTGREEN}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| error(){ |  | ||||||
|   printf "\t${LIGHTRED}$@${RESET}\n" 2>&1 |  | ||||||
|   exit 1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| echo "$*" > runner_config |  | ||||||
| success "I'm pretending the configuration is not successful" |  | ||||||
| # increasing a counter to measure how many times we restarted |  | ||||||
| count=`cat counter 2>/dev/null|| echo "0"` |  | ||||||
| count=$((count + 1)) |  | ||||||
| echo ${count} > counter |  | ||||||
| 
 |  | ||||||
|  | @ -1,12 +1,12 @@ | ||||||
| #!/bin/bash | #!/usr/bin/env bash | ||||||
| 
 | 
 | ||||||
| # UNITTEST: retry config | # UNITTEST: retry config | ||||||
| # Will simulate a configuration failure and expects: | # Will simulate a configuration failure and expects: | ||||||
| # - the configuration step to be run 10 times | # - the configuration step to be run 10 times | ||||||
| # - the entrypoint script to exit with error code 2 | # - the entrypoint script to exit with error code 2 | ||||||
| # - the runsvc.sh script to never run. | # - the run.sh script to never run. | ||||||
| 
 | 
 | ||||||
| source ../logging.sh | source ../assets/logging.sh | ||||||
| 
 | 
 | ||||||
| entrypoint_log() { | entrypoint_log() { | ||||||
|   while read I; do |   while read I; do | ||||||
|  | @ -14,17 +14,22 @@ entrypoint_log() { | ||||||
|   done |   done | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| log "Setting up the test" | log "Setting up test area" | ||||||
|  | export RUNNER_HOME=testarea | ||||||
|  | mkdir -p ${RUNNER_HOME} | ||||||
|  | 
 | ||||||
|  | log "Setting up the test config" | ||||||
| export UNITTEST=true | export UNITTEST=true | ||||||
| export RUNNER_HOME=localhome | export FAIL_RUNNER_CONFIG_SETUP=true | ||||||
| export RUNNER_NAME="example_runner_name" | export RUNNER_NAME="example_runner_name" | ||||||
| export RUNNER_REPO="myorg/myrepo" | export RUNNER_REPO="myorg/myrepo" | ||||||
| export RUNNER_TOKEN="xxxxxxxxxxxxx" | export RUNNER_TOKEN="xxxxxxxxxxxxx" | ||||||
| 
 | 
 | ||||||
| mkdir -p ${RUNNER_HOME}/bin | # run.sh and config.sh get used by the runner's real entrypoint.sh and are part of actions/runner. | ||||||
| # add up the config.sh and runsvc.sh | # We change symlink dummy versions so the entrypoint.sh can run allowing us to test the real entrypoint.sh | ||||||
| ln -s ../config.sh ${RUNNER_HOME}/config.sh | log "Symlink dummy config.sh and run.sh" | ||||||
| ln -s ../../runsvc.sh ${RUNNER_HOME}/bin/runsvc.sh | ln -s ../../assets/config.sh ${RUNNER_HOME}/config.sh | ||||||
|  | ln -s ../../assets/run.sh ${RUNNER_HOME}/run.sh | ||||||
| 
 | 
 | ||||||
| cleanup() { | cleanup() { | ||||||
|   rm -rf ${RUNNER_HOME} |   rm -rf ${RUNNER_HOME} | ||||||
|  | @ -33,41 +38,44 @@ cleanup() { | ||||||
|   unset RUNNER_NAME |   unset RUNNER_NAME | ||||||
|   unset RUNNER_REPO |   unset RUNNER_REPO | ||||||
|   unset RUNNER_TOKEN |   unset RUNNER_TOKEN | ||||||
|  |   unset FAIL_RUNNER_CONFIG_SETUP | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | # Always run cleanup when test ends regardless of how it ends | ||||||
| trap cleanup SIGINT SIGTERM SIGQUIT EXIT | trap cleanup SIGINT SIGTERM SIGQUIT EXIT | ||||||
| 
 | 
 | ||||||
| log "Running the entrypoint" | log "Running the entrypoint" | ||||||
| log "" | log "" | ||||||
| 
 | 
 | ||||||
|  | # Run the runner entrypoint script which as a final step runs this | ||||||
|  | # unit tests run.sh as it was symlinked | ||||||
| ../../../runner/entrypoint.sh 2> >(entrypoint_log) | ../../../runner/entrypoint.sh 2> >(entrypoint_log) | ||||||
| 
 | 
 | ||||||
| if [ "$?" != "2" ]; then | if [ "$?" != "2" ]; then | ||||||
|   error "=========================================" |   error "=========================================" | ||||||
|   error "Configuration should have thrown an error" |   error "FAIL | Configuration should have thrown an error" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| success "Entrypoint didn't complete successfully" | 
 | ||||||
| success "" | success "PASS | Entrypoint didn't complete successfully" | ||||||
| 
 | 
 | ||||||
| log "Checking the counter, should have 10 iterations" | log "Checking the counter, should have 10 iterations" | ||||||
| count=`cat ${RUNNER_HOME}/counter || "notfound"` | count=`cat ${RUNNER_HOME}/counter || "notfound"` | ||||||
| if [ "${count}" != "10" ]; then | if [ "${count}" != "10" ]; then | ||||||
|   error "=============================================" |   error "=============================================" | ||||||
|   error "The retry loop should have done 10 iterations" |   error "FAIL | The retry loop should have done 10 iterations" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| success "Retry loop went up to 10" | success "PASS | Retry loop went up to 10" | ||||||
| success |  | ||||||
| 
 | 
 | ||||||
| log "Checking that runsvc never ran" | log "Checking that run.sh never ran" | ||||||
| if [ -f ${RUNNER_HOME}/runsvc_ran ]; then | if [ -f ${RUNNER_HOME}/run_sh_ran ]; then | ||||||
|   error "=================================================================" |   error "=================================================================" | ||||||
|   error "runsvc was invoked, entrypoint.sh should have failed before that." |   error "FAIL | run.sh was invoked, entrypoint.sh should have failed before that." | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| success "runsvc.sh never ran" | success "PASS | run.sh never ran" | ||||||
| success | success | ||||||
| success "===========================" | success "===========================" | ||||||
| success "Test completed successfully" | success "Test completed successfully" | ||||||
|  |  | ||||||
|  | @ -1,29 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| export LIGHTGREEN='\e[0;32m' |  | ||||||
| export LIGHTRED='\e[0;31m' |  | ||||||
| export WHITE='\e[0;97m' |  | ||||||
| export RESET='\e[0m' |  | ||||||
| 
 |  | ||||||
| log(){ |  | ||||||
|   printf "\t${WHITE}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success(){ |  | ||||||
|   printf "\t${LIGHTGREEN}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| error(){ |  | ||||||
|   printf "\t${LIGHTRED}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success "I'm configured normally" |  | ||||||
| touch .runner |  | ||||||
| echo "$*" > runner_config |  | ||||||
| success "created a dummy config file" |  | ||||||
| success |  | ||||||
| # adding a counter to see how many times we've gone through a configuration step |  | ||||||
| count=`cat counter 2>/dev/null|| echo "0"` |  | ||||||
| count=$((count + 1)) |  | ||||||
| echo ${count} > counter |  | ||||||
| 
 |  | ||||||
|  | @ -1,31 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| set -euo pipefail |  | ||||||
| 
 |  | ||||||
| export LIGHTGREEN='\e[0;32m' |  | ||||||
| export LIGHTRED='\e[0;31m' |  | ||||||
| export WHITE='\e[0;97m' |  | ||||||
| export RESET='\e[0m' |  | ||||||
| 
 |  | ||||||
| log(){ |  | ||||||
|   printf "\t${WHITE}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success(){ |  | ||||||
|   printf "\t${LIGHTGREEN}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| error(){ |  | ||||||
|   printf "\t${LIGHTRED}$@${RESET}\n" 2>&1 |  | ||||||
|   exit 1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success "" |  | ||||||
| success "Running the service..." |  | ||||||
| # test if --once is present as a parameter |  | ||||||
| echo "$*" | grep -q 'once' && error "Should not include --once in the parameters" |  | ||||||
| success "...successful" |  | ||||||
| touch runsvc_ran |  | ||||||
| success "" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  | @ -1,81 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| # UNITTEST: should work as non ephemeral |  | ||||||
| # Will simulate a scenario where ephemeral=false. expects: |  | ||||||
| # - the configuration step to be run exactly once |  | ||||||
| # - the entrypoint script to exit with no error |  | ||||||
| # - the runsvc.sh script to run without the --once flag |  | ||||||
| 
 |  | ||||||
| source ../logging.sh |  | ||||||
| 
 |  | ||||||
| entrypoint_log() { |  | ||||||
|   while read I; do |  | ||||||
|     printf "\tentrypoint.sh: $I\n" |  | ||||||
|   done |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| log "Setting up the test" |  | ||||||
| export UNITTEST=true |  | ||||||
| export RUNNER_HOME=localhome |  | ||||||
| export RUNNER_NAME="example_runner_name" |  | ||||||
| export RUNNER_REPO="myorg/myrepo" |  | ||||||
| export RUNNER_TOKEN="xxxxxxxxxxxxx" |  | ||||||
| export RUNNER_EPHEMERAL=true |  | ||||||
| export RUNNER_FEATURE_FLAG_EPHEMERAL=true |  | ||||||
| 
 |  | ||||||
| mkdir -p ${RUNNER_HOME}/bin |  | ||||||
| # add up the config.sh and runsvc.sh |  | ||||||
| ln -s ../config.sh ${RUNNER_HOME}/config.sh |  | ||||||
| ln -s ../../runsvc.sh ${RUNNER_HOME}/bin/runsvc.sh |  | ||||||
| 
 |  | ||||||
| cleanup() { |  | ||||||
|   rm -rf ${RUNNER_HOME} |  | ||||||
|   unset UNITTEST |  | ||||||
|   unset RUNNERHOME |  | ||||||
|   unset RUNNER_NAME |  | ||||||
|   unset RUNNER_REPO |  | ||||||
|   unset RUNNER_TOKEN |  | ||||||
|   unset RUNNER_EPHEMERAL |  | ||||||
|   unset RUNNER_FEATURE_FLAG_EPHEMERAL |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| trap cleanup SIGINT SIGTERM SIGQUIT EXIT |  | ||||||
| 
 |  | ||||||
| log "Running the entrypoint" |  | ||||||
| log "" |  | ||||||
| 
 |  | ||||||
| ../../../runner/entrypoint.sh 2> >(entrypoint_log) |  | ||||||
| 
 |  | ||||||
| if [ "$?" != "0" ]; then |  | ||||||
|   error "===========================================" |  | ||||||
|   error "Entrypoint script did not exit successfully" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| log "Testing if we went through the configuration step only once" |  | ||||||
| count=`cat ${RUNNER_HOME}/counter || echo "not_found"` |  | ||||||
| if [ ${count} != "1" ]; then |  | ||||||
|   error "===============================================" |  | ||||||
|   error "The configuration step was not run exactly once" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| log "Testing if the configuration included the --ephemeral flag" |  | ||||||
| if ! grep -q -- '--ephemeral' ${RUNNER_HOME}/runner_config; then |  | ||||||
|   error "===============================================" |  | ||||||
|   error "The configuration did not include the --ephemeral flag" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| success "The configuration ran ${count} time(s)" |  | ||||||
| 
 |  | ||||||
| log "Testing if runsvc ran" |  | ||||||
| if [ ! -f "${RUNNER_HOME}/runsvc_ran" ]; then |  | ||||||
|   error "==============================" |  | ||||||
|   error "The runner service has not run" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
| success "The service ran" |  | ||||||
| success "" |  | ||||||
| success "===========================" |  | ||||||
| success "Test completed successfully" |  | ||||||
|  | @ -1,31 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| set -euo pipefail |  | ||||||
| 
 |  | ||||||
| export LIGHTGREEN='\e[0;32m' |  | ||||||
| export LIGHTRED='\e[0;31m' |  | ||||||
| export WHITE='\e[0;97m' |  | ||||||
| export RESET='\e[0m' |  | ||||||
| 
 |  | ||||||
| log(){ |  | ||||||
|   printf "\t${WHITE}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success(){ |  | ||||||
|   printf "\t${LIGHTGREEN}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| error(){ |  | ||||||
|   printf "\t${LIGHTRED}$@${RESET}\n" 2>&1 |  | ||||||
|   exit 1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success "" |  | ||||||
| success "Running the service..." |  | ||||||
| # test if --once is present as a parameter |  | ||||||
| echo "$*" | grep -q 'once' || error "Should include --once in the parameters"j |  | ||||||
| success "...successful" |  | ||||||
| touch runsvc_ran |  | ||||||
| success "" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  | @ -1,29 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| export LIGHTGREEN='\e[0;32m' |  | ||||||
| export LIGHTRED='\e[0;31m' |  | ||||||
| export WHITE='\e[0;97m' |  | ||||||
| export RESET='\e[0m' |  | ||||||
| 
 |  | ||||||
| log(){ |  | ||||||
|   printf "\t${WHITE}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success(){ |  | ||||||
|   printf "\t${LIGHTGREEN}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| error(){ |  | ||||||
|   printf "\t${LIGHTRED}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success "I'm configured normally" |  | ||||||
| touch .runner |  | ||||||
| echo "$*" > runner_config |  | ||||||
| success "created a dummy config file" |  | ||||||
| success |  | ||||||
| # adding a counter to see how many times we've gone through a configuration step |  | ||||||
| count=`cat counter 2>/dev/null|| echo "0"` |  | ||||||
| count=$((count + 1)) |  | ||||||
| echo ${count} > counter |  | ||||||
| 
 |  | ||||||
|  | @ -1,31 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| set -euo pipefail |  | ||||||
| 
 |  | ||||||
| export LIGHTGREEN='\e[0;32m' |  | ||||||
| export LIGHTRED='\e[0;31m' |  | ||||||
| export WHITE='\e[0;97m' |  | ||||||
| export RESET='\e[0m' |  | ||||||
| 
 |  | ||||||
| log(){ |  | ||||||
|   printf "\t${WHITE}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success(){ |  | ||||||
|   printf "\t${LIGHTGREEN}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| error(){ |  | ||||||
|   printf "\t${LIGHTRED}$@${RESET}\n" 2>&1 |  | ||||||
|   exit 1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success "" |  | ||||||
| success "Running the service..." |  | ||||||
| # test if --once is present as a parameter |  | ||||||
| echo "$*" | grep -q 'once' && error "Should not include --once in the parameters" |  | ||||||
| success "...successful" |  | ||||||
| touch runsvc_ran |  | ||||||
| success "" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  | @ -1,12 +1,12 @@ | ||||||
| #!/bin/bash | #!/usr/bin/env bash | ||||||
| 
 | 
 | ||||||
| # UNITTEST: should work as non ephemeral | # UNITTEST: should work as non ephemeral | ||||||
| # Will simulate a scenario where ephemeral=false. expects: | # Will simulate a scenario where ephemeral=false. expects: | ||||||
| # - the configuration step to be run exactly once | # - the configuration step to be run exactly once | ||||||
| # - the entrypoint script to exit with no error | # - the entrypoint script to exit with no error | ||||||
| # - the runsvc.sh script to run without the --once flag | # - the run.sh script to run without the --once flag | ||||||
| 
 | 
 | ||||||
| source ../logging.sh | source ../assets/logging.sh | ||||||
| 
 | 
 | ||||||
| entrypoint_log() { | entrypoint_log() { | ||||||
|   while read I; do |   while read I; do | ||||||
|  | @ -14,18 +14,22 @@ entrypoint_log() { | ||||||
|   done |   done | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | log "Setting up test area" | ||||||
|  | export RUNNER_HOME=testarea | ||||||
|  | mkdir -p ${RUNNER_HOME} | ||||||
|  | 
 | ||||||
| log "Setting up the test" | log "Setting up the test" | ||||||
| export UNITTEST=true | export UNITTEST=true | ||||||
| export RUNNER_HOME=localhome |  | ||||||
| export RUNNER_NAME="example_runner_name" | export RUNNER_NAME="example_runner_name" | ||||||
| export RUNNER_REPO="myorg/myrepo" | export RUNNER_REPO="myorg/myrepo" | ||||||
| export RUNNER_TOKEN="xxxxxxxxxxxxx" | export RUNNER_TOKEN="xxxxxxxxxxxxx" | ||||||
| export RUNNER_EPHEMERAL=false | export RUNNER_EPHEMERAL=false | ||||||
| 
 | 
 | ||||||
| mkdir -p ${RUNNER_HOME}/bin | # run.sh and config.sh get used by the runner's real entrypoint.sh and are part of actions/runner. | ||||||
| # add up the config.sh and runsvc.sh | # We change symlink dummy versions so the entrypoint.sh can run allowing us to test the real entrypoint.sh | ||||||
| ln -s ../config.sh ${RUNNER_HOME}/config.sh | log "Symlink dummy config.sh and run.sh" | ||||||
| ln -s ../../runsvc.sh ${RUNNER_HOME}/bin/runsvc.sh | ln -s ../../assets/config.sh ${RUNNER_HOME}/config.sh | ||||||
|  | ln -s ../../assets/run.sh ${RUNNER_HOME}/run.sh | ||||||
| 
 | 
 | ||||||
| cleanup() { | cleanup() { | ||||||
|   rm -rf ${RUNNER_HOME} |   rm -rf ${RUNNER_HOME} | ||||||
|  | @ -37,16 +41,19 @@ cleanup() { | ||||||
|   unset RUNNER_EPHEMERAL |   unset RUNNER_EPHEMERAL | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | # Always run cleanup when test ends regardless of how it ends | ||||||
| trap cleanup SIGINT SIGTERM SIGQUIT EXIT | trap cleanup SIGINT SIGTERM SIGQUIT EXIT | ||||||
| 
 | 
 | ||||||
| log "Running the entrypoint" | log "Running the entrypoint" | ||||||
| log "" | log "" | ||||||
| 
 | 
 | ||||||
|  | # Run the runner entrypoint script which as a final step runs this | ||||||
|  | # unit tests run.sh as it was symlinked | ||||||
| ../../../runner/entrypoint.sh 2> >(entrypoint_log) | ../../../runner/entrypoint.sh 2> >(entrypoint_log) | ||||||
| 
 | 
 | ||||||
| if [ "$?" != "0" ]; then | if [ "$?" != "0" ]; then | ||||||
|   error "===========================================" |   error "===========================================" | ||||||
|   error "Entrypoint script did not exit successfully" |   error "FAIL | Entrypoint script did not exit successfully" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  | @ -54,19 +61,19 @@ log "Testing if we went through the configuration step only once" | ||||||
| count=`cat ${RUNNER_HOME}/counter || echo "not_found"` | count=`cat ${RUNNER_HOME}/counter || echo "not_found"` | ||||||
| if [ ${count} != "1" ]; then | if [ ${count} != "1" ]; then | ||||||
|   error "===============================================" |   error "===============================================" | ||||||
|   error "The configuration step was not run exactly once" |   error "FAIL | The configuration step was not run exactly once" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| success "The configuration ran ${count} time(s)" | success "PASS | The configuration ran ${count} time(s)" | ||||||
| 
 | 
 | ||||||
| log "Testing if runsvc ran" | log "Testing if run.sh ran" | ||||||
| if [ ! -f "${RUNNER_HOME}/runsvc_ran" ]; then | if [ ! -f "${RUNNER_HOME}/run_sh_ran" ]; then | ||||||
|   error "==============================" |   error "==============================" | ||||||
|   error "The runner service has not run" |   error "FAIL | The runner service has not run" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| success "The service ran" | success "PASS | run.sh ran" | ||||||
| success "" | success "" | ||||||
| success "===========================" | success "===========================" | ||||||
| success "Test completed successfully" | success "Test completed successfully" | ||||||
|  |  | ||||||
|  | @ -1,29 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| export LIGHTGREEN='\e[0;32m' |  | ||||||
| export LIGHTRED='\e[0;31m' |  | ||||||
| export WHITE='\e[0;97m' |  | ||||||
| export RESET='\e[0m' |  | ||||||
| 
 |  | ||||||
| log(){ |  | ||||||
|   printf "\t${WHITE}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success(){ |  | ||||||
|   printf "\t${LIGHTGREEN}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| error(){ |  | ||||||
|   printf "\t${LIGHTRED}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success "I'm configured normally" |  | ||||||
| touch .runner |  | ||||||
| echo "$*" > runner_config |  | ||||||
| success "created a dummy config file" |  | ||||||
| success |  | ||||||
| # Adding a counter to see how many times we've gone through the configuration step |  | ||||||
| count=`cat counter 2>/dev/null|| echo "0"` |  | ||||||
| count=$((count + 1)) |  | ||||||
| echo ${count} > counter |  | ||||||
| 
 |  | ||||||
|  | @ -1,31 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| set -euo pipefail |  | ||||||
| 
 |  | ||||||
| export LIGHTGREEN='\e[0;32m' |  | ||||||
| export LIGHTRED='\e[0;31m' |  | ||||||
| export WHITE='\e[0;97m' |  | ||||||
| export RESET='\e[0m' |  | ||||||
| 
 |  | ||||||
| log(){ |  | ||||||
|   printf "\t${WHITE}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success(){ |  | ||||||
|   printf "\t${LIGHTGREEN}$@${RESET}\n" 2>&1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| error(){ |  | ||||||
|   printf "\t${LIGHTRED}$@${RESET}\n" 2>&1 |  | ||||||
|   exit 1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| success "" |  | ||||||
| success "Running the service..." |  | ||||||
| # test if --once is present as a parameter |  | ||||||
| echo "$*" | grep -q 'once' || error "Should include --once in the parameters"j |  | ||||||
| success "...successful" |  | ||||||
| touch runsvc_ran |  | ||||||
| success "" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  | @ -1,12 +1,12 @@ | ||||||
| #!/bin/bash | #!/usr/bin/env bash | ||||||
| 
 | 
 | ||||||
| # UNITTEST: should work normally | # UNITTEST: should work normally | ||||||
| # Will simulate a normal execution scenario. expects: | # Will simulate a normal execution scenario. expects: | ||||||
| # - the configuration step to be run exactly once | # - the configuration step to be run exactly once | ||||||
| # - the entrypoint script to exit with no error | # - the entrypoint script to exit with no error | ||||||
| # - the runsvc.sh script to run with the --once flag activated. | # - the run.sh script to run with the --once flag activated. | ||||||
| 
 | 
 | ||||||
| source ../logging.sh | source ../assets/logging.sh | ||||||
| 
 | 
 | ||||||
| entrypoint_log() { | entrypoint_log() { | ||||||
|   while read I; do |   while read I; do | ||||||
|  | @ -14,17 +14,21 @@ entrypoint_log() { | ||||||
|   done |   done | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | log "Setting up test area" | ||||||
|  | export RUNNER_HOME=testarea | ||||||
|  | mkdir -p ${RUNNER_HOME} | ||||||
|  | 
 | ||||||
| log "Setting up the test" | log "Setting up the test" | ||||||
| export UNITTEST=true | export UNITTEST=true | ||||||
| export RUNNER_HOME=localhome |  | ||||||
| export RUNNER_NAME="example_runner_name" | export RUNNER_NAME="example_runner_name" | ||||||
| export RUNNER_REPO="myorg/myrepo" | export RUNNER_REPO="myorg/myrepo" | ||||||
| export RUNNER_TOKEN="xxxxxxxxxxxxx" | export RUNNER_TOKEN="xxxxxxxxxxxxx" | ||||||
| 
 | 
 | ||||||
| mkdir -p ${RUNNER_HOME}/bin | # run.sh and config.sh get used by the runner's real entrypoint.sh and are part of actions/runner. | ||||||
| # add up the config.sh and runsvc.sh | # We change symlink dummy versions so the entrypoint.sh can run allowing us to test the real entrypoint.sh | ||||||
| ln -s ../config.sh ${RUNNER_HOME}/config.sh | log "Symlink dummy config.sh and run.sh" | ||||||
| ln -s ../../runsvc.sh ${RUNNER_HOME}/bin/runsvc.sh | ln -s ../../assets/config.sh ${RUNNER_HOME}/config.sh | ||||||
|  | ln -s ../../assets/run.sh ${RUNNER_HOME}/run.sh | ||||||
| 
 | 
 | ||||||
| cleanup() { | cleanup() { | ||||||
|   rm -rf ${RUNNER_HOME} |   rm -rf ${RUNNER_HOME} | ||||||
|  | @ -35,11 +39,14 @@ cleanup() { | ||||||
|   unset RUNNER_TOKEN |   unset RUNNER_TOKEN | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | # Always run cleanup when test ends regardless of how it ends | ||||||
| trap cleanup SIGINT SIGTERM SIGQUIT EXIT | trap cleanup SIGINT SIGTERM SIGQUIT EXIT | ||||||
| 
 | 
 | ||||||
| log "Running the entrypoint" | log "Running the entrypoint" | ||||||
| log "" | log "" | ||||||
| 
 | 
 | ||||||
|  | # Run the runner entrypoint script which as a final step runs this | ||||||
|  | # unit tests run.sh as it was symlinked | ||||||
| ../../../runner/entrypoint.sh 2> >(entrypoint_log) | ../../../runner/entrypoint.sh 2> >(entrypoint_log) | ||||||
| 
 | 
 | ||||||
| if [ "$?" != "0" ]; then | if [ "$?" != "0" ]; then | ||||||
|  | @ -52,26 +59,29 @@ log "Testing if the configuration step was run only once" | ||||||
| count=`cat ${RUNNER_HOME}/counter || echo "not_found"` | count=`cat ${RUNNER_HOME}/counter || echo "not_found"` | ||||||
| if [ ${count} != "1" ]; then | if [ ${count} != "1" ]; then | ||||||
|   error "===============================================" |   error "===============================================" | ||||||
|   error "The configuration step was not run exactly once" |   error "FAIL | The configuration step was not run exactly once" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| success "The configuration ran ${count} time(s)" | 
 | ||||||
|  | success "PASS | The configuration ran ${count} time(s)" | ||||||
| 
 | 
 | ||||||
| log "Testing if the configuration included the --ephemeral flag" | log "Testing if the configuration included the --ephemeral flag" | ||||||
| if grep -q -- '--ephemeral' ${RUNNER_HOME}/runner_config; then | if grep -q -- '--ephemeral' ${RUNNER_HOME}/runner_config; then | ||||||
|   error "===============================================" |   error "===============================================" | ||||||
|   error "The configuration should not include the --ephemeral flag" |   error "FAIL | The configuration should not include the --ephemeral flag" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| log "Testing if runsvc ran" | success "PASS | The --ephemeral switch was included in the configuration" | ||||||
| if [ ! -f "${RUNNER_HOME}/runsvc_ran" ]; then | 
 | ||||||
|  | log "Testing if run.sh ran" | ||||||
|  | if [ ! -f "${RUNNER_HOME}/run_sh_ran" ]; then | ||||||
|   error "==============================" |   error "==============================" | ||||||
|   error "The runner service has not run" |   error "FAIL | The runner service has not run" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| success "The service ran" | success "PASS | run.sh ran" | ||||||
| success "" | success "" | ||||||
| success "===========================" | success "===========================" | ||||||
| success "Test completed successfully" | success "Test completed successfully" | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| #!/bin/bash | #!/usr/bin/env bash | ||||||
| 
 | 
 | ||||||
| # UNITTEST: should work disable update | # UNITTEST: should work disable update | ||||||
| # Will simulate a scneario where disableupdate=true. expects: | # Will simulate a scneario where disableupdate=true. expects: | ||||||
|  | @ -6,7 +6,7 @@ | ||||||
| # - the entrypoint script to exit with no error | # - the entrypoint script to exit with no error | ||||||
| # - the config.sh script to run with the --disableupdate flag set to 'true'. | # - the config.sh script to run with the --disableupdate flag set to 'true'. | ||||||
| 
 | 
 | ||||||
| source ../logging.sh | source ../assets/logging.sh | ||||||
| 
 | 
 | ||||||
| entrypoint_log() { | entrypoint_log() { | ||||||
|   while read I; do |   while read I; do | ||||||
|  | @ -14,18 +14,22 @@ entrypoint_log() { | ||||||
|   done |   done | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | log "Setting up test area" | ||||||
|  | export RUNNER_HOME=testarea | ||||||
|  | mkdir -p ${RUNNER_HOME} | ||||||
|  | 
 | ||||||
| log "Setting up the test" | log "Setting up the test" | ||||||
| export UNITTEST=true | export UNITTEST=true | ||||||
| export RUNNER_HOME=localhome |  | ||||||
| export RUNNER_NAME="example_runner_name" | export RUNNER_NAME="example_runner_name" | ||||||
| export RUNNER_REPO="myorg/myrepo" | export RUNNER_REPO="myorg/myrepo" | ||||||
| export RUNNER_TOKEN="xxxxxxxxxxxxx" | export RUNNER_TOKEN="xxxxxxxxxxxxx" | ||||||
| export DISABLE_RUNNER_UPDATE="true" | export DISABLE_RUNNER_UPDATE="true" | ||||||
| 
 | 
 | ||||||
| mkdir -p ${RUNNER_HOME}/bin | # run.sh and config.sh get used by the runner's real entrypoint.sh and are part of actions/runner. | ||||||
| # add up the config.sh and runsvc.sh | # We change symlink dummy versions so the entrypoint.sh can run allowing us to test the real entrypoint.sh | ||||||
| ln -s ../config.sh ${RUNNER_HOME}/config.sh | log "Symlink dummy config.sh and run.sh" | ||||||
| ln -s ../../runsvc.sh ${RUNNER_HOME}/bin/runsvc.sh | ln -s ../../assets/config.sh ${RUNNER_HOME}/config.sh | ||||||
|  | ln -s ../../assets/run.sh ${RUNNER_HOME}/run.sh | ||||||
| 
 | 
 | ||||||
| cleanup() { | cleanup() { | ||||||
|   rm -rf ${RUNNER_HOME} |   rm -rf ${RUNNER_HOME} | ||||||
|  | @ -36,16 +40,19 @@ cleanup() { | ||||||
|   unset RUNNER_TOKEN |   unset RUNNER_TOKEN | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | # Always run cleanup when test ends regardless of how it ends | ||||||
| trap cleanup SIGINT SIGTERM SIGQUIT EXIT | trap cleanup SIGINT SIGTERM SIGQUIT EXIT | ||||||
| 
 | 
 | ||||||
| log "Running the entrypoint" | log "Running the entrypoint" | ||||||
| log "" | log "" | ||||||
| 
 | 
 | ||||||
|  | # run.sh and config.sh get used by the runner's real entrypoint.sh and are part of actions/runner. | ||||||
|  | # We change symlink dummy versions so the entrypoint.sh can run allowing us to test the real entrypoint.sh | ||||||
| ../../../runner/entrypoint.sh 2> >(entrypoint_log) | ../../../runner/entrypoint.sh 2> >(entrypoint_log) | ||||||
| 
 | 
 | ||||||
| if [ "$?" != "0" ]; then | if [ "$?" != "0" ]; then | ||||||
|   error "==========================" |   error "==========================" | ||||||
|   error "Test completed with errors" |   error "FAIL | Test completed with errors" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  | @ -53,26 +60,28 @@ log "Testing if the configuration step was run only once" | ||||||
| count=`cat ${RUNNER_HOME}/counter || echo "not_found"` | count=`cat ${RUNNER_HOME}/counter || echo "not_found"` | ||||||
| if [ ${count} != "1" ]; then | if [ ${count} != "1" ]; then | ||||||
|   error "===============================================" |   error "===============================================" | ||||||
|   error "The configuration step was not run exactly once" |   error "FAIL | The configuration step was not run exactly once" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| success "The configuration ran ${count} time(s)" | success "PASS | The configuration ran ${count} time(s)" | ||||||
| 
 | 
 | ||||||
| log "Testing if the configuration included the --disableupdate flag" | log "Testing if the configuration included the --disableupdate flag" | ||||||
| if ! grep -q -- '--disableupdate' ${RUNNER_HOME}/runner_config; then | if ! grep -q -- '--disableupdate' ${RUNNER_HOME}/runner_config; then | ||||||
|   error "===============================================" |   error "===============================================" | ||||||
|   error "The configuration should not include the --disableupdate flag" |   error "FAIL | The configuration should not include the --disableupdate flag" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| log "Testing if runsvc ran" | success "PASS | The --disableupdate switch was included in the configuration" | ||||||
| if [ ! -f "${RUNNER_HOME}/runsvc_ran" ]; then | 
 | ||||||
|  | log "Testing if run.sh ran" | ||||||
|  | if [ ! -f "${RUNNER_HOME}/run_sh_ran" ]; then | ||||||
|   error "==============================" |   error "==============================" | ||||||
|   error "The runner service has not run" |   error "FAIL | The runner service has not run" | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| success "The service ran" | success "PASS | run.sh ran" | ||||||
| success "" | success "" | ||||||
| success "===========================" | success "===========================" | ||||||
| success "Test completed successfully" | success "Test completed successfully" | ||||||
|  | @ -0,0 +1,90 @@ | ||||||
|  | #!/usr/bin/env bash | ||||||
|  | 
 | ||||||
|  | # UNITTEST: should work legacy once switch set | ||||||
|  | # Will simulate a scenario where RUNNER_FEATURE_FLAG_EPHEMERAL=false. expects: | ||||||
|  | # - the configuration step to be run exactly once | ||||||
|  | # - the entrypoint script to exit with no error | ||||||
|  | # - the run.sh script to run with the --once flag | ||||||
|  | 
 | ||||||
|  | source ../assets/logging.sh | ||||||
|  | 
 | ||||||
|  | entrypoint_log() { | ||||||
|  |   while read I; do | ||||||
|  |     printf "\tentrypoint.sh: $I\n" | ||||||
|  |   done | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | log "Setting up test area" | ||||||
|  | export RUNNER_HOME=testarea | ||||||
|  | mkdir -p ${RUNNER_HOME} | ||||||
|  | 
 | ||||||
|  | log "Setting up the test" | ||||||
|  | export UNITTEST=true | ||||||
|  | export RUNNER_NAME="example_runner_name" | ||||||
|  | export RUNNER_REPO="myorg/myrepo" | ||||||
|  | export RUNNER_TOKEN="xxxxxxxxxxxxx" | ||||||
|  | export RUNNER_FEATURE_FLAG_EPHEMERAL="false" | ||||||
|  | export RUNNER_EPHEMERAL="true" | ||||||
|  | 
 | ||||||
|  | # run.sh and config.sh get used by the runner's real entrypoint.sh and are part of actions/runner. | ||||||
|  | # We change symlink dummy versions so the entrypoint.sh can run allowing us to test the real entrypoint.sh | ||||||
|  | log "Symlink dummy config.sh and run.sh" | ||||||
|  | ln -s ../../assets/config.sh ${RUNNER_HOME}/config.sh | ||||||
|  | ln -s ../../assets/run.sh ${RUNNER_HOME}/run.sh | ||||||
|  | 
 | ||||||
|  | cleanup() { | ||||||
|  |   rm -rf ${RUNNER_HOME} | ||||||
|  |   unset UNITTEST | ||||||
|  |   unset RUNNERHOME | ||||||
|  |   unset RUNNER_NAME | ||||||
|  |   unset RUNNER_REPO | ||||||
|  |   unset RUNNER_TOKEN | ||||||
|  |   unset RUNNER_EPHEMERAL | ||||||
|  |   unset RUNNER_FEATURE_FLAG_EPHEMERAL | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Always run cleanup when test ends regardless of how it ends | ||||||
|  | trap cleanup SIGINT SIGTERM SIGQUIT EXIT | ||||||
|  | 
 | ||||||
|  | log "Running the entrypoint" | ||||||
|  | log "" | ||||||
|  | 
 | ||||||
|  | # run.sh and config.sh get used by the runner's real entrypoint.sh and are part of actions/runner. | ||||||
|  | # We change symlink dummy versions so the entrypoint.sh can run allowing us to test the real entrypoint.sh | ||||||
|  | ../../../runner/entrypoint.sh 2> >(entrypoint_log) | ||||||
|  | 
 | ||||||
|  | if [ "$?" != "0" ]; then | ||||||
|  |   error "===========================================" | ||||||
|  |   error "FAIL | Entrypoint script did not exit successfully" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | log "Testing if we went through the configuration step only once" | ||||||
|  | count=`cat ${RUNNER_HOME}/counter || echo "not_found"` | ||||||
|  | if [ ${count} != "1" ]; then | ||||||
|  |   error "===============================================" | ||||||
|  |   error "FAIL | The configuration step was not run exactly once" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | success "PASS | The configuration ran ${count} time(s)" | ||||||
|  | 
 | ||||||
|  | log "Testing if the configuration included the --once flag" | ||||||
|  | if ! grep -q -- '--once' ${RUNNER_HOME}/runner_args; then | ||||||
|  |   error "===============================================" | ||||||
|  |   error "FAIL | The configuration did not include the --once flag, config printed below:" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | success "PASS | The --once argument was passed in" | ||||||
|  | 
 | ||||||
|  | log "Testing if run.sh ran" | ||||||
|  | if [ ! -f "${RUNNER_HOME}/run_sh_ran" ]; then | ||||||
|  |   error "==============================" | ||||||
|  |   error "FAIL | The runner service has not run" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | success "PASS | run.sh ran" | ||||||
|  | success "" | ||||||
|  | success "===========================" | ||||||
|  | success "Test completed successfully" | ||||||
|  | @ -1,13 +1,12 @@ | ||||||
| #!/bin/bash | #!/usr/bin/env bash | ||||||
| 
 | 
 | ||||||
| source logging.sh | source assets/logging.sh | ||||||
| 
 | 
 | ||||||
| for unittest in ./should*; do | for unittest in ./should*; do | ||||||
|   log "**********************************" |   log "**********************************" | ||||||
|   log " UNIT TEST: ${unittest}" |   log " UNIT TEST: ${unittest}" | ||||||
|   log "**********************************" |   log "**********************************" | ||||||
|   log "" |   log "" | ||||||
| 
 |  | ||||||
|   cd ${unittest} |   cd ${unittest} | ||||||
|   ./test.sh |   ./test.sh | ||||||
|   ret_code=$? |   ret_code=$? | ||||||
		Loading…
	
		Reference in New Issue