blob: bd841edd8f1c2feb45a340107e0e0de9ac96a6d2 [file] [log] [blame]
package ct_autoscaler
import (
"testing"
assert "github.com/stretchr/testify/require"
"go.skia.org/infra/go/gce/autoscaler"
"go.skia.org/infra/go/swarming"
"go.skia.org/infra/go/testutils"
)
func TestRegisterGCETask(t *testing.T) {
testutils.SmallTest(t)
mock := &autoscaler.MockAutoscaler{}
c := CTAutoscaler{a: mock}
// Registering the first task should start all instances.
assert.Nil(t, c.RegisterGCETask("test-task1"))
assert.Equal(t, 1, c.activeGCETasks)
assert.Equal(t, 1, mock.StartAllInstancesTimesCalled)
assert.Equal(t, 0, mock.StopAllInstancesTimesCalled)
// Registering the next task should not start all instances.
assert.Nil(t, c.RegisterGCETask("test-task2"))
assert.Equal(t, 2, c.activeGCETasks)
assert.Equal(t, 1, mock.StartAllInstancesTimesCalled)
assert.Equal(t, 0, mock.StopAllInstancesTimesCalled)
}
func TestUnRegisterGCETask(t *testing.T) {
testutils.SmallTest(t)
mock := &autoscaler.MockAutoscaler{}
s := swarming.NewMockApiClient()
s.On("DeleteBots", autoscaler.TestInstances).Return(nil)
defer s.AssertExpectations(t)
c := CTAutoscaler{a: mock, s: s}
// Register 2 tasks.
assert.Nil(t, c.RegisterGCETask("test-task1"))
assert.Nil(t, c.RegisterGCETask("test-task2"))
assert.Equal(t, 2, c.activeGCETasks)
assert.Equal(t, 1, mock.StartAllInstancesTimesCalled)
s.AssertNumberOfCalls(t, "DeleteBots", 0)
// Unregistering the 1st task should not stop all instances.
assert.Nil(t, c.UnregisterGCETask("test-task1"))
s.AssertNumberOfCalls(t, "DeleteBots", 0)
assert.Equal(t, 1, c.activeGCETasks)
assert.Equal(t, 1, mock.StartAllInstancesTimesCalled)
assert.Equal(t, 0, mock.StopAllInstancesTimesCalled)
// Unregistering the 2nd task should stop all instances.
s.On("DeleteBots", autoscaler.TestInstances).Return(nil)
assert.Nil(t, c.UnregisterGCETask("test-task2"))
s.AssertNumberOfCalls(t, "DeleteBots", 1)
assert.Equal(t, 0, c.activeGCETasks)
assert.Equal(t, 1, mock.StartAllInstancesTimesCalled)
assert.Equal(t, 1, mock.StopAllInstancesTimesCalled)
// Registering and then unregistering a 3rd task should start and stop all
// instances.
assert.Nil(t, c.RegisterGCETask("test-task3"))
s.AssertNumberOfCalls(t, "DeleteBots", 1)
assert.Equal(t, 1, c.activeGCETasks)
assert.Equal(t, 2, mock.StartAllInstancesTimesCalled)
assert.Equal(t, 1, mock.StopAllInstancesTimesCalled)
assert.Nil(t, c.UnregisterGCETask("test-task3"))
s.AssertNumberOfCalls(t, "DeleteBots", 2)
assert.Equal(t, 0, c.activeGCETasks)
assert.Equal(t, 2, mock.StartAllInstancesTimesCalled)
assert.Equal(t, 2, mock.StopAllInstancesTimesCalled)
}