Files
virtual-kubelet/providers/aws/fargate/pod_test.go
2018-04-26 11:06:42 -07:00

135 lines
3.9 KiB
Go

package fargate
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
// TestTaskSizeTableInvariants verifies that the task size table is in ascending order by CPU.
// This is necessary for Pod::mapTaskSize to function correctly.
func TestTaskSizeTableInvariants(t *testing.T) {
prevRow := taskSizeTable[0]
for _, row := range taskSizeTable {
assert.True(t, row.cpu >= prevRow.cpu, "Task size table must be in ascending order by CPU")
prevRow = row
}
}
// TestPodResourceRequirements verifies whether Kubernetes pod resource requirements
// are translated to Fargate task resource requests correctly.
func TestPodResourceRequirements(t *testing.T) {
type testCase struct {
podCPU int64
podMemory int64
taskCPU int64
taskMemory int64
}
testCases := []testCase{
{0, 0, 256, 512},
{1, 1, 256, 512},
{200, 256, 256, 512},
{200, 512, 256, 512},
{256, 3072, 512, 3072},
{256, 512, 256, 512},
{256, 1024, 256, 1024},
{256, 2048, 256, 2048},
{512, 1024, 512, 1024},
{512, 2048, 512, 2048},
{512, 3072, 512, 3072},
{512, 4096, 512, 4096},
{1024, 2 * 1024, 1024, 2 * 1024},
{1024, 3 * 1024, 1024, 3 * 1024},
{1024, 4 * 1024, 1024, 4 * 1024},
{1024, 5 * 1024, 1024, 5 * 1024},
{1024, 6 * 1024, 1024, 6 * 1024},
{1024, 7 * 1024, 1024, 7 * 1024},
{1024, 8 * 1024, 1024, 8 * 1024},
{2048, 4 * 1024, 2048, 4 * 1024},
{2048, 5 * 1024, 2048, 5 * 1024},
{2048, 6 * 1024, 2048, 6 * 1024},
{2048, 7 * 1024, 2048, 7 * 1024},
{2048, 8 * 1024, 2048, 8 * 1024},
{2048, 9 * 1024, 2048, 9 * 1024},
{2048, 10 * 1024, 2048, 10 * 1024},
{2048, 11 * 1024, 2048, 11 * 1024},
{2048, 12 * 1024, 2048, 12 * 1024},
{2048, 13 * 1024, 2048, 13 * 1024},
{2048, 14 * 1024, 2048, 14 * 1024},
{2048, 15 * 1024, 2048, 15 * 1024},
{2048, 16 * 1024, 2048, 16 * 1024},
{4096, 8 * 1024, 4096, 8 * 1024},
{4096, 9 * 1024, 4096, 9 * 1024},
{4096, 10 * 1024, 4096, 10 * 1024},
{4096, 11 * 1024, 4096, 11 * 1024},
{4096, 12 * 1024, 4096, 12 * 1024},
{4096, 13 * 1024, 4096, 13 * 1024},
{4096, 14 * 1024, 4096, 14 * 1024},
{4096, 15 * 1024, 4096, 15 * 1024},
{4096, 16 * 1024, 4096, 16 * 1024},
{4096, 17 * 1024, 4096, 17 * 1024},
{4096, 18 * 1024, 4096, 18 * 1024},
{4096, 19 * 1024, 4096, 19 * 1024},
{4096, 20 * 1024, 4096, 20 * 1024},
{4096, 21 * 1024, 4096, 21 * 1024},
{4096, 22 * 1024, 4096, 22 * 1024},
{4096, 23 * 1024, 4096, 23 * 1024},
{4096, 24 * 1024, 4096, 24 * 1024},
{4096, 25 * 1024, 4096, 25 * 1024},
{4096, 26 * 1024, 4096, 26 * 1024},
{4096, 27 * 1024, 4096, 27 * 1024},
{4096, 28 * 1024, 4096, 28 * 1024},
{4096, 29 * 1024, 4096, 29 * 1024},
{4096, 30 * 1024, 4096, 30 * 1024},
{4097, 30 * 1024, 0, 0},
{4096, 30*1024 + 1, 0, 0},
{4096, 32 * 1024, 0, 0},
{8192, 64 * 1024, 0, 0},
}
for _, tc := range testCases {
t.Run(
fmt.Sprintf("cpu:%v,memory:%v", tc.podCPU, tc.podMemory),
func(t *testing.T) {
pod := &Pod{
taskCPU: tc.podCPU,
taskMemory: tc.podMemory,
}
err := pod.mapTaskSize()
if tc.taskCPU != 0 {
// Test case is expected to succeed.
assert.NoErrorf(t, err,
"mapTaskSize failed for (cpu:%v memory:%v)",
tc.podCPU, tc.podMemory)
if err != nil {
return
}
} else {
// Test case is expected to fail.
assert.Errorf(t, err,
"mapTaskSize expected to fail but succeeded for (cpu:%v memory:%v)",
tc.podCPU, tc.podMemory)
return
}
assert.True(t, pod.taskCPU >= tc.podCPU, "pod assigned less cpu than requested")
assert.True(t, pod.taskMemory >= tc.podMemory, "pod assigned less memory than requested")
assert.Truef(t,
pod.taskCPU == tc.taskCPU && pod.taskMemory == tc.taskMemory,
"requested (cpu:%v memory:%v) expected (cpu:%v memory:%v) observed (cpu:%v memory:%v)\n",
tc.podCPU, tc.podMemory, tc.taskCPU, tc.taskMemory, pod.taskCPU, pod.taskMemory)
})
}
}