33from unittest import mock
44
55from absl import flags
6+ from perfkitbenchmarker import virtual_machine
67from perfkitbenchmarker import vm_util
78from perfkitbenchmarker .configs import vm_group_decoders
89from perfkitbenchmarker .providers .gcp import gce_managed_instance_group
@@ -18,6 +19,7 @@ class GceManagedInstanceGroupTest(pkb_common_test_case.PkbCommonTestCase):
1819 def setUp (self ):
1920 super ().setUp ()
2021 FLAGS .run_uri = 'test_run'
22+ virtual_machine .BaseVirtualMachine ._instance_counter = 0
2123 self .mock_cmd = self .MockIssueCommand (
2224 {
2325 '' : [('' , '' , 0 )],
@@ -27,13 +29,13 @@ def setUp(self):
2729 @mock .patch .object (gcp_utils , 'GetRegionFromZone' , return_value = 'us-central1' )
2830 @mock .patch .object (gce_virtual_machine .gce_network .GceFirewall , 'GetFirewall' )
2931 @mock .patch .object (gce_virtual_machine .gce_network .GceNetwork , 'GetNetwork' )
30- def TestMig (self , mock_get_network , * _ ):
32+ def TestMig (self , mock_get_network , * _ , zone = 'us-central1-c' ):
3133 mock_get_network .return_value .placement_group .name = 'test_placement_group'
3234 vm_config = pkb_common_test_case .TestGceVirtualMachine (
3335 gce_virtual_machine .GceVmSpec (
3436 'test_component' ,
3537 machine_type = 'n1-standard-4' ,
36- zone = 'us-central1-c' ,
38+ zone = zone ,
3739 )
3840 )
3941 return gce_managed_instance_group .GceManagedInstanceGroup (
@@ -47,7 +49,7 @@ def TestMig(self, mock_get_network, *_):
4749 )
4850
4951 def testCreate (self , * _ ):
50- mig = self .TestMig ()
52+ mig = self .TestMig (zone = 'us-central1-c' )
5153 mig ._Create ()
5254 self .assertIn (
5355 'gcloud compute instance-groups managed create pkb-test_run-0'
@@ -58,6 +60,18 @@ def testCreate(self, *_):
5860 self .mock_cmd .all_commands ,
5961 )
6062
63+ def testCreateRegional (self , * _ ):
64+ mig = self .TestMig (zone = 'us-central1' )
65+ mig ._Create ()
66+ self .assertIn (
67+ 'gcloud compute instance-groups managed create pkb-test_run-0'
68+ ' --template'
69+ ' projects/test_project/regions/us-central1/instanceTemplates/pkb-test_run-0'
70+ ' --size 1 --format json --project test_project --quiet --region'
71+ ' us-central1' ,
72+ self .mock_cmd .all_commands ,
73+ )
74+
6175 # SSH keys
6276 @mock .patch .object (builtins , 'open' )
6377 @mock .patch .object (vm_util , 'NamedTemporaryFile' )
@@ -68,7 +82,7 @@ def testCreateDependencies(self, mock_named_temporary_file, _):
6882 )
6983 mig ._CreateDependencies ()
7084 self .assertIn (
71- 'gcloud compute instance-templates create pkb-test_run-1 '
85+ 'gcloud compute instance-templates create pkb-test_run-0 '
7286 ' --instance-template-region us-central1 --format json --labels '
7387 ' --machine-type n1-standard-4 --maintenance-policy TERMINATE'
7488 ' --metadata enable-oslogin=FALSE,vm_nature=ephemeral'
@@ -78,6 +92,25 @@ def testCreateDependencies(self, mock_named_temporary_file, _):
7892 self .mock_cmd .all_commands ,
7993 )
8094
95+ def testGetCurrentVms (self ):
96+ list_instances_response = (
97+ '[{"name": "pkb-test_run-0-0", "instance":'
98+ ' "https://www.googleapis.com/compute/v1/projects/test_project/'
99+ 'zones/us-central1-c/instances/pkb-test_run-0-0"}]'
100+ )
101+ self .MockIssueCommand (
102+ {
103+ 'gcloud compute instance-groups managed list-instances' : [
104+ (list_instances_response , '' , 0 )
105+ ]
106+ }
107+ )
108+ mig = self .TestMig ()
109+ vms = mig ._GetCurrentVms ()
110+ self .assertEqual (len (vms ), 1 )
111+ self .assertEqual (vms [0 ].name , 'pkb-test_run-0-0' )
112+ self .assertEqual (vms [0 ].zone , 'us-central1-c' )
113+
81114
82115if __name__ == '__main__' :
83116 unittest .main ()
0 commit comments