Add version support to integration support

This commit adds a list of tailscale versions to use in the integration
test. An equal distribution of versions will be used across the clients.
This commit is contained in:
Kristoffer Dalby 2021-09-20 19:23:18 +01:00
parent bf26e37e0e
commit d68d201722
No known key found for this signature in database
GPG key ID: 09F62DC067465735
2 changed files with 51 additions and 30 deletions

View file

@ -1,9 +1,11 @@
FROM ubuntu:latest
ARG TAILSCALE_VERSION=now
RUN apt-get update \
&& apt-get install -y gnupg curl \
&& curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.gpg | apt-key add - \
&& curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.list | tee /etc/apt/sources.list.d/tailscale.list \
&& apt-get update \
&& apt-get install -y tailscale \
&& apt-get install -y tailscale=${TAILSCALE_VERSION} \
&& rm -rf /var/lib/apt/lists/*

View file

@ -1,3 +1,4 @@
//go:build integration
// +build integration
package headscale
@ -23,14 +24,20 @@ import (
"inet.af/netaddr"
)
var integrationTmpDir string
var ih Headscale
var (
integrationTmpDir string
ih Headscale
)
var pool dockertest.Pool
var network dockertest.Network
var headscale dockertest.Resource
var tailscaleCount int = 25
var tailscales map[string]dockertest.Resource
var (
pool dockertest.Pool
network dockertest.Network
headscale dockertest.Resource
tailscaleCount int = 25
tailscales map[string]dockertest.Resource
)
var tailscaleVersions = []string{"1.14.3", "1.12.3"}
type IntegrationTestSuite struct {
suite.Suite
@ -119,12 +126,12 @@ func saveLog(resource *dockertest.Resource, basePath string) error {
fmt.Printf("Saving logs for %s to %s\n", resource.Container.Name, basePath)
err = ioutil.WriteFile(path.Join(basePath, resource.Container.Name+".stdout.log"), []byte(stdout.String()), 0644)
err = ioutil.WriteFile(path.Join(basePath, resource.Container.Name+".stdout.log"), []byte(stdout.String()), 0o644)
if err != nil {
return err
}
err = ioutil.WriteFile(path.Join(basePath, resource.Container.Name+".stderr.log"), []byte(stdout.String()), 0644)
err = ioutil.WriteFile(path.Join(basePath, resource.Container.Name+".stderr.log"), []byte(stdout.String()), 0o644)
if err != nil {
return err
}
@ -140,6 +147,32 @@ func dockerRestartPolicy(config *docker.HostConfig) {
}
}
func tailscaleContainer(identifier string, version string) (string, *dockertest.Resource) {
tailscaleBuildOptions := &dockertest.BuildOptions{
Dockerfile: "Dockerfile.tailscale",
ContextDir: ".",
BuildArgs: []docker.BuildArg{
{
Name: "TAILSCALE_VERSION",
Value: version,
},
},
}
hostname := fmt.Sprintf("tailscale-%s-%s", strings.Replace(version, ".", "-", -1), identifier)
tailscaleOptions := &dockertest.RunOptions{
Name: hostname,
Networks: []*dockertest.Network{&network},
Cmd: []string{"tailscaled", "--tun=userspace-networking", "--socks5-server=localhost:1055"},
}
pts, err := pool.BuildAndRunWithBuildOptions(tailscaleBuildOptions, tailscaleOptions, dockerRestartPolicy)
if err != nil {
log.Fatalf("Could not start resource: %s", err)
}
fmt.Printf("Created %s container\n", hostname)
return hostname, pts
}
func (s *IntegrationTestSuite) SetupSuite() {
var err error
h = Headscale{
@ -164,11 +197,6 @@ func (s *IntegrationTestSuite) SetupSuite() {
ContextDir: ".",
}
tailscaleBuildOptions := &dockertest.BuildOptions{
Dockerfile: "Dockerfile.tailscale",
ContextDir: ".",
}
currentPath, err := os.Getwd()
if err != nil {
log.Fatalf("Could not determine current path: %s", err)
@ -183,7 +211,7 @@ func (s *IntegrationTestSuite) SetupSuite() {
Networks: []*dockertest.Network{&network},
Cmd: []string{"headscale", "serve"},
PortBindings: map[docker.Port][]docker.PortBinding{
"8080/tcp": []docker.PortBinding{{HostPort: "8080"}},
"8080/tcp": {{HostPort: "8080"}},
},
}
@ -198,19 +226,10 @@ func (s *IntegrationTestSuite) SetupSuite() {
fmt.Println("Creating tailscale containers")
tailscales = make(map[string]dockertest.Resource)
for i := 0; i < tailscaleCount; i++ {
hostname := fmt.Sprintf("tailscale%d", i)
tailscaleOptions := &dockertest.RunOptions{
Name: hostname,
Networks: []*dockertest.Network{&network},
Cmd: []string{"tailscaled", "--tun=userspace-networking", "--socks5-server=localhost:1055"},
}
version := tailscaleVersions[i%len(tailscaleVersions)]
if pts, err := pool.BuildAndRunWithBuildOptions(tailscaleBuildOptions, tailscaleOptions, dockerRestartPolicy); err == nil {
tailscales[hostname] = *pts
} else {
log.Fatalf("Could not start resource: %s", err)
}
fmt.Printf("Created %s container\n", hostname)
hostname, container := tailscaleContainer(fmt.Sprint(i), version)
tailscales[hostname] = *container
}
fmt.Println("Waiting for headscale to be ready")
@ -288,7 +307,7 @@ func (s *IntegrationTestSuite) TestListNodes() {
lines := strings.Split(result, "\n")
assert.Equal(s.T(), len(tailscales), len(lines)-2)
for hostname, _ := range tailscales {
for hostname := range tailscales {
assert.Contains(s.T(), result, hostname)
}
}
@ -298,7 +317,7 @@ func (s *IntegrationTestSuite) TestGetIpAddresses() {
ips, err := getIPs()
assert.Nil(s.T(), err)
for hostname, _ := range tailscales {
for hostname := range tailscales {
s.T().Run(hostname, func(t *testing.T) {
ip := ips[hostname]