open-nomad/api/util_test.go

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

150 lines
3.2 KiB
Go
Raw Permalink Normal View History

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
2015-09-09 01:42:34 +00:00
package api
2017-02-06 19:48:28 +00:00
import (
"crypto/rand"
"fmt"
2017-02-06 19:48:28 +00:00
"testing"
"github.com/shoenig/test/must"
2017-02-06 19:48:28 +00:00
)
2015-09-09 01:42:34 +00:00
func assertQueryMeta(t *testing.T, qm *QueryMeta) {
t.Helper()
must.NotEq(t, 0, qm.LastIndex, must.Sprint("bad index"))
must.True(t, qm.KnownLeader, must.Sprint("expected a known leader but gone none"))
2015-09-09 01:42:34 +00:00
}
func assertWriteMeta(t *testing.T, wm *WriteMeta) {
t.Helper()
must.Positive(t, wm.LastIndex, must.Sprint("expected WriteMeta.LastIndex to be > 0"))
2015-09-09 01:42:34 +00:00
}
func testJob() *Job {
task := NewTask("task1", "raw_exec").
2016-04-13 22:55:46 +00:00
SetConfig("command", "/bin/sleep").
2016-02-02 21:26:12 +00:00
Require(&Resources{
CPU: pointerOf(100),
MemoryMB: pointerOf(256),
2016-02-19 23:49:32 +00:00
}).
2016-02-10 21:36:47 +00:00
SetLogConfig(&LogConfig{
MaxFiles: pointerOf(1),
MaxFileSizeMB: pointerOf(2),
2016-02-19 23:49:32 +00:00
})
2015-09-16 18:42:08 +00:00
group := NewTaskGroup("group1", 1).
2016-08-26 03:10:25 +00:00
AddTask(task).
RequireDisk(&EphemeralDisk{
SizeMB: pointerOf(25),
2016-08-26 03:10:25 +00:00
})
2015-09-16 18:42:08 +00:00
job := NewBatchJob("job1", "redis", "global", 1).
2015-09-16 18:42:08 +00:00
AddDatacenter("dc1").
AddTaskGroup(group)
return job
2015-09-09 01:42:34 +00:00
}
2016-01-13 18:19:53 +00:00
func testServiceJob() *Job {
// Create a job of type service
task := NewTask("dummy-task", "exec").SetConfig("command", "/bin/sleep")
group1 := NewTaskGroup("dummy-group", 1).AddTask(task)
job := NewServiceJob("dummy-service", "dummy-service", "global", 5).AddTaskGroup(group1)
return job
}
func testJobWithScalingPolicy() *Job {
job := testJob()
job.TaskGroups[0].Scaling = &ScalingPolicy{
Policy: map[string]interface{}{},
Min: pointerOf(int64(1)),
Max: pointerOf(int64(5)),
Enabled: pointerOf(true),
}
return job
}
2016-01-13 18:19:53 +00:00
func testPeriodicJob() *Job {
job := testJob().AddPeriodicConfig(&PeriodicConfig{
Enabled: pointerOf(true),
Spec: pointerOf("*/30 * * * *"),
SpecType: pointerOf("cron"),
2016-01-13 18:19:53 +00:00
})
return job
}
2017-09-07 23:56:15 +00:00
func testRecommendation(job *Job) *Recommendation {
rec := &Recommendation{
ID: "",
Region: *job.Region,
Namespace: *job.Namespace,
JobID: *job.ID,
Group: *job.TaskGroups[0].Name,
Task: job.TaskGroups[0].Tasks[0].Name,
Resource: "CPU",
Value: *job.TaskGroups[0].Tasks[0].Resources.CPU * 2,
Meta: map[string]interface{}{
"testing": true,
"mocked": "also true",
},
Stats: map[string]float64{
"median": 50.0,
"mean": 51.0,
"max": 75.5,
"99": 73.0,
"min": 0.0,
},
EnforceVersion: false,
}
return rec
}
2017-09-07 23:56:15 +00:00
func testNamespace() *Namespace {
return &Namespace{
Name: "test-namespace",
Description: "Testing namespaces",
}
}
2017-10-13 21:36:02 +00:00
func testQuotaSpec() *QuotaSpec {
return &QuotaSpec{
Name: "test-quota",
2017-10-13 21:36:02 +00:00
Description: "Testing namespaces",
Limits: []*QuotaLimit{
{
Region: "global",
RegionLimit: &Resources{
CPU: pointerOf(2000),
MemoryMB: pointerOf(2000),
2017-10-13 21:36:02 +00:00
},
},
},
}
}
// conversions utils only used for testing
// added here to avoid linter warning
// float64ToPtr returns the pointer to an float64
func float64ToPtr(f float64) *float64 {
return &f
}
// generateUUID generates a uuid useful for testing only
func generateUUID() string {
buf := make([]byte, 16)
if _, err := rand.Read(buf); err != nil {
panic(fmt.Errorf("failed to read random bytes: %v", err))
}
return fmt.Sprintf("%08x-%04x-%04x-%04x-%12x",
buf[0:4],
buf[4:6],
buf[6:8],
buf[8:10],
buf[10:16])
}