1616
1717package compute .reservation ;
1818
19+ import static com .google .cloud .compute .v1 .ReservationAffinity .ConsumeReservationType .SPECIFIC_RESERVATION ;
1920import static com .google .common .truth .Truth .assertThat ;
2021import static com .google .common .truth .Truth .assertWithMessage ;
2122
2223import com .google .api .gax .rpc .NotFoundException ;
24+ import com .google .cloud .compute .v1 .Instance ;
25+ import com .google .cloud .compute .v1 .InstancesClient ;
2326import com .google .cloud .compute .v1 .Reservation ;
2427import com .google .cloud .compute .v1 .ReservationsClient ;
2528import compute .CreateInstanceTemplate ;
2629import compute .CreateRegionalInstanceTemplate ;
30+ import compute .DeleteInstance ;
2731import compute .DeleteInstanceTemplate ;
2832import compute .DeleteRegionalInstanceTemplate ;
2933import compute .Util ;
@@ -50,18 +54,20 @@ public class ReservationIT {
5054 private static final String PROJECT_ID = System .getenv ("GOOGLE_CLOUD_PROJECT" );
5155 private static final String ZONE = "us-west1-a" ;
5256 private static final String REGION = ZONE .substring (0 , ZONE .lastIndexOf ('-' ));
57+ static String javaVersion = System .getProperty ("java.version" ).substring (0 , 2 );
5358 private static ReservationsClient reservationsClient ;
59+ private static InstancesClient instancesClient ;
5460 private static String RESERVATION_NAME_GLOBAL ;
5561 private static String RESERVATION_NAME_REGIONAL ;
5662 private static String GLOBAL_INSTANCE_TEMPLATE_URI ;
5763 private static String REGIONAL_INSTANCE_TEMPLATE_URI ;
58- static String javaVersion = System .getProperty ("java.version" ).substring (0 , 2 );
59- private static final String GLOBAL_INSTANCE_TEMPLATE_NAME =
60- "test-global-inst-temp-" + javaVersion + "-" + UUID .randomUUID ().toString ().substring (0 , 8 );
61- private static final String REGIONAL_INSTANCE_TEMPLATE_NAME =
62- "test-regional-inst-temp-" + javaVersion + "-"
63- + UUID .randomUUID ().toString ().substring (0 , 8 );
64+ private static String RESERVATION_SHARED_NAME ;
65+ private static String SPECIFIC_SHARED_INSTANCE_NAME ;
66+ private static String GLOBAL_INSTANCE_TEMPLATE_NAME ;
67+ private static String REGIONAL_INSTANCE_TEMPLATE_NAME ;
6468 private static final int NUMBER_OF_VMS = 3 ;
69+ private static final String MACHINE_TYPE = "n2-standard-32" ;
70+ private static final String MIN_CPU_PLATFORM = "Intel Cascade Lake" ;
6571
6672 // Check if the required environment variables are set.
6773 public static void requireEnvVar (String envVarName ) {
@@ -79,25 +85,38 @@ public static void setUp()
7985 System .setOut (new PrintStream (stdOut ));
8086
8187 // Cleanup existing stale resources.
88+ Util .cleanUpExistingInstances ("test-shared-instance-" + javaVersion , PROJECT_ID , ZONE );
8289 Util .cleanUpExistingInstanceTemplates ("test-global-inst-temp-" + javaVersion , PROJECT_ID );
8390 Util .cleanUpExistingRegionalInstanceTemplates (
8491 "test-regional-inst-temp-" + javaVersion , PROJECT_ID , ZONE );
8592 Util .cleanUpExistingReservations (
8693 "test-reservation-global-" + javaVersion , PROJECT_ID , ZONE );
8794 Util .cleanUpExistingReservations ("test-reservation-regional-" + javaVersion , PROJECT_ID , ZONE );
95+ Util .cleanUpExistingReservations ("test-shared-instance-" + javaVersion , PROJECT_ID , ZONE );
8896
8997 // Initialize the client once for all tests
9098 reservationsClient = ReservationsClient .create ();
99+ instancesClient = InstancesClient .create ();
91100
92101 RESERVATION_NAME_GLOBAL = "test-reservation-global-" + javaVersion + "-"
93102 + UUID .randomUUID ().toString ().substring (0 , 8 );
94103 RESERVATION_NAME_REGIONAL = "test-reservation-regional-" + javaVersion + "-"
95104 + UUID .randomUUID ().toString ().substring (0 , 8 );
105+ GLOBAL_INSTANCE_TEMPLATE_NAME =
106+ "test-global-inst-temp-" + javaVersion + "-" + UUID .randomUUID ().toString ().substring (0 , 8 );
107+ REGIONAL_INSTANCE_TEMPLATE_NAME =
108+ "test-regional-inst-temp-" + javaVersion + "-"
109+ + UUID .randomUUID ().toString ().substring (0 , 8 );
96110 GLOBAL_INSTANCE_TEMPLATE_URI = String .format ("projects/%s/global/instanceTemplates/%s" ,
97111 PROJECT_ID , GLOBAL_INSTANCE_TEMPLATE_NAME );
98112 REGIONAL_INSTANCE_TEMPLATE_URI =
99113 String .format ("projects/%s/regions/%s/instanceTemplates/%s" ,
100114 PROJECT_ID , REGION , REGIONAL_INSTANCE_TEMPLATE_NAME );
115+ RESERVATION_SHARED_NAME = "test-reservation-shared-" + javaVersion
116+ + "-" + UUID .randomUUID ().toString ().substring (0 , 8 );
117+ SPECIFIC_SHARED_INSTANCE_NAME =
118+ "test-shared-instance-" + javaVersion + "-"
119+ + UUID .randomUUID ().toString ().substring (0 , 8 );
101120
102121 // Create instance template with GLOBAL location.
103122 CreateInstanceTemplate .createInstanceTemplate (PROJECT_ID , GLOBAL_INSTANCE_TEMPLATE_NAME );
@@ -133,8 +152,10 @@ public static void cleanup()
133152 + REGIONAL_INSTANCE_TEMPLATE_NAME );
134153
135154 // Delete all reservations created for testing.
155+ DeleteInstance .deleteInstance (PROJECT_ID , ZONE , SPECIFIC_SHARED_INSTANCE_NAME );
136156 DeleteReservation .deleteReservation (PROJECT_ID , ZONE , RESERVATION_NAME_GLOBAL );
137157 DeleteReservation .deleteReservation (PROJECT_ID , ZONE , RESERVATION_NAME_REGIONAL );
158+ DeleteReservation .deleteReservation (PROJECT_ID , ZONE , RESERVATION_SHARED_NAME );
138159
139160 // Test that reservations are deleted
140161 Assertions .assertThrows (
@@ -143,9 +164,13 @@ public static void cleanup()
143164 Assertions .assertThrows (
144165 NotFoundException .class ,
145166 () -> GetReservation .getReservation (PROJECT_ID , RESERVATION_NAME_REGIONAL , ZONE ));
167+ Assertions .assertThrows (
168+ NotFoundException .class ,
169+ () -> GetReservation .getReservation (PROJECT_ID , RESERVATION_SHARED_NAME , ZONE ));
146170
147171 // Close the client after all tests
148172 reservationsClient .close ();
173+ instancesClient .close ();
149174
150175 stdOut .close ();
151176 System .setOut (out );
@@ -177,4 +202,27 @@ public void testCreateReservationWithRegionInstanceTemplate()
177202 Assert .assertTrue (reservation .getZone ().contains (ZONE ));
178203 Assert .assertEquals (RESERVATION_NAME_REGIONAL , reservation .getName ());
179204 }
205+
206+ @ Test
207+ public void testConsumeSpecificSharedReservation ()
208+ throws IOException , ExecutionException , InterruptedException , TimeoutException {
209+ ConsumeSpecificSharedReservation .createReservation (PROJECT_ID ,
210+ RESERVATION_SHARED_NAME , NUMBER_OF_VMS , ZONE ,
211+ MACHINE_TYPE , MIN_CPU_PLATFORM , true );
212+
213+ Assertions .assertEquals (RESERVATION_SHARED_NAME ,
214+ reservationsClient .get (PROJECT_ID , ZONE , RESERVATION_SHARED_NAME ).getName ());
215+
216+ ConsumeSpecificSharedReservation .createInstance (
217+ PROJECT_ID , ZONE , SPECIFIC_SHARED_INSTANCE_NAME , MACHINE_TYPE ,
218+ MIN_CPU_PLATFORM , RESERVATION_SHARED_NAME );
219+
220+ // Verify that the instance was created with the correct reservation and consumeReservationType
221+ Instance instance = instancesClient .get (PROJECT_ID , ZONE , SPECIFIC_SHARED_INSTANCE_NAME );
222+
223+ Assertions .assertTrue (instance .getReservationAffinity ()
224+ .getValuesList ().get (0 ).contains (RESERVATION_SHARED_NAME ));
225+ Assertions .assertEquals (SPECIFIC_RESERVATION .toString (),
226+ instance .getReservationAffinity ().getConsumeReservationType ());
227+ }
180228}
0 commit comments