diff --git a/commands b/commands index 7f3a261..eb82394 100755 --- a/commands +++ b/commands @@ -117,9 +117,15 @@ case "$1" in $PLUGIN_COMMAND_PREFIX:import) [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" verify_service_name "$2" - SERVICE="$2" + SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + SERVICE_NAME="$(get_service_name "$SERVICE")" + DATABASE_NAME="$(get_database_name $SERVICE)" + PASSWORD=$(cat "$SERVICE_ROOT/PASSWORD") - dokku_log_fail "Not yet implemented" + if [[ -t 0 ]]; then + dokku_log_fail "No data provided on stdin." + fi + docker exec -i "$SERVICE_NAME" env PGPASSWORD="$PASSWORD" pg_restore -h localhost -cO -d "$DATABASE_NAME" -U postgres -w ;; $PLUGIN_COMMAND_PREFIX:logs) @@ -196,7 +202,7 @@ case "$1" in $PLUGIN_COMMAND_PREFIX:link , Link the $PLUGIN_SERVICE service to the app $PLUGIN_COMMAND_PREFIX:unlink , Unlink the $PLUGIN_SERVICE service from the app $PLUGIN_COMMAND_PREFIX:export , Export a dump of the $PLUGIN_SERVICE service database - $PLUGIN_COMMAND_PREFIX:import , NOT IMPLEMENTED + $PLUGIN_COMMAND_PREFIX:import < , Import a dump into the $PLUGIN_SERVICE service database $PLUGIN_COMMAND_PREFIX:connect , Connect via psql to a $PLUGIN_SERVICE service $PLUGIN_COMMAND_PREFIX:logs [-t], Print the most recent log(s) for this service $PLUGIN_COMMAND_PREFIX:restart , Graceful shutdown and restart of the $PLUGIN_SERVICE service container diff --git a/tests/service_import.bats b/tests/service_import.bats new file mode 100755 index 0000000..a9dfb1c --- /dev/null +++ b/tests/service_import.bats @@ -0,0 +1,37 @@ +#!/usr/bin/env bats +load test_helper + +setup() { + export ECHO_DOCKER_COMMAND="false" + dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2 + echo "data" > "$PLUGIN_DATA_ROOT/fake.dump" +} + +teardown() { + export ECHO_DOCKER_COMMAND="false" + dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2 + rm -f "$PLUGIN_DATA_ROOT/fake.dump" +} + +@test "($PLUGIN_COMMAND_PREFIX:import) error when there are no arguments" { + run dokku "$PLUGIN_COMMAND_PREFIX:import" + assert_contains "${lines[*]}" "Please specify a name for the service" +} + +@test "($PLUGIN_COMMAND_PREFIX:import) error when service does not exist" { + run dokku "$PLUGIN_COMMAND_PREFIX:import" not_existing_service + assert_contains "${lines[*]}" "service not_existing_service does not exist" +} + +@test "($PLUGIN_COMMAND_PREFIX:import) error when data is not provided" { + run dokku "$PLUGIN_COMMAND_PREFIX:import" l + assert_contains "${lines[*]}" "No data provided on stdin" +} + +@test "($PLUGIN_COMMAND_PREFIX:import) success" { + export ECHO_DOCKER_COMMAND="true" + run dokku "$PLUGIN_COMMAND_PREFIX:import" l < "$PLUGIN_DATA_ROOT/fake.dump" + password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")" + assert_output "docker exec -i dokku.postgres.l env PGPASSWORD=$password pg_restore -h localhost -cO -d l -U postgres -w" +} +