Merge pull request #10 from ViViDboarder/add-tests

Add tests and fix arg quoting
This commit is contained in:
Ian 2020-05-19 09:50:53 -07:00 committed by GitHub
commit f261ba1939
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 85 additions and 28 deletions

View File

@ -1,7 +1,7 @@
FROM alpine FROM alpine
MAINTAINER ViViDboarder <ViViDboarder@gmail.com> MAINTAINER ViViDboarder <ViViDboarder@gmail.com>
RUN apk -Uuv add curl ca-certificates RUN apk -Uuv add bash curl ca-certificates
COPY push.sh /bin/ COPY push.sh /bin/
RUN chmod +x /bin/push.sh RUN chmod +x /bin/push.sh

13
Makefile Normal file
View File

@ -0,0 +1,13 @@
.PHONY: clean all
.PHONY: default
default: test
.PHONY: test
test:
docker-compose -f ./tests/docker-compose-private.yml up \
--build --force-recreate \
--abort-on-container-exit --exit-code-from plugin
docker-compose -f ./tests/docker-compose-public.yml up \
--build --force-recreate \
--abort-on-container-exit --exit-code-from plugin

View File

@ -46,3 +46,12 @@ The following environment variables can be used for further cutomization:
| ``PLUGIN_TIMEOUT`` | Defines a timeout (in seconds) to stop the upload after a certain time. | | ``PLUGIN_TIMEOUT`` | Defines a timeout (in seconds) to stop the upload after a certain time. |
| ``PLUGIN_ATTEMPTS`` | Defines how often a failed upload should be retried. Normally there is only one upload attempt. | | ``PLUGIN_ATTEMPTS`` | Defines how often a failed upload should be retried. Normally there is only one upload attempt. |
| ``PLUGIN_CUSTOM_ARGUMENTS`` | Additional arguments to be passed to `curl`. | | ``PLUGIN_CUSTOM_ARGUMENTS`` | Additional arguments to be passed to `curl`. |
## Development
There are only two tests right now and they are configured using Docker Compose. To run them, just use
make test
If someone wants to make this better (or add a Drone file) I'd gladly accept the patch.

49
push.sh
View File

@ -1,61 +1,56 @@
#! /bin/sh #! /bin/bash
set -e
ARGS=()
# Use WEBDAV_USERNAME as default, if provided. # Use WEBDAV_USERNAME as default, if provided.
if [ -z "$PLUGIN_USERNAME" ] && [ ! -z "$WEBDAV_USERNAME" ]; then if [ -z "$PLUGIN_USERNAME" ] && [ -n "$WEBDAV_USERNAME" ]; then
PLUGIN_USERNAME="$WEBDAV_USERNAME"
PLUGIN_USERNAME="$WEBDAV_USERNAME"
fi fi
# Use WEBDAV_PASSWORD as default, if provided. # Use WEBDAV_PASSWORD as default, if provided.
if [ -z "$PLUGIN_PASSWORD" ] && [ ! -z "$WEBDAV_PASSWORD" ]; then if [ -z "$PLUGIN_PASSWORD" ] && [ -n "$WEBDAV_PASSWORD" ]; then
PLUGIN_PASSWORD="$WEBDAV_PASSWORD"
PLUGIN_PASSWORD="$WEBDAV_PASSWORD"
fi fi
# If username and password are provided, add auth # If username and password are provided, add auth
if [ ! -z "$PLUGIN_USERNAME" ] && [ ! -z "$PLUGIN_PASSWORD" ]; then if [ -n "$PLUGIN_USERNAME" ] && [ -n "$PLUGIN_PASSWORD" ]; then
ARGS+=(--user "${PLUGIN_USERNAME}:${PLUGIN_PASSWORD}")
AUTH="--user '${PLUGIN_USERNAME}':'${PLUGIN_PASSWORD}'"
fi fi
# Use a proxy, if one is specified # Use a proxy, if one is specified
if [ ! -z "$PLUGIN_PROXY_URL" ]; then if [ -n "$PLUGIN_PROXY_URL" ]; then
ARGS+=(--proxy "${PLUGIN_PROXY_URL}")
PLUGIN_PROXY_URL="--proxy '${PLUGIN_PROXY_URL}'"
fi fi
# If a timeout is specified, make use of it. # If a timeout is specified, make use of it.
if [ ! -z "$PLUGIN_TIMEOUT" ]; then if [ -n "$PLUGIN_TIMEOUT" ]; then
ARGS+=(--max-time "${PLUGIN_TIMEOUT}")
PLUGIN_TIMEOUT="--max-time '${PLUGIN_TIMEOUT}'"
fi fi
# Set PLUGIN_ATTEMPTS to one if nothing else is specified # Set PLUGIN_ATTEMPTS to one if nothing else is specified
if [ -z "$PLUGIN_ATTEMPTS" ]; then if [ -z "$PLUGIN_ATTEMPTS" ]; then
PLUGIN_ATTEMPTS=1
PLUGIN_ATTEMPTS=1
fi fi
# Repeat the upload as long as specified. # Repeat the upload as long as specified.
while [ "${PLUGIN_ATTEMPTS}" -gt 0 ]; do while [ "${PLUGIN_ATTEMPTS}" -gt 0 ]; do
# Uploading the file # Uploading the file
curl $PLUGIN_PROXY_URL $PLUGIN_TIMEOUT $PLUGIN_CUSTOM_ARGUMENTS --upload-file $PLUGIN_FILE $AUTH $PLUGIN_DESTINATION && { curl "${ARGS[@]}" --upload-file "$PLUGIN_FILE" "$PLUGIN_DESTINATION" && {
# Terminate the script as soon as the upload is successful # Terminate the script as soon as the upload is successful
echo "[INFO] Upload was successful." echo "[INFO] Upload was successful."
exit 0 exit 0
} }
# Show messages in case uploads have failed # Show messages in case uploads have failed
[ "$PLUGIN_ATTEMPTS" -gt 1 ] && { [ "$PLUGIN_ATTEMPTS" -gt 1 ] && {
echo "[INFO] Upload failed. Attempting a new upload, if possible."
echo "[INFO] Upload failed. Attempting a new upload, if possible."
} }
PLUGIN_ATTEMPTS=$((PLUGIN_ATTEMPTS-1)) sleep 5
PLUGIN_ATTEMPTS=$((PLUGIN_ATTEMPTS-1))
done done

View File

@ -0,0 +1,22 @@
---
version: '2.4'
services:
webdav:
image: sashgorokhov/webdav
environment:
USERNAME: jdoe
PASSWORD: hunter2
plugin:
build:
context: ../
dockerfile: Dockerfile
volumes:
- './test.txt:/test.txt'
environment:
PLUGIN_FILE: '/test.txt'
PLUGIN_DESTINATION: 'http://webdav/'
PLUGIN_USERNAME: jdoe
PLUGIN_PASSWORD: hunter2
PLUGIN_TIMEOUT: 10
PLUGIN_ATTEMPTS: 4

View File

@ -0,0 +1,17 @@
---
version: '2.4'
services:
webdav:
image: sashgorokhov/webdav
plugin:
build:
context: ../
dockerfile: Dockerfile
volumes:
- './test.txt:/test.txt'
environment:
PLUGIN_FILE: '/test.txt'
PLUGIN_DESTINATION: 'http://webdav/'
PLUGIN_TIMEOUT: 10
PLUGIN_ATTEMPTS: 4

1
tests/test.txt Normal file
View File

@ -0,0 +1 @@
ohai