Skip to content

Commit

Permalink
add cli tests for kubens (#117)
Browse files Browse the repository at this point in the history
* split bats test invocation by executable

* add more cli tests for kubens

* clean up kubens tests

* small cleanup to kubens tests
  • Loading branch information
doodlesbykumbi authored and ahmetb committed Jan 3, 2019
1 parent df557e4 commit 402cc2c
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 12 deletions.
3 changes: 2 additions & 1 deletion .travis.yml
Expand Up @@ -5,4 +5,5 @@ before_install:
- sudo curl -fsSL -o /usr/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v1.13.1/bin/linux/amd64/kubectl - sudo curl -fsSL -o /usr/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v1.13.1/bin/linux/amd64/kubectl
- sudo chmod +x /usr/bin/kubectl - sudo chmod +x /usr/bin/kubectl
script: script:
- bats test/ - bats test/kubectx.bats
- bats test/kubens.bats
18 changes: 10 additions & 8 deletions kubens
Expand Up @@ -54,7 +54,7 @@ current_namespace() {
} }


current_context() { current_context() {
$KUBECTL config view -o=jsonpath='{.current-context}' $KUBECTL config current-context
} }


get_namespaces() { get_namespaces() {
Expand Down Expand Up @@ -173,13 +173,15 @@ swap_namespace() {
} }


main() { main() {
if hash kubectl 2>/dev/null; then if [[ -z "${KUBECTL:-}" ]]; then
KUBECTL=kubectl if hash kubectl 2>/dev/null; then
elif hash kubectl.exe 2>/dev/null; then KUBECTL=kubectl
KUBECTL=kubectl.exe elif hash kubectl.exe 2>/dev/null; then
else KUBECTL=kubectl.exe
echo >&2 "kubectl is not installed" else
exit 1 echo >&2 "kubectl is not installed"
exit 1
fi
fi fi


if [[ "$#" -eq 0 ]]; then if [[ "$#" -eq 0 ]]; then
Expand Down
10 changes: 9 additions & 1 deletion test/common.bash
Expand Up @@ -17,6 +17,14 @@ use_config() {


# wrappers around "kubectl config" command # wrappers around "kubectl config" command


get_namespace() {
kubectl config view -o=jsonpath="{.contexts[?(@.name==\"$(get_context)\")].context.namespace}"
}

get_context() { get_context() {
kubectl config current-context kubectl config current-context
}

switch_context() {
kubectl config use-context "${1}"
} }
93 changes: 91 additions & 2 deletions test/kubens.bats
@@ -1,15 +1,104 @@
#!/usr/bin/env bats #!/usr/bin/env bats


COMMAND="${BATS_TEST_DIRNAME}/../kubens" COMMAND="${BATS_TEST_DIRNAME}/../kubens"
export KUBECTL="$BATS_TEST_DIRNAME/../test/mock-kubectl"

load common


@test "--help should not fail" { @test "--help should not fail" {
run ${COMMAND} --help run ${COMMAND} --help
echo "$output">&2 echo "$output">&2
[ "$status" -eq 0 ] [[ "$status" -eq 0 ]]
} }


@test "-h should not fail" { @test "-h should not fail" {
run ${COMMAND} -h run ${COMMAND} -h
echo "$output">&2 echo "$output">&2
[ "$status" -eq 0 ] [[ "$status" -eq 0 ]]
}

@test "list namespaces when no kubeconfig exists" {
run ${COMMAND}
echo "$output"
[[ "$status" -eq 1 ]]
[[ "$output" = *"current-context is not set"* ]]
}

@test "list namespaces" {
use_config config1
switch_context user1@cluster1

run ${COMMAND}
echo "$output"
[[ "$status" -eq 0 ]]
[[ "$output" = *"ns1"* ]]
[[ "$output" = *"ns2"* ]]
}

@test "switch to existing namespace" {
use_config config1
switch_context user1@cluster1

run ${COMMAND} "ns1"
echo "$output"
[[ "$status" -eq 0 ]]
[[ "$output" = *'Active namespace is "ns1"'* ]]
}

@test "switch to non-existing namespace" {
use_config config1
switch_context user1@cluster1

run ${COMMAND} "unknown-namespace"
echo "$output"
[[ "$status" -eq 1 ]]
[[ "$output" = *'no namespace exists with name "unknown-namespace"'* ]]
}

@test "switch between namespaces" {
use_config config1
switch_context user1@cluster1

run ${COMMAND} ns1
echo "$output"
[[ "$status" -eq 0 ]]
echo "$(get_namespace)"
[[ "$(get_namespace)" = "ns1" ]]

run ${COMMAND} ns2
echo "$output"
[[ "$status" -eq 0 ]]
echo "$(get_namespace)"
[[ "$(get_namespace)" = "ns2" ]]

run ${COMMAND} -
echo "$output"
[[ "$status" -eq 0 ]]
echo "$(get_namespace)"
[[ "$(get_namespace)" = "ns1" ]]

run ${COMMAND} -
echo "$output"
[[ "$status" -eq 0 ]]
echo "$(get_namespace)"
[[ "$(get_namespace)" = "ns2" ]]
}

@test "switch to previous namespace when none exists" {
use_config config1
switch_context user1@cluster1

run ${COMMAND} -
echo "$output"
[[ "$status" -eq 1 ]]
[[ "$output" = *"No previous namespace found for current context"* ]]
}

@test "switch to namespace when current context is empty" {
use_config config1

run ${COMMAND} -
echo "$output"
[[ "$status" -eq 1 ]]
[[ "$output" = *"current-context is not set"* ]]
} }
12 changes: 12 additions & 0 deletions test/mock-kubectl
@@ -0,0 +1,12 @@
#!/usr/bin/env bash

[[ -n $DEBUG ]] && set -x

set -eou pipefail

if [[ $@ == *'get namespaces'* ]]; then
echo "ns1"
echo "ns2"
else
kubectl $@
fi

0 comments on commit 402cc2c

Please sign in to comment.