80 lines
2.2 KiB
Go
80 lines
2.2 KiB
Go
package tests_test
|
|
|
|
import (
|
|
"context"
|
|
"github.com/cirruslabs/orchard/internal/tests/devcontroller"
|
|
"github.com/cirruslabs/orchard/internal/tests/wait"
|
|
v1 "github.com/cirruslabs/orchard/pkg/resource/v1"
|
|
"github.com/stretchr/testify/require"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestLabels(t *testing.T) {
|
|
ctx := context.Background()
|
|
|
|
// Create a development environment
|
|
devClient, _, _ := devcontroller.StartIntegrationTestEnvironmentWithAdditionalOpts(t,
|
|
false, nil,
|
|
true, nil,
|
|
)
|
|
|
|
// Create a worker that doesn't have any labels
|
|
_, err := devClient.Workers().Create(ctx, v1.Worker{
|
|
Meta: v1.Meta{
|
|
Name: "worker-without-labels",
|
|
},
|
|
Resources: map[string]uint64{
|
|
v1.ResourceTartVMs: 2,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
// Create a VM that requests a "role=test" label
|
|
vmName := "test-vm"
|
|
|
|
require.NoError(t, devClient.VMs().Create(ctx, &v1.VM{
|
|
Meta: v1.Meta{
|
|
Name: vmName,
|
|
},
|
|
Image: "example.com/doesnt/matter:latest",
|
|
Labels: map[string]string{"role": "test"},
|
|
Status: v1.VMStatusPending,
|
|
}))
|
|
|
|
// Ensure that this VM doesn't get assigned in 30 seconds
|
|
require.False(t, wait.Wait(30*time.Second, func() bool {
|
|
vm, err := devClient.VMs().Get(context.Background(), vmName)
|
|
require.NoError(t, err)
|
|
|
|
t.Logf("Waiting for the VM %s to be assigned", vmName)
|
|
|
|
return vm.Worker != ""
|
|
}), "VM %s was not expected to be assigned to any worker, but was assigned to some worker", vmName)
|
|
|
|
// Now create one more worker that has the required labels
|
|
const workerWithLabelsName = "worker-with-labels"
|
|
|
|
_, err = devClient.Workers().Create(ctx, v1.Worker{
|
|
Meta: v1.Meta{
|
|
Name: workerWithLabelsName,
|
|
},
|
|
Resources: map[string]uint64{
|
|
v1.ResourceTartVMs: 2,
|
|
},
|
|
Labels: map[string]string{"role": "test"},
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
// Wait for the VM to be assigned to the new worker
|
|
require.True(t, wait.Wait(30*time.Second, func() bool {
|
|
vm, err := devClient.VMs().Get(context.Background(), vmName)
|
|
require.NoError(t, err)
|
|
|
|
t.Logf("Waiting for the VM %s to be assigned to a worker", vmName)
|
|
|
|
return vm.Worker == workerWithLabelsName
|
|
}), "VM was %s expected to be assigned to the worker %q, but was assigned "+
|
|
"to another worker (or no worker)", vmName, workerWithLabelsName)
|
|
}
|