Skip to content

Commit ad2c294

Browse files
committed
Add marvin test for ASG
1 parent 80f4b0d commit ad2c294

2 files changed

Lines changed: 89 additions & 9 deletions

File tree

test/integration/smoke/test_vm_autoscaling.py

Lines changed: 84 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
DiskOffering,
3939
Domain,
4040
Project,
41+
ResourceSchedule,
4142
ServiceOffering,
4243
Template,
4344
VirtualMachine,
@@ -65,6 +66,7 @@
6566
DEFAULT_INTERVAL = 30
6667
DEFAULT_QUIETTIME = 60
6768
NAME_PREFIX = "AS-VmGroup-"
69+
SCHEDULED_RESOURCE_TYPE_ASG = "AutoScaleVmGroup"
6870

6971
CONFIG_NAME_DISK_CONTROLLER = "vmware.root.disk.controller"
7072
OS_DEFAULT = "osdefault"
@@ -860,13 +862,81 @@ def test_04_stop_remove_vm_in_vmgroup(self):
860862

861863
VirtualMachine.delete(vm, self.apiclient, expunge=True)
862864

863-
@attr(tags=["advanced"], required_hardware="false")
864-
def test_05_remove_vmgroup(self):
865-
""" Verify removal of AutoScaling VM Group"""
866-
self.message("Running test_05_remove_vmgroup")
865+
@attr(tags=["advanced", "vj", "smoke"], required_hardware="false")
866+
def test_05_autoscaling_vmgroup_schedule_update(self):
867+
"""Verify resource scheduling updates AutoScale VM Group min/max members"""
868+
self.message("Running test_05_autoscaling_vmgroup_schedule_update")
867869

868-
self.delete_vmgroup(self.autoscaling_vmgroup, self.regular_user_apiclient, cleanup=False, expected=False)
869-
self.delete_vmgroup(self.autoscaling_vmgroup, self.regular_user_apiclient, cleanup=True, expected=True)
870+
vmgroups = AutoScaleVmGroup.list(
871+
self.regular_user_apiclient,
872+
id=self.autoscaling_vmgroup.id
873+
)
874+
self.assertEqual(
875+
isinstance(vmgroups, list),
876+
True,
877+
"List autoscale vm groups should return a valid list"
878+
)
879+
self.assertEqual(
880+
len(vmgroups) > 0,
881+
True,
882+
"Expected autoscale vm group to exist"
883+
)
884+
vmgroup = vmgroups[0]
885+
886+
current_min_members = int(vmgroup.minmembers)
887+
current_max_members = int(vmgroup.maxmembers)
888+
new_min_members = current_min_members + 1
889+
new_max_members = current_max_members + 1
890+
891+
schedule = ResourceSchedule.create(
892+
self.regular_user_apiclient,
893+
SCHEDULED_RESOURCE_TYPE_ASG,
894+
self.autoscaling_vmgroup.id,
895+
"update",
896+
"* * * * *",
897+
datetime.datetime.now().astimezone().tzinfo,
898+
(datetime.datetime.now() + datetime.timedelta(seconds=5)).strftime(
899+
"%Y-%m-%d %H:%M:%S"
900+
),
901+
enabled=True,
902+
details=[{
903+
"minmembers": str(new_min_members)},
904+
{
905+
"maxmembers": str(new_max_members)
906+
}]
907+
)
908+
self.cleanup.append(schedule)
909+
self.message("Created AutoScale VM Group schedule with ID: %s" % schedule.id)
910+
911+
schedules = ResourceSchedule.list(
912+
self.regular_user_apiclient,
913+
SCHEDULED_RESOURCE_TYPE_ASG,
914+
self.autoscaling_vmgroup.id,
915+
id=schedule.id
916+
)
917+
self.assertEqual(
918+
isinstance(schedules, list),
919+
True,
920+
"Check list response returns a valid list for ASG schedules",
921+
)
922+
self.assertNotEqual(len(schedules), 0, "Check ASG schedule list")
923+
924+
# Poll for up to 4 minutes to allow the scheduler worker to run and apply update
925+
schedule_worked = False
926+
for _ in range(0, 24):
927+
time.sleep(10)
928+
updated_group = AutoScaleVmGroup.list(
929+
self.regular_user_apiclient,
930+
id=self.autoscaling_vmgroup.id
931+
)[0]
932+
if int(updated_group.minmembers) == new_min_members and int(updated_group.maxmembers) == new_max_members:
933+
schedule_worked = True
934+
break
935+
936+
self.assertTrue(
937+
schedule_worked,
938+
"Expected scheduled action to update AutoScale VM Group min/max members"
939+
)
870940

871941
@attr(tags=["advanced"], required_hardware="false")
872942
def test_06_autoscaling_vmgroup_on_project_network(self):
@@ -1211,3 +1281,11 @@ def test_07_autoscaling_vmgroup_on_vpc_network(self):
12111281

12121282
self.delete_vmgroup(autoscaling_vmgroup_vpc, self.regular_user_apiclient, cleanup=False, expected=False)
12131283
self.delete_vmgroup(autoscaling_vmgroup_vpc, self.regular_user_apiclient, cleanup=True, expected=True)
1284+
1285+
@attr(tags=["advanced", "vj"], required_hardware="false")
1286+
def test_05_remove_vmgroup(self):
1287+
""" Verify removal of AutoScaling VM Group"""
1288+
self.message("Running test_05_remove_vmgroup")
1289+
1290+
self.delete_vmgroup(self.autoscaling_vmgroup, self.regular_user_apiclient, cleanup=False, expected=False)
1291+
self.delete_vmgroup(self.autoscaling_vmgroup, self.regular_user_apiclient, cleanup=True, expected=True)

ui/src/views/compute/ResourceSchedules.vue

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
/>
107107
</a-form-item>
108108
<a-form-item
109+
v-if="actions.length > 1"
109110
name="action"
110111
ref="action"
111112
:wrapperCol="{ span: 24 }"
@@ -140,7 +141,7 @@
140141
ref="minMembers"
141142
>
142143
<template #label>
143-
<tooltip-label :title="$t('label.minimum.members')" />
144+
<tooltip-label :title="$t('label.minmembers')" />
144145
</template>
145146
<a-input-number
146147
v-model:value="form.minMembers"
@@ -155,7 +156,7 @@
155156
ref="maxMembers"
156157
>
157158
<template #label>
158-
<tooltip-label :title="$t('label.maximum.members')" />
159+
<tooltip-label :title="$t('label.maxmembers')" />
159160
</template>
160161
<a-input-number
161162
v-model:value="form.maxMembers"
@@ -483,11 +484,12 @@ export default {
483484
this.formRef.value.validate().then(() => {
484485
const formRaw = toRaw(this.form)
485486
const values = this.handleRemoveFields(formRaw)
487+
const selectedAction = values.action || (this.actions.length === 1 ? this.actions[0].value : null)
486488
var params = {
487489
description: values.description,
488490
schedule: values.schedule,
489491
timezone: values.timezone,
490-
action: values.action,
492+
action: selectedAction,
491493
resourceid: this.resource.id,
492494
resourcetype: this.resourceType,
493495
enabled: values.enabled,

0 commit comments

Comments
 (0)