mirror of
https://github.com/juanfont/headscale.git
synced 2024-12-26 06:05:52 -05:00
Run all integration tests fully in docker
Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
parent
22cabc16d7
commit
a94ed0586e
30
Makefile
30
Makefile
@ -27,18 +27,40 @@ test:
|
|||||||
test_integration: test_integration_cli test_integration_derp test_integration_oidc test_integration_general
|
test_integration: test_integration_cli test_integration_derp test_integration_oidc test_integration_general
|
||||||
|
|
||||||
test_integration_cli:
|
test_integration_cli:
|
||||||
go test -failfast -tags integration_cli,integration -timeout 30m -count=1 ./...
|
docker network rm $$(docker network ls --filter name=headscale --quiet) || true
|
||||||
|
docker network create headscale-test || true
|
||||||
|
docker run -t --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_cli,integration -timeout 30m -count=1 ./...
|
||||||
|
|
||||||
test_integration_derp:
|
test_integration_derp:
|
||||||
go test -failfast -tags integration_derp,integration -timeout 30m -count=1 ./...
|
docker network rm $$(docker network ls --filter name=headscale --quiet) || true
|
||||||
|
docker network create headscale-test || true
|
||||||
|
docker run -t --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_derp,integration -timeout 30m -count=1 ./...
|
||||||
|
|
||||||
test_integration_general:
|
test_integration_general:
|
||||||
go test -failfast -tags integration_general,integration -timeout 30m -count=1 ./...
|
docker network rm $$(docker network ls --filter name=headscale --quiet) || true
|
||||||
|
docker network create headscale-test || true
|
||||||
|
docker run -t --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_general,integration -timeout 30m -count=1 ./...
|
||||||
|
|
||||||
test_integration_oidc:
|
test_integration_oidc:
|
||||||
docker network rm $$(docker network ls --filter name=headscale --quiet) || true
|
docker network rm $$(docker network ls --filter name=headscale --quiet) || true
|
||||||
docker network create headscale-test || true
|
docker network create headscale-test || true
|
||||||
docker run -t --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 ./...
|
docker run -t --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
|
||||||
|
@ -28,18 +28,19 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
headscaleDerpHostname = "headscale-derp"
|
headscaleDerpHostname = "headscale-derp"
|
||||||
namespaceName = "derpnamespace"
|
namespaceName = "derpnamespace"
|
||||||
totalContainers = 3
|
totalContainers = 3
|
||||||
)
|
)
|
||||||
|
|
||||||
type IntegrationDERPTestSuite struct {
|
type IntegrationDERPTestSuite struct {
|
||||||
suite.Suite
|
suite.Suite
|
||||||
stats *suite.SuiteInformation
|
stats *suite.SuiteInformation
|
||||||
|
|
||||||
pool dockertest.Pool
|
pool dockertest.Pool
|
||||||
networks map[int]dockertest.Network // so we keep the containers isolated
|
network dockertest.Network
|
||||||
headscale dockertest.Resource
|
containerNetworks map[int]dockertest.Network // so we keep the containers isolated
|
||||||
saveLogs bool
|
headscale dockertest.Resource
|
||||||
|
saveLogs bool
|
||||||
|
|
||||||
tailscales map[string]dockertest.Resource
|
tailscales map[string]dockertest.Resource
|
||||||
joinWaitGroup sync.WaitGroup
|
joinWaitGroup sync.WaitGroup
|
||||||
@ -54,7 +55,7 @@ func TestDERPIntegrationTestSuite(t *testing.T) {
|
|||||||
s := new(IntegrationDERPTestSuite)
|
s := new(IntegrationDERPTestSuite)
|
||||||
|
|
||||||
s.tailscales = make(map[string]dockertest.Resource)
|
s.tailscales = make(map[string]dockertest.Resource)
|
||||||
s.networks = make(map[int]dockertest.Network)
|
s.containerNetworks = make(map[int]dockertest.Network)
|
||||||
s.saveLogs = saveLogs
|
s.saveLogs = saveLogs
|
||||||
|
|
||||||
suite.Run(t, s)
|
suite.Run(t, s)
|
||||||
@ -79,7 +80,7 @@ func TestDERPIntegrationTestSuite(t *testing.T) {
|
|||||||
log.Printf("Could not purge resource: %s\n", err)
|
log.Printf("Could not purge resource: %s\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, network := range s.networks {
|
for _, network := range s.containerNetworks {
|
||||||
if err := network.Close(); err != nil {
|
if err := network.Close(); err != nil {
|
||||||
log.Printf("Could not close network: %s\n", err)
|
log.Printf("Could not close network: %s\n", err)
|
||||||
}
|
}
|
||||||
@ -94,9 +95,15 @@ func (s *IntegrationDERPTestSuite) SetupSuite() {
|
|||||||
s.FailNow(fmt.Sprintf("Could not connect to docker: %s", err), "")
|
s.FailNow(fmt.Sprintf("Could not connect to docker: %s", err), "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
network, err := GetFirstOrCreateNetwork(&s.pool, "headscale-test")
|
||||||
|
if err != nil {
|
||||||
|
s.FailNow(fmt.Sprintf("Failed to create or get network: %s", err), "")
|
||||||
|
}
|
||||||
|
s.network = network
|
||||||
|
|
||||||
for i := 0; i < totalContainers; i++ {
|
for i := 0; i < totalContainers; i++ {
|
||||||
if pnetwork, err := s.pool.CreateNetwork(fmt.Sprintf("headscale-derp-%d", i)); err == nil {
|
if pnetwork, err := s.pool.CreateNetwork(fmt.Sprintf("headscale-derp-%d", i)); err == nil {
|
||||||
s.networks[i] = *pnetwork
|
s.containerNetworks[i] = *pnetwork
|
||||||
} else {
|
} else {
|
||||||
s.FailNow(fmt.Sprintf("Could not create network: %s", err), "")
|
s.FailNow(fmt.Sprintf("Could not create network: %s", err), "")
|
||||||
}
|
}
|
||||||
@ -121,6 +128,7 @@ func (s *IntegrationDERPTestSuite) SetupSuite() {
|
|||||||
),
|
),
|
||||||
},
|
},
|
||||||
Cmd: []string{"headscale", "serve"},
|
Cmd: []string{"headscale", "serve"},
|
||||||
|
Networks: []*dockertest.Network{&s.network},
|
||||||
ExposedPorts: []string{"8443/tcp", "3478/udp"},
|
ExposedPorts: []string{"8443/tcp", "3478/udp"},
|
||||||
PortBindings: map[docker.Port][]docker.PortBinding{
|
PortBindings: map[docker.Port][]docker.PortBinding{
|
||||||
"8443/tcp": {{HostPort: "8443"}},
|
"8443/tcp": {{HostPort: "8443"}},
|
||||||
@ -154,13 +162,15 @@ func (s *IntegrationDERPTestSuite) SetupSuite() {
|
|||||||
hostname, container := s.tailscaleContainer(
|
hostname, container := s.tailscaleContainer(
|
||||||
fmt.Sprint(i),
|
fmt.Sprint(i),
|
||||||
version,
|
version,
|
||||||
s.networks[i],
|
s.containerNetworks[i],
|
||||||
)
|
)
|
||||||
s.tailscales[hostname] = *container
|
s.tailscales[hostname] = *container
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("Waiting for headscale to be ready for embedded DERP tests")
|
log.Println("Waiting for headscale to be ready for embedded DERP tests")
|
||||||
hostEndpoint := fmt.Sprintf("localhost:%s", s.headscale.GetPort("8443/tcp"))
|
hostEndpoint := 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", hostEndpoint)
|
url := fmt.Sprintf("https://%s/health", hostEndpoint)
|
||||||
@ -321,7 +331,7 @@ func (s *IntegrationDERPTestSuite) TearDownSuite() {
|
|||||||
log.Printf("Could not purge resource: %s\n", err)
|
log.Printf("Could not purge resource: %s\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, network := range s.networks {
|
for _, network := range s.containerNetworks {
|
||||||
if err := network.Close(); err != nil {
|
if err := network.Close(); err != nil {
|
||||||
log.Printf("Could not close network: %s\n", err)
|
log.Printf("Could not close network: %s\n", err)
|
||||||
}
|
}
|
||||||
@ -429,7 +439,9 @@ func (s *IntegrationDERPTestSuite) TestPingAllPeersByHostname() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *IntegrationDERPTestSuite) TestDERPSTUN() {
|
func (s *IntegrationDERPTestSuite) TestDERPSTUN() {
|
||||||
headscaleSTUNAddr := fmt.Sprintf("localhost:%s", s.headscale.GetPort("3478/udp"))
|
headscaleSTUNAddr := fmt.Sprintf("%s:%s",
|
||||||
|
s.headscale.GetIPInNetwork(&s.network),
|
||||||
|
s.headscale.GetPort("3478/udp"))
|
||||||
client := stun.NewClient()
|
client := stun.NewClient()
|
||||||
client.SetVerbose(true)
|
client.SetVerbose(true)
|
||||||
client.SetVVerbose(true)
|
client.SetVVerbose(true)
|
||||||
|
@ -289,7 +289,9 @@ func (s *IntegrationTestSuite) SetupSuite() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.Println("Waiting for headscale to be ready for core integration tests")
|
log.Println("Waiting for headscale to be ready for core integration tests")
|
||||||
hostEndpoint := fmt.Sprintf("localhost:%s", s.headscale.GetPort("8080/tcp"))
|
hostEndpoint := fmt.Sprintf("%s:%s",
|
||||||
|
s.headscale.GetIPInNetwork(&s.network),
|
||||||
|
s.headscale.GetPort("8080/tcp"))
|
||||||
|
|
||||||
if err := s.pool.Retry(func() error {
|
if err := s.pool.Retry(func() error {
|
||||||
url := fmt.Sprintf("http://%s/health", hostEndpoint)
|
url := fmt.Sprintf("http://%s/health", hostEndpoint)
|
||||||
|
Loading…
Reference in New Issue
Block a user