75 lines
1.9 KiB
Go
75 lines
1.9 KiB
Go
package servicediscovery
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/nomad/api"
|
|
"github.com/hashicorp/nomad/e2e/e2eutil"
|
|
"github.com/hashicorp/nomad/helper/uuid"
|
|
"github.com/shoenig/test/must"
|
|
)
|
|
|
|
func testSimpleLoadBalancing(t *testing.T) {
|
|
nomadClient := e2eutil.NomadClient(t)
|
|
|
|
// Generate our job ID which will be used for the entire test.
|
|
jobID := "nsd-simple-lb-replicas" + uuid.Short()
|
|
jobIDs := []string{jobID}
|
|
|
|
// Defer a cleanup function to remove the job. This will trigger if the
|
|
// test fails, unless the cancel function is called.
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
defer e2eutil.CleanupJobsAndGCWithContext(t, ctx, &jobIDs)
|
|
|
|
// Register the replicas job.
|
|
allocStubs := e2eutil.RegisterAndWaitForAllocs(t, nomadClient, jobSimpleLBReplicas, jobID, "")
|
|
must.Len(t, 3, allocStubs)
|
|
|
|
for _, stub := range allocStubs {
|
|
var tag string
|
|
switch stub.TaskGroup {
|
|
case "db_replica_1":
|
|
tag = "r1"
|
|
case "db_replica_2":
|
|
tag = "r2"
|
|
case "db_replica_3":
|
|
tag = "r3"
|
|
}
|
|
expectService := api.ServiceRegistration{
|
|
ServiceName: "db",
|
|
Namespace: api.DefaultNamespace,
|
|
Datacenter: "dc1",
|
|
JobID: jobID,
|
|
AllocID: stub.ID,
|
|
Tags: []string{tag},
|
|
}
|
|
filter := fmt.Sprintf("Tags contains %q", tag)
|
|
requireEventuallyNomadService(t, &expectService, filter)
|
|
}
|
|
|
|
jobID2 := "nsd-simple-lb-clients" + uuid.Short()
|
|
jobIDs = append(jobIDs, jobID2)
|
|
|
|
// Register the clients job.
|
|
allocStubs = e2eutil.RegisterAndWaitForAllocs(t, nomadClient, jobSimpleLBClients, jobID2, "")
|
|
must.Len(t, 2, allocStubs)
|
|
|
|
for _, stub := range allocStubs {
|
|
var expCount int
|
|
switch stub.TaskGroup {
|
|
case "client_1":
|
|
expCount = 1
|
|
case "client_2":
|
|
expCount = 2
|
|
}
|
|
must.NoError(t, e2eutil.WaitForAllocFile(stub.ID, "cat/output.txt", func(content string) bool {
|
|
count := strings.Count(content, "server ")
|
|
return count == expCount
|
|
}, nil))
|
|
}
|
|
}
|