119 lines
2.6 KiB
Go
119 lines
2.6 KiB
Go
package driver
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/nomad/client/allocdir"
|
|
"github.com/hashicorp/nomad/client/config"
|
|
"github.com/hashicorp/nomad/nomad/structs"
|
|
)
|
|
|
|
var basicResources = &structs.Resources{
|
|
CPU: 250,
|
|
MemoryMB: 256,
|
|
Networks: []*structs.NetworkResource{
|
|
&structs.NetworkResource{
|
|
IP: "1.2.3.4",
|
|
ReservedPorts: []int{12345},
|
|
DynamicPorts: []string{"HTTP"},
|
|
},
|
|
},
|
|
}
|
|
|
|
func testLogger() *log.Logger {
|
|
return log.New(os.Stderr, "", log.LstdFlags)
|
|
}
|
|
|
|
func testConfig() *config.Config {
|
|
conf := &config.Config{}
|
|
conf.StateDir = os.TempDir()
|
|
conf.AllocDir = os.TempDir()
|
|
return conf
|
|
}
|
|
|
|
func testDriverContext(task string) *DriverContext {
|
|
cfg := testConfig()
|
|
return NewDriverContext(task, cfg, cfg.Node, testLogger())
|
|
}
|
|
|
|
func testDriverExecContext(task *structs.Task, driverCtx *DriverContext) *ExecContext {
|
|
allocDir := allocdir.NewAllocDir(filepath.Join(driverCtx.config.AllocDir, structs.GenerateUUID()))
|
|
allocDir.Build([]*structs.Task{task})
|
|
ctx := NewExecContext(allocDir)
|
|
return ctx
|
|
}
|
|
|
|
func contains(l []string, s string) bool {
|
|
for _, item := range l {
|
|
if item == s {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func TestPopulateEnvironment(t *testing.T) {
|
|
ctx := &ExecContext{}
|
|
task := &structs.Task{
|
|
Resources: &structs.Resources{
|
|
CPU: 1000,
|
|
MemoryMB: 500,
|
|
Networks: []*structs.NetworkResource{
|
|
&structs.NetworkResource{
|
|
IP: "1.2.3.4",
|
|
ReservedPorts: []int{80, 443, 8080, 12345},
|
|
DynamicPorts: []string{"admin", "5000"},
|
|
},
|
|
},
|
|
},
|
|
Meta: map[string]string{
|
|
"chocolate": "cake",
|
|
"strawberry": "icecream",
|
|
},
|
|
}
|
|
|
|
env := PopulateEnvironment(ctx, task)
|
|
|
|
// Resources
|
|
cpu := "NOMAD_CPU_LIMIT=1000"
|
|
if !contains(env, cpu) {
|
|
t.Errorf("%s is missing from env", cpu)
|
|
}
|
|
memory := "NOMAD_MEMORY_LIMIT=500"
|
|
if !contains(env, memory) {
|
|
t.Errorf("%s is missing from env", memory)
|
|
}
|
|
|
|
// Networking
|
|
ip := "NOMAD_IP=1.2.3.4"
|
|
if !contains(env, ip) {
|
|
t.Errorf("%s is missing from env", ip)
|
|
}
|
|
labelport := "NOMAD_PORT_ADMIN=8080"
|
|
if !contains(env, labelport) {
|
|
t.Errorf("%s is missing from env", labelport)
|
|
}
|
|
numberport := "NOMAD_PORT_5000=12345"
|
|
if !contains(env, numberport) {
|
|
t.Errorf("%s is missing from env", numberport)
|
|
}
|
|
|
|
// Metas
|
|
chocolate := "NOMAD_META_CHOCOLATE=cake"
|
|
if !contains(env, chocolate) {
|
|
t.Errorf("%s is missing from env", chocolate)
|
|
}
|
|
strawberry := "NOMAD_META_STRAWBERRY=icecream"
|
|
if !contains(env, strawberry) {
|
|
t.Errorf("%s is missing from env", strawberry)
|
|
}
|
|
|
|
// Output some debug info to help see what happened.
|
|
if t.Failed() {
|
|
t.Logf("env: %#v", env)
|
|
}
|
|
}
|