@@ -108,49 +108,101 @@ func TestReservations(t *testing.T) {
108
108
109
109
var buf bytes.Buffer
110
110
111
- err := createTemplate (tc .ProjectID , templateName )
112
- if err != nil {
113
- t .Errorf ("createTemplate got err: %v" , err )
114
- }
115
- defer deleteTemplate (tc .ProjectID , templateName )
116
-
117
- sourceTemplate , err := getTemplate (tc .ProjectID , templateName )
118
- if err != nil {
119
- t .Errorf ("getTemplate got err: %v" , err )
120
- }
121
-
122
- want := "Reservation created"
123
- if err := createReservation (& buf , tc .ProjectID , zone , reservationName , * sourceTemplate .SelfLink ); err != nil {
124
- t .Errorf ("createReservation got err: %v" , err )
125
- }
126
- if got := buf .String (); ! strings .Contains (got , want ) {
127
- t .Errorf ("createReservation got %s, want %s" , got , want )
128
- }
129
- buf .Reset ()
130
-
131
- want = fmt .Sprintf ("Reservation: %s" , reservationName )
132
- if err := getReservation (& buf , tc .ProjectID , zone , reservationName ); err != nil {
133
- t .Errorf ("getReservation got err: %v" , err )
134
- }
135
- if got := buf .String (); ! strings .Contains (got , want ) {
136
- t .Errorf ("getReservation got %s, want %s" , got , want )
137
- }
138
- buf .Reset ()
139
-
140
- want = fmt .Sprintf ("- %s %d" , reservationName , 2 )
141
- if err := listReservations (& buf , tc .ProjectID , zone ); err != nil {
142
- t .Errorf ("listReservations got err: %v" , err )
143
- }
144
- if got := buf .String (); ! strings .Contains (got , want ) {
145
- t .Errorf ("listReservations got %s, want %s" , got , want )
146
- }
147
- buf .Reset ()
148
-
149
- want = "Reservation deleted"
150
- if err := deleteReservation (& buf , tc .ProjectID , zone , reservationName ); err != nil {
151
- t .Errorf ("deleteReservation got err: %v" , err )
152
- }
153
- if got := buf .String (); ! strings .Contains (got , want ) {
154
- t .Errorf ("deleteReservation got %s, want %s" , got , want )
155
- }
111
+ t .Run ("Reservation CRUD" , func (t * testing.T ) {
112
+ err := createTemplate (tc .ProjectID , templateName )
113
+ if err != nil {
114
+ t .Errorf ("createTemplate got err: %v" , err )
115
+ }
116
+ defer deleteTemplate (tc .ProjectID , templateName )
117
+
118
+ sourceTemplate , err := getTemplate (tc .ProjectID , templateName )
119
+ if err != nil {
120
+ t .Errorf ("getTemplate got err: %v" , err )
121
+ }
122
+
123
+ want := "Reservation created"
124
+ if err := createReservation (& buf , tc .ProjectID , zone , reservationName , * sourceTemplate .SelfLink ); err != nil {
125
+ t .Errorf ("createReservation got err: %v" , err )
126
+ }
127
+ if got := buf .String (); ! strings .Contains (got , want ) {
128
+ t .Errorf ("createReservation got %s, want %s" , got , want )
129
+ }
130
+ buf .Reset ()
131
+
132
+ want = fmt .Sprintf ("Reservation: %s" , reservationName )
133
+ if err := getReservation (& buf , tc .ProjectID , zone , reservationName ); err != nil {
134
+ t .Errorf ("getReservation got err: %v" , err )
135
+ }
136
+ if got := buf .String (); ! strings .Contains (got , want ) {
137
+ t .Errorf ("getReservation got %s, want %s" , got , want )
138
+ }
139
+ buf .Reset ()
140
+
141
+ want = fmt .Sprintf ("- %s %d" , reservationName , 2 )
142
+ if err := listReservations (& buf , tc .ProjectID , zone ); err != nil {
143
+ t .Errorf ("listReservations got err: %v" , err )
144
+ }
145
+ if got := buf .String (); ! strings .Contains (got , want ) {
146
+ t .Errorf ("listReservations got %s, want %s" , got , want )
147
+ }
148
+ buf .Reset ()
149
+
150
+ want = "Reservation deleted"
151
+ if err := deleteReservation (& buf , tc .ProjectID , zone , reservationName ); err != nil {
152
+ t .Errorf ("deleteReservation got err: %v" , err )
153
+ }
154
+ if got := buf .String (); ! strings .Contains (got , want ) {
155
+ t .Errorf ("deleteReservation got %s, want %s" , got , want )
156
+ }
157
+ })
158
+
159
+ t .Run ("Shared reservation CRUD" , func (t * testing.T ) {
160
+ baseProjectID := tc .ProjectID
161
+ // This test require 2 projects, therefore one of them is mocked.
162
+ // If you want to make a real test, please adjust projectID accordingly and uncomment reservationsClient creation.
163
+ // Make sure that base project has proper permissions to share reservations.
164
+ // See: https://cloud.google.com/compute/docs/instances/reservations-shared#shared_reservation_constraint
165
+ destinationProjectID := "some-project"
166
+ err := createTemplate (baseProjectID , templateName )
167
+ if err != nil {
168
+ t .Errorf ("createTemplate got err: %v" , err )
169
+ }
170
+ defer deleteTemplate (baseProjectID , templateName )
171
+
172
+ sourceTemplate , err := getTemplate (baseProjectID , templateName )
173
+ if err != nil {
174
+ t .Errorf ("getTemplate got err: %v" , err )
175
+ }
176
+
177
+ want := "Reservation created"
178
+
179
+ ctx := context .Background ()
180
+
181
+ // Uncomment line below if you want to run the test without mocks
182
+ // reservationsClient, err := compute.NewReservationsRESTClient(ctx)
183
+ reservationsClient := ReservationsClient {}
184
+ if err != nil {
185
+ t .Errorf ("Couldn't create reservationsClient, err: %v" , err )
186
+ }
187
+ defer reservationsClient .Close ()
188
+
189
+ if err := createSharedReservation (& buf , reservationsClient , destinationProjectID , baseProjectID , zone , reservationName , * sourceTemplate .SelfLink ); err != nil {
190
+ t .Errorf ("createSharedReservation got err: %v" , err )
191
+ }
192
+ if got := buf .String (); ! strings .Contains (got , want ) {
193
+ t .Errorf ("createSharedReservation got %s, want %s" , got , want )
194
+ }
195
+ buf .Reset ()
196
+
197
+ req := & computepb.DeleteReservationRequest {
198
+ Project : baseProjectID ,
199
+ Reservation : reservationName ,
200
+ Zone : zone ,
201
+ }
202
+
203
+ _ , err = reservationsClient .Delete (ctx , req )
204
+ if err != nil {
205
+ t .Errorf ("unable to delete reservation: %v" , err )
206
+ }
207
+ })
156
208
}
0 commit comments