#!/usr/bin/env bats load test_helper setup() { global_setup # create a temporary key and save in a variable create_key local KEY="$(cat /tmp/testkey.pub)" destroy_key # now create key that will be really used create_key # Test key without a trailing newline echo -n "$KEY" > /tmp/testkey-no-newline.pub # the temporary key is useful for adding in the file with two keys # useful for a negative test { cat /tmp/testkey.pub ; echo "$KEY" ; } > /tmp/testkey-double.pub # another negative test input echo 'invalid!' > /tmp/testkey-invalid.pub # save current authorized_keys to remove all changes afterwards cp "${DOKKU_ROOT:-/home/dokku}/.ssh/authorized_keys" /tmp/testkey-authorized_keys } teardown() { # restore authorized_keys to its contents before the tests cp /tmp/testkey-authorized_keys "${DOKKU_ROOT:-/home/dokku}/.ssh/authorized_keys" # normal cleanup after here destroy_key global_teardown } @test "(ssh-keys) ssh-keys:help" { run /bin/bash -c "dokku ssh-keys" echo "output: $output" echo "status: $status" assert_output_contains "Manage public ssh keys used for deployment" help_output="$output" run /bin/bash -c "dokku ssh-keys:help" echo "output: $output" echo "status: $status" assert_output_contains "Manage public ssh keys used for deployment" assert_output "$help_output" } @test "(ssh-keys) ssh-keys:add" { run /bin/bash -c "dokku ssh-keys:add name1 /tmp/testkey-double.pub" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "dokku ssh-keys:add name2 /tmp/testkey-invalid.pub" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "dokku ssh-keys:add name3 /tmp/testkey.pub" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku ssh-keys:list name3" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku ssh-keys:add name4 /tmp/testkey-no-newline.pub" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku ssh-keys:list name4" echo "output: $output" echo "status: $status" assert_success } @test "(ssh-keys) ssh-keys:add FILE" { run /bin/bash -c "dokku ssh-keys:add name /tmp/testkey.pub" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku ssh-keys:add name /tmp/testkey.pub" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "cat /tmp/testkey.pub | dokku ssh-keys:add name" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "dokku ssh-keys:add other-name /tmp/testkey.pub" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "cat /tmp/testkey.pub | dokku ssh-keys:add other-name" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "dokku ssh-keys:list name" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku ssh-keys:list other-name" echo "output: $output" echo "status: $status" assert_failure } @test "(ssh-keys) ssh-keys:add stdin" { run /bin/bash -c "cat /tmp/testkey.pub | dokku ssh-keys:add name" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku ssh-keys:add name /tmp/testkey.pub" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "cat /tmp/testkey.pub | dokku ssh-keys:add name" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "dokku ssh-keys:add other-name /tmp/testkey.pub" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "cat /tmp/testkey.pub | dokku ssh-keys:add other-name" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "dokku ssh-keys:list name" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku ssh-keys:list other-name" echo "output: $output" echo "status: $status" assert_failure } @test "(ssh-keys) ssh-keys:add invalid" { run /bin/bash -c 'echo invalid >> "${DOKKU_ROOT:-/home/dokku}/.ssh/authorized_keys"' echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku ssh-keys:add name5 /tmp/testkey.pub" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "dokku ssh-keys:list" echo "output: $output" echo "status: $status" assert_failure } @test "(ssh-keys) ssh-keys:list" { run /bin/bash -c "dokku ssh-keys:list" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c 'echo "" >> "${DOKKU_ROOT:-/home/dokku}/.ssh/authorized_keys"' echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku ssh-keys:list" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku ssh-keys:list | grep name1" echo "output: $output" echo "status: $status" assert_failure run /bin/bash -c "dokku ssh-keys:list name1" echo "output: $output" echo "status: $status" assert_failure }