Run oidc tests fully in docker
Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
parent
aca3a667c4
commit
85df2c80a8
4 changed files with 43 additions and 18 deletions
4
Makefile
4
Makefile
|
@ -36,7 +36,9 @@ test_integration_general:
|
||||||
go test -failfast -tags integration_general,integration -timeout 30m -count=1 ./...
|
go test -failfast -tags integration_general,integration -timeout 30m -count=1 ./...
|
||||||
|
|
||||||
test_integration_oidc:
|
test_integration_oidc:
|
||||||
go test -failfast -tags integration_oidc,integration -timeout 30m -count=1 ./...
|
docker network rm $$(docker network ls --filter name=headscale --quiet) || true
|
||||||
|
docker network create headscale-test || true
|
||||||
|
docker run -it --rm --network headscale-test -v $$PWD:$$PWD -w $$PWD -v /var/run/docker.sock:/var/run/docker.sock golang:1 go test -failfast -tags integration_oidc,integration -timeout 30m -count=1 ./...
|
||||||
|
|
||||||
coverprofile_func:
|
coverprofile_func:
|
||||||
go tool cover -func=coverage.out
|
go tool cover -func=coverage.out
|
||||||
|
|
|
@ -316,3 +316,22 @@ func GetEnvBool(key string) (bool, error) {
|
||||||
|
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetFirstOrCreateNetwork(pool *dockertest.Pool, name string) (dockertest.Network, error) {
|
||||||
|
networks, err := pool.NetworksByName(name)
|
||||||
|
if err != nil || len(networks) == 0 {
|
||||||
|
|
||||||
|
if _, err := pool.CreateNetwork(name); err == nil {
|
||||||
|
// Create does not give us an updated version of the resource, so we need to
|
||||||
|
// get it again.
|
||||||
|
networks, err := pool.NetworksByName(name)
|
||||||
|
if err != nil {
|
||||||
|
return dockertest.Network{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return networks[0], nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return networks[0], nil
|
||||||
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
oidcHeadscaleHostname = "headscale-oidc"
|
oidcHeadscaleHostname = "headscale-oidc"
|
||||||
oidcMockHostname = "headscale-mock-oidc"
|
oidcMockHostname = "headscale-mock-oidc"
|
||||||
oidcNamespaceName = "oidcnamespace"
|
oidcNamespaceName = "oidcnamespace"
|
||||||
totalOidcContainers = 3
|
totalOidcContainers = 3
|
||||||
)
|
)
|
||||||
|
@ -96,19 +96,11 @@ func (s *IntegrationOIDCTestSuite) SetupSuite() {
|
||||||
s.FailNow(fmt.Sprintf("Could not connect to docker: %s", err), "")
|
s.FailNow(fmt.Sprintf("Could not connect to docker: %s", err), "")
|
||||||
}
|
}
|
||||||
|
|
||||||
if pnetwork, err := s.pool.CreateNetwork("headscale-test"); err == nil {
|
network, err := GetFirstOrCreateNetwork(&s.pool, "headscale-test")
|
||||||
s.network = *pnetwork
|
|
||||||
} else {
|
|
||||||
s.FailNow(fmt.Sprintf("Could not create network: %s", err), "")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create does not give us an updated version of the resource, so we need to
|
|
||||||
// get it again.
|
|
||||||
networks, err := s.pool.NetworksByName("headscale-test")
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.FailNow(fmt.Sprintf("Could not get network: %s", err), "")
|
s.FailNow(fmt.Sprintf("Failed to create or get network: %s", err), "")
|
||||||
}
|
}
|
||||||
s.network = networks[0]
|
s.network = network
|
||||||
|
|
||||||
log.Printf("Network config: %v", s.network.Network.IPAM.Config[0])
|
log.Printf("Network config: %v", s.network.Network.IPAM.Config[0])
|
||||||
|
|
||||||
|
@ -155,7 +147,11 @@ func (s *IntegrationOIDCTestSuite) SetupSuite() {
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Suite.T().Logf("Waiting for headscale mock oidc to be ready for tests")
|
s.Suite.T().Logf("Waiting for headscale mock oidc to be ready for tests")
|
||||||
hostEndpoint := fmt.Sprintf("localhost:%s", s.mockOidc.GetPort("10000/tcp"))
|
hostEndpoint := fmt.Sprintf(
|
||||||
|
"%s:%s",
|
||||||
|
s.mockOidc.GetIPInNetwork(&s.network),
|
||||||
|
s.mockOidc.GetPort("10000/tcp"),
|
||||||
|
)
|
||||||
|
|
||||||
if err := s.pool.Retry(func() error {
|
if err := s.pool.Retry(func() error {
|
||||||
url := fmt.Sprintf("http://%s/oidc/.well-known/openid-configuration", hostEndpoint)
|
url := fmt.Sprintf("http://%s/oidc/.well-known/openid-configuration", hostEndpoint)
|
||||||
|
@ -253,7 +249,11 @@ oidc:
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Suite.T().Logf("Waiting for headscale to be ready for embedded OIDC tests")
|
s.Suite.T().Logf("Waiting for headscale to be ready for embedded OIDC tests")
|
||||||
hostMockEndpoint := fmt.Sprintf("localhost:%s", s.headscale.GetPort("8443/tcp"))
|
hostMockEndpoint := fmt.Sprintf(
|
||||||
|
"%s:%s",
|
||||||
|
s.headscale.GetIPInNetwork(&s.network),
|
||||||
|
s.headscale.GetPort("8443/tcp"),
|
||||||
|
)
|
||||||
|
|
||||||
if err := s.pool.Retry(func() error {
|
if err := s.pool.Retry(func() error {
|
||||||
url := fmt.Sprintf("https://%s/health", hostMockEndpoint)
|
url := fmt.Sprintf("https://%s/health", hostMockEndpoint)
|
||||||
|
@ -347,7 +347,6 @@ func (s *IntegrationOIDCTestSuite) joinOIDC(
|
||||||
endpoint, hostname string,
|
endpoint, hostname string,
|
||||||
tailscale dockertest.Resource,
|
tailscale dockertest.Resource,
|
||||||
) (*url.URL, error) {
|
) (*url.URL, error) {
|
||||||
|
|
||||||
command := []string{
|
command := []string{
|
||||||
"tailscale",
|
"tailscale",
|
||||||
"up",
|
"up",
|
||||||
|
@ -536,7 +535,12 @@ func (s *IntegrationOIDCTestSuite) TestPingAllPeersByAddress() {
|
||||||
[]string{},
|
[]string{},
|
||||||
)
|
)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
log.Printf("result for %s: stdout: %s, stderr: %s\n", hostname, stdout, stderr)
|
log.Printf(
|
||||||
|
"result for %s: stdout: %s, stderr: %s\n",
|
||||||
|
hostname,
|
||||||
|
stdout,
|
||||||
|
stderr,
|
||||||
|
)
|
||||||
assert.Contains(t, stdout, "pong")
|
assert.Contains(t, stdout, "pong")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ private_key_path: private.key
|
||||||
noise:
|
noise:
|
||||||
private_key_path: noise_private.key
|
private_key_path: noise_private.key
|
||||||
listen_addr: 0.0.0.0:8443
|
listen_addr: 0.0.0.0:8443
|
||||||
server_url: https://localhost:8443
|
server_url: https://headscale-oidc:8443
|
||||||
tls_cert_path: "/etc/headscale/tls/server.crt"
|
tls_cert_path: "/etc/headscale/tls/server.crt"
|
||||||
tls_key_path: "/etc/headscale/tls/server.key"
|
tls_key_path: "/etc/headscale/tls/server.key"
|
||||||
tls_client_auth_mode: disabled
|
tls_client_auth_mode: disabled
|
||||||
|
|
Loading…
Reference in a new issue