sshpiper/e2e/kubernetes_test.go
Boshi Lian 694d09affd
support password match/ca publickey for kubernetes (#211)
* add testcase

* refine testcases

* fix tab

* happy ql

* inline timeout

* add ca support for k8s
2023-08-26 18:07:36 -07:00

148 lines
2.9 KiB
Go

package e2e_test
import (
"fmt"
"os"
"path"
"testing"
"time"
"github.com/google/uuid"
)
func TestKubernetes(t *testing.T) {
piperhost := "host-k8s-proxy"
piperport := "2222"
piperaddr := piperhost + ":" + piperport
waitForEndpointReadyWithTimeout(piperaddr, time.Minute*5)
pubkeycases := []struct {
title string
user string
}{
{
title: "key_pubkey_cacthall",
user: "anyuser",
},
{
title: "key_custom_field",
user: "custom_field",
},
{
title: "key_authorizedfile",
user: "authorizedfile",
},
{
title: "key_public_ca",
user: "hostcapublickey",
},
}
for _, testcase := range pubkeycases {
t.Run(testcase.title, func(t *testing.T) {
keyfiledir, err := os.MkdirTemp("", "")
if err != nil {
t.Errorf("failed to create temp key file: %v", err)
}
keyfile := path.Join(keyfiledir, "key")
if err := os.WriteFile(keyfile, []byte(testprivatekey), 0400); err != nil {
t.Errorf("failed to write to test key: %v", err)
}
if err := os.WriteFile("/sshconfig_publickey/.ssh/authorized_keys", []byte(`ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINRGTH325rDUp12tplwukHmR8ytbC9TPZ886gCstynP1`), 0400); err != nil {
t.Errorf("failed to write to authorized_keys: %v", err)
}
randtext := uuid.New().String()
targetfie := uuid.New().String()
c, _, _, err := runCmd(
"ssh",
"-v",
"-o",
"StrictHostKeyChecking=no",
"-o",
"UserKnownHostsFile=/dev/null",
"-p",
piperport,
"-l",
testcase.user,
"-i",
keyfile,
piperhost,
fmt.Sprintf(`sh -c "echo -n %v > /shared/%v"`, randtext, targetfie),
)
if err != nil {
t.Errorf("failed to ssh to piper-fixed, %v", err)
}
defer killCmd(c)
time.Sleep(time.Second) // wait for file flush
checkSharedFileContent(t, targetfie, randtext)
})
}
passwordcases := []struct {
title string
user string
password string
}{
{
title: "password",
user: "pass",
password: "pass",
},
{
title: "password_htpwd",
user: "htpwd",
password: "htpassword",
},
{
title: "password_htpasswd_file",
user: "htpwdfile",
password: "htpasswordfile",
},
}
for _, testcase := range passwordcases {
t.Run(testcase.title, func(t *testing.T) {
randtext := uuid.New().String()
targetfie := uuid.New().String()
c, stdin, stdout, err := runCmd(
"ssh",
"-v",
"-o",
"StrictHostKeyChecking=no",
"-o",
"UserKnownHostsFile=/dev/null",
"-p",
piperport,
"-l",
testcase.user,
piperhost,
fmt.Sprintf(`sh -c "echo -n %v > /shared/%v"`, randtext, targetfie),
)
if err != nil {
t.Errorf("failed to ssh to piper-fixed, %v", err)
}
defer killCmd(c)
enterPassword(stdin, stdout, testcase.password)
time.Sleep(time.Second) // wait for file flush
checkSharedFileContent(t, targetfie, randtext)
})
}
}