mirror of
https://github.com/kemko/nomad.git
synced 2026-01-04 09:25:46 +03:00
This PR adds e2e tests for Consul Namespaces for Nomad Enterprise with Consul ACLs enabled. Needed to add support for Consul ACL tokens with `namespace` and `namespace_prefix` blocks, which Nomad parses and validates before tossing the token. These bits will need to be picked back to OSS.
163 lines
5.0 KiB
Go
163 lines
5.0 KiB
Go
package connect
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/hashicorp/nomad/e2e/e2eutil"
|
|
"github.com/hashicorp/nomad/e2e/framework"
|
|
"github.com/hashicorp/nomad/helper/uuid"
|
|
)
|
|
|
|
const (
|
|
// envConsulToken is the consul http token environment variable
|
|
envConsulToken = "CONSUL_HTTP_TOKEN"
|
|
|
|
// demoConnectJob is the example connect enabled job useful for testing
|
|
demoConnectJob = "connect/input/demo.nomad"
|
|
|
|
// demoConnectCustomProxyExposed is a connect job with custom sidecar_task
|
|
// that also uses the expose check feature.
|
|
demoConnectCustomProxyExposed = "connect/input/expose-custom.nomad"
|
|
|
|
// demoConnectNativeJob is the example connect native enabled job useful for testing
|
|
demoConnectNativeJob = "connect/input/native-demo.nomad"
|
|
|
|
// demoConnectIngressGateway is the example ingress gateway job useful for testing
|
|
demoConnectIngressGateway = "connect/input/ingress-gateway.nomad"
|
|
|
|
// demoConnectMultiIngressGateway is the example multi ingress gateway job useful for testing
|
|
demoConnectMultiIngressGateway = "connect/input/multi-ingress.nomad"
|
|
|
|
// demoConnectTerminatingGateway is the example terminating gateway job useful for testing
|
|
demoConnectTerminatingGateway = "connect/input/terminating-gateway.nomad"
|
|
)
|
|
|
|
type ConnectE2ETest struct {
|
|
framework.TC
|
|
jobIds []string
|
|
}
|
|
|
|
func init() {
|
|
// Connect tests without Consul ACLs enabled.
|
|
framework.AddSuites(&framework.TestSuite{
|
|
Component: "Connect",
|
|
CanRunLocal: true,
|
|
Consul: true,
|
|
Cases: []framework.TestCase{
|
|
new(ConnectE2ETest),
|
|
new(ConnectClientStateE2ETest),
|
|
},
|
|
})
|
|
|
|
// Connect tests with Consul ACLs enabled. These are now gated behind the
|
|
// NOMAD_TEST_CONSUL_ACLS environment variable, because they cause lots of
|
|
// problems for e2e test flakiness (due to restarting consul, nomad, etc.).
|
|
//
|
|
// Run these tests locally when working on Connect.
|
|
if os.Getenv("NOMAD_TEST_CONSUL_ACLS") == "1" {
|
|
framework.AddSuites(&framework.TestSuite{
|
|
Component: "ConnectACLs",
|
|
CanRunLocal: false,
|
|
Consul: true,
|
|
Parallel: false,
|
|
Cases: []framework.TestCase{
|
|
new(ConnectACLsE2ETest),
|
|
},
|
|
})
|
|
}
|
|
}
|
|
|
|
func (tc *ConnectE2ETest) BeforeAll(f *framework.F) {
|
|
e2eutil.WaitForLeader(f.T(), tc.Nomad())
|
|
e2eutil.WaitForNodesReady(f.T(), tc.Nomad(), 2)
|
|
}
|
|
|
|
func (tc *ConnectE2ETest) AfterEach(f *framework.F) {
|
|
if os.Getenv("NOMAD_TEST_SKIPCLEANUP") == "1" {
|
|
return
|
|
}
|
|
|
|
for _, id := range tc.jobIds {
|
|
tc.Nomad().Jobs().Deregister(id, true, nil)
|
|
}
|
|
tc.jobIds = []string{}
|
|
tc.Nomad().System().GarbageCollect()
|
|
}
|
|
|
|
func connectJobID() string {
|
|
return "connect" + uuid.Generate()[0:8]
|
|
}
|
|
|
|
// TestConnectDemo tests the demo job file used in Connect Integration examples.
|
|
func (tc *ConnectE2ETest) TestConnectDemo(f *framework.F) {
|
|
t := f.T()
|
|
|
|
jobID := connectJobID()
|
|
tc.jobIds = append(tc.jobIds, jobID)
|
|
|
|
allocs := e2eutil.RegisterAndWaitForAllocs(t, tc.Nomad(), demoConnectJob, jobID, "")
|
|
allocIDs := e2eutil.AllocIDsFromAllocationListStubs(allocs)
|
|
e2eutil.WaitForAllocsRunning(t, tc.Nomad(), allocIDs)
|
|
}
|
|
|
|
// TestConnectCustomSidecarExposed tests that a connect sidecar with custom task
|
|
// definition can also make use of the expose service check feature.
|
|
func (tc *ConnectE2ETest) TestConnectCustomSidecarExposed(f *framework.F) {
|
|
t := f.T()
|
|
|
|
jobID := connectJobID()
|
|
tc.jobIds = append(tc.jobIds, jobID)
|
|
|
|
allocs := e2eutil.RegisterAndWaitForAllocs(t, tc.Nomad(), demoConnectCustomProxyExposed, jobID, "")
|
|
allocIDs := e2eutil.AllocIDsFromAllocationListStubs(allocs)
|
|
e2eutil.WaitForAllocsRunning(t, tc.Nomad(), allocIDs)
|
|
}
|
|
|
|
// TestConnectNativeDemo tests the demo job file used in Connect Native Integration examples.
|
|
func (tc *ConnectE2ETest) TestConnectNativeDemo(f *framework.F) {
|
|
t := f.T()
|
|
|
|
jobID := connectJobID()
|
|
tc.jobIds = append(tc.jobIds, jobID)
|
|
|
|
allocs := e2eutil.RegisterAndWaitForAllocs(t, tc.Nomad(), demoConnectNativeJob, jobID, "")
|
|
allocIDs := e2eutil.AllocIDsFromAllocationListStubs(allocs)
|
|
e2eutil.WaitForAllocsRunning(t, tc.Nomad(), allocIDs)
|
|
}
|
|
|
|
func (tc *ConnectE2ETest) TestConnectIngressGatewayDemo(f *framework.F) {
|
|
t := f.T()
|
|
|
|
jobID := connectJobID()
|
|
tc.jobIds = append(tc.jobIds, jobID)
|
|
|
|
allocs := e2eutil.RegisterAndWaitForAllocs(t, tc.Nomad(), demoConnectIngressGateway, jobID, "")
|
|
allocIDs := e2eutil.AllocIDsFromAllocationListStubs(allocs)
|
|
e2eutil.WaitForAllocsRunning(t, tc.Nomad(), allocIDs)
|
|
}
|
|
|
|
func (tc *ConnectE2ETest) TestConnectMultiIngressGatewayDemo(f *framework.F) {
|
|
t := f.T()
|
|
|
|
jobID := connectJobID()
|
|
tc.jobIds = append(tc.jobIds, jobID)
|
|
|
|
allocs := e2eutil.RegisterAndWaitForAllocs(t, tc.Nomad(), demoConnectMultiIngressGateway, jobID, "")
|
|
|
|
allocIDs := e2eutil.AllocIDsFromAllocationListStubs(allocs)
|
|
e2eutil.WaitForAllocsRunning(t, tc.Nomad(), allocIDs)
|
|
}
|
|
|
|
func (tc *ConnectE2ETest) TestConnectTerminatingGatewayDemo(f *framework.F) {
|
|
|
|
t := f.T()
|
|
|
|
jobID := connectJobID()
|
|
tc.jobIds = append(tc.jobIds, jobID)
|
|
|
|
allocs := e2eutil.RegisterAndWaitForAllocs(t, tc.Nomad(), demoConnectTerminatingGateway, jobID, "")
|
|
|
|
allocIDs := e2eutil.AllocIDsFromAllocationListStubs(allocs)
|
|
e2eutil.WaitForAllocsRunning(t, tc.Nomad(), allocIDs)
|
|
}
|