1 /* 2 * Copyright 2022 Google LLC 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.cloud.dataproc.v1; 18 19 import static com.google.cloud.dataproc.v1.JobControllerClient.ListJobsPagedResponse; 20 21 import com.google.api.gax.core.NoCredentialsProvider; 22 import com.google.api.gax.grpc.GaxGrpcProperties; 23 import com.google.api.gax.grpc.testing.LocalChannelProvider; 24 import com.google.api.gax.grpc.testing.MockGrpcService; 25 import com.google.api.gax.grpc.testing.MockServiceHelper; 26 import com.google.api.gax.rpc.ApiClientHeaderProvider; 27 import com.google.api.gax.rpc.InvalidArgumentException; 28 import com.google.api.gax.rpc.StatusCode; 29 import com.google.common.collect.Lists; 30 import com.google.longrunning.Operation; 31 import com.google.protobuf.AbstractMessage; 32 import com.google.protobuf.Any; 33 import com.google.protobuf.Empty; 34 import com.google.protobuf.FieldMask; 35 import io.grpc.StatusRuntimeException; 36 import java.io.IOException; 37 import java.util.ArrayList; 38 import java.util.Arrays; 39 import java.util.HashMap; 40 import java.util.List; 41 import java.util.UUID; 42 import java.util.concurrent.ExecutionException; 43 import javax.annotation.Generated; 44 import org.junit.After; 45 import org.junit.AfterClass; 46 import org.junit.Assert; 47 import org.junit.Before; 48 import org.junit.BeforeClass; 49 import org.junit.Test; 50 51 @Generated("by gapic-generator-java") 52 public class JobControllerClientTest { 53 private static MockJobController mockJobController; 54 private static MockServiceHelper mockServiceHelper; 55 private LocalChannelProvider channelProvider; 56 private JobControllerClient client; 57 58 @BeforeClass startStaticServer()59 public static void startStaticServer() { 60 mockJobController = new MockJobController(); 61 mockServiceHelper = 62 new MockServiceHelper( 63 UUID.randomUUID().toString(), Arrays.<MockGrpcService>asList(mockJobController)); 64 mockServiceHelper.start(); 65 } 66 67 @AfterClass stopServer()68 public static void stopServer() { 69 mockServiceHelper.stop(); 70 } 71 72 @Before setUp()73 public void setUp() throws IOException { 74 mockServiceHelper.reset(); 75 channelProvider = mockServiceHelper.createChannelProvider(); 76 JobControllerSettings settings = 77 JobControllerSettings.newBuilder() 78 .setTransportChannelProvider(channelProvider) 79 .setCredentialsProvider(NoCredentialsProvider.create()) 80 .build(); 81 client = JobControllerClient.create(settings); 82 } 83 84 @After tearDown()85 public void tearDown() throws Exception { 86 client.close(); 87 } 88 89 @Test submitJobTest()90 public void submitJobTest() throws Exception { 91 Job expectedResponse = 92 Job.newBuilder() 93 .setReference(JobReference.newBuilder().build()) 94 .setPlacement(JobPlacement.newBuilder().build()) 95 .setStatus(JobStatus.newBuilder().build()) 96 .addAllStatusHistory(new ArrayList<JobStatus>()) 97 .addAllYarnApplications(new ArrayList<YarnApplication>()) 98 .setDriverOutputResourceUri("driverOutputResourceUri794556277") 99 .setDriverControlFilesUri("driverControlFilesUri1491948202") 100 .putAllLabels(new HashMap<String, String>()) 101 .setScheduling(JobScheduling.newBuilder().build()) 102 .setJobUuid("jobUuid-1437868776") 103 .setDone(true) 104 .setDriverSchedulingConfig(DriverSchedulingConfig.newBuilder().build()) 105 .build(); 106 mockJobController.addResponse(expectedResponse); 107 108 String projectId = "projectId-894832108"; 109 String region = "region-934795532"; 110 Job job = Job.newBuilder().build(); 111 112 Job actualResponse = client.submitJob(projectId, region, job); 113 Assert.assertEquals(expectedResponse, actualResponse); 114 115 List<AbstractMessage> actualRequests = mockJobController.getRequests(); 116 Assert.assertEquals(1, actualRequests.size()); 117 SubmitJobRequest actualRequest = ((SubmitJobRequest) actualRequests.get(0)); 118 119 Assert.assertEquals(projectId, actualRequest.getProjectId()); 120 Assert.assertEquals(region, actualRequest.getRegion()); 121 Assert.assertEquals(job, actualRequest.getJob()); 122 Assert.assertTrue( 123 channelProvider.isHeaderSent( 124 ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), 125 GaxGrpcProperties.getDefaultApiClientHeaderPattern())); 126 } 127 128 @Test submitJobExceptionTest()129 public void submitJobExceptionTest() throws Exception { 130 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 131 mockJobController.addException(exception); 132 133 try { 134 String projectId = "projectId-894832108"; 135 String region = "region-934795532"; 136 Job job = Job.newBuilder().build(); 137 client.submitJob(projectId, region, job); 138 Assert.fail("No exception raised"); 139 } catch (InvalidArgumentException e) { 140 // Expected exception. 141 } 142 } 143 144 @Test submitJobAsOperationTest()145 public void submitJobAsOperationTest() throws Exception { 146 Job expectedResponse = 147 Job.newBuilder() 148 .setReference(JobReference.newBuilder().build()) 149 .setPlacement(JobPlacement.newBuilder().build()) 150 .setStatus(JobStatus.newBuilder().build()) 151 .addAllStatusHistory(new ArrayList<JobStatus>()) 152 .addAllYarnApplications(new ArrayList<YarnApplication>()) 153 .setDriverOutputResourceUri("driverOutputResourceUri794556277") 154 .setDriverControlFilesUri("driverControlFilesUri1491948202") 155 .putAllLabels(new HashMap<String, String>()) 156 .setScheduling(JobScheduling.newBuilder().build()) 157 .setJobUuid("jobUuid-1437868776") 158 .setDone(true) 159 .setDriverSchedulingConfig(DriverSchedulingConfig.newBuilder().build()) 160 .build(); 161 Operation resultOperation = 162 Operation.newBuilder() 163 .setName("submitJobAsOperationTest") 164 .setDone(true) 165 .setResponse(Any.pack(expectedResponse)) 166 .build(); 167 mockJobController.addResponse(resultOperation); 168 169 String projectId = "projectId-894832108"; 170 String region = "region-934795532"; 171 Job job = Job.newBuilder().build(); 172 173 Job actualResponse = client.submitJobAsOperationAsync(projectId, region, job).get(); 174 Assert.assertEquals(expectedResponse, actualResponse); 175 176 List<AbstractMessage> actualRequests = mockJobController.getRequests(); 177 Assert.assertEquals(1, actualRequests.size()); 178 SubmitJobRequest actualRequest = ((SubmitJobRequest) actualRequests.get(0)); 179 180 Assert.assertEquals(projectId, actualRequest.getProjectId()); 181 Assert.assertEquals(region, actualRequest.getRegion()); 182 Assert.assertEquals(job, actualRequest.getJob()); 183 Assert.assertTrue( 184 channelProvider.isHeaderSent( 185 ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), 186 GaxGrpcProperties.getDefaultApiClientHeaderPattern())); 187 } 188 189 @Test submitJobAsOperationExceptionTest()190 public void submitJobAsOperationExceptionTest() throws Exception { 191 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 192 mockJobController.addException(exception); 193 194 try { 195 String projectId = "projectId-894832108"; 196 String region = "region-934795532"; 197 Job job = Job.newBuilder().build(); 198 client.submitJobAsOperationAsync(projectId, region, job).get(); 199 Assert.fail("No exception raised"); 200 } catch (ExecutionException e) { 201 Assert.assertEquals(InvalidArgumentException.class, e.getCause().getClass()); 202 InvalidArgumentException apiException = ((InvalidArgumentException) e.getCause()); 203 Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode()); 204 } 205 } 206 207 @Test getJobTest()208 public void getJobTest() throws Exception { 209 Job expectedResponse = 210 Job.newBuilder() 211 .setReference(JobReference.newBuilder().build()) 212 .setPlacement(JobPlacement.newBuilder().build()) 213 .setStatus(JobStatus.newBuilder().build()) 214 .addAllStatusHistory(new ArrayList<JobStatus>()) 215 .addAllYarnApplications(new ArrayList<YarnApplication>()) 216 .setDriverOutputResourceUri("driverOutputResourceUri794556277") 217 .setDriverControlFilesUri("driverControlFilesUri1491948202") 218 .putAllLabels(new HashMap<String, String>()) 219 .setScheduling(JobScheduling.newBuilder().build()) 220 .setJobUuid("jobUuid-1437868776") 221 .setDone(true) 222 .setDriverSchedulingConfig(DriverSchedulingConfig.newBuilder().build()) 223 .build(); 224 mockJobController.addResponse(expectedResponse); 225 226 String projectId = "projectId-894832108"; 227 String region = "region-934795532"; 228 String jobId = "jobId101296568"; 229 230 Job actualResponse = client.getJob(projectId, region, jobId); 231 Assert.assertEquals(expectedResponse, actualResponse); 232 233 List<AbstractMessage> actualRequests = mockJobController.getRequests(); 234 Assert.assertEquals(1, actualRequests.size()); 235 GetJobRequest actualRequest = ((GetJobRequest) actualRequests.get(0)); 236 237 Assert.assertEquals(projectId, actualRequest.getProjectId()); 238 Assert.assertEquals(region, actualRequest.getRegion()); 239 Assert.assertEquals(jobId, actualRequest.getJobId()); 240 Assert.assertTrue( 241 channelProvider.isHeaderSent( 242 ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), 243 GaxGrpcProperties.getDefaultApiClientHeaderPattern())); 244 } 245 246 @Test getJobExceptionTest()247 public void getJobExceptionTest() throws Exception { 248 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 249 mockJobController.addException(exception); 250 251 try { 252 String projectId = "projectId-894832108"; 253 String region = "region-934795532"; 254 String jobId = "jobId101296568"; 255 client.getJob(projectId, region, jobId); 256 Assert.fail("No exception raised"); 257 } catch (InvalidArgumentException e) { 258 // Expected exception. 259 } 260 } 261 262 @Test listJobsTest()263 public void listJobsTest() throws Exception { 264 Job responsesElement = Job.newBuilder().build(); 265 ListJobsResponse expectedResponse = 266 ListJobsResponse.newBuilder() 267 .setNextPageToken("") 268 .addAllJobs(Arrays.asList(responsesElement)) 269 .build(); 270 mockJobController.addResponse(expectedResponse); 271 272 String projectId = "projectId-894832108"; 273 String region = "region-934795532"; 274 275 ListJobsPagedResponse pagedListResponse = client.listJobs(projectId, region); 276 277 List<Job> resources = Lists.newArrayList(pagedListResponse.iterateAll()); 278 279 Assert.assertEquals(1, resources.size()); 280 Assert.assertEquals(expectedResponse.getJobsList().get(0), resources.get(0)); 281 282 List<AbstractMessage> actualRequests = mockJobController.getRequests(); 283 Assert.assertEquals(1, actualRequests.size()); 284 ListJobsRequest actualRequest = ((ListJobsRequest) actualRequests.get(0)); 285 286 Assert.assertEquals(projectId, actualRequest.getProjectId()); 287 Assert.assertEquals(region, actualRequest.getRegion()); 288 Assert.assertTrue( 289 channelProvider.isHeaderSent( 290 ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), 291 GaxGrpcProperties.getDefaultApiClientHeaderPattern())); 292 } 293 294 @Test listJobsExceptionTest()295 public void listJobsExceptionTest() throws Exception { 296 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 297 mockJobController.addException(exception); 298 299 try { 300 String projectId = "projectId-894832108"; 301 String region = "region-934795532"; 302 client.listJobs(projectId, region); 303 Assert.fail("No exception raised"); 304 } catch (InvalidArgumentException e) { 305 // Expected exception. 306 } 307 } 308 309 @Test listJobsTest2()310 public void listJobsTest2() throws Exception { 311 Job responsesElement = Job.newBuilder().build(); 312 ListJobsResponse expectedResponse = 313 ListJobsResponse.newBuilder() 314 .setNextPageToken("") 315 .addAllJobs(Arrays.asList(responsesElement)) 316 .build(); 317 mockJobController.addResponse(expectedResponse); 318 319 String projectId = "projectId-894832108"; 320 String region = "region-934795532"; 321 String filter = "filter-1274492040"; 322 323 ListJobsPagedResponse pagedListResponse = client.listJobs(projectId, region, filter); 324 325 List<Job> resources = Lists.newArrayList(pagedListResponse.iterateAll()); 326 327 Assert.assertEquals(1, resources.size()); 328 Assert.assertEquals(expectedResponse.getJobsList().get(0), resources.get(0)); 329 330 List<AbstractMessage> actualRequests = mockJobController.getRequests(); 331 Assert.assertEquals(1, actualRequests.size()); 332 ListJobsRequest actualRequest = ((ListJobsRequest) actualRequests.get(0)); 333 334 Assert.assertEquals(projectId, actualRequest.getProjectId()); 335 Assert.assertEquals(region, actualRequest.getRegion()); 336 Assert.assertEquals(filter, actualRequest.getFilter()); 337 Assert.assertTrue( 338 channelProvider.isHeaderSent( 339 ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), 340 GaxGrpcProperties.getDefaultApiClientHeaderPattern())); 341 } 342 343 @Test listJobsExceptionTest2()344 public void listJobsExceptionTest2() throws Exception { 345 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 346 mockJobController.addException(exception); 347 348 try { 349 String projectId = "projectId-894832108"; 350 String region = "region-934795532"; 351 String filter = "filter-1274492040"; 352 client.listJobs(projectId, region, filter); 353 Assert.fail("No exception raised"); 354 } catch (InvalidArgumentException e) { 355 // Expected exception. 356 } 357 } 358 359 @Test updateJobTest()360 public void updateJobTest() throws Exception { 361 Job expectedResponse = 362 Job.newBuilder() 363 .setReference(JobReference.newBuilder().build()) 364 .setPlacement(JobPlacement.newBuilder().build()) 365 .setStatus(JobStatus.newBuilder().build()) 366 .addAllStatusHistory(new ArrayList<JobStatus>()) 367 .addAllYarnApplications(new ArrayList<YarnApplication>()) 368 .setDriverOutputResourceUri("driverOutputResourceUri794556277") 369 .setDriverControlFilesUri("driverControlFilesUri1491948202") 370 .putAllLabels(new HashMap<String, String>()) 371 .setScheduling(JobScheduling.newBuilder().build()) 372 .setJobUuid("jobUuid-1437868776") 373 .setDone(true) 374 .setDriverSchedulingConfig(DriverSchedulingConfig.newBuilder().build()) 375 .build(); 376 mockJobController.addResponse(expectedResponse); 377 378 UpdateJobRequest request = 379 UpdateJobRequest.newBuilder() 380 .setProjectId("projectId-894832108") 381 .setRegion("region-934795532") 382 .setJobId("jobId101296568") 383 .setJob(Job.newBuilder().build()) 384 .setUpdateMask(FieldMask.newBuilder().build()) 385 .build(); 386 387 Job actualResponse = client.updateJob(request); 388 Assert.assertEquals(expectedResponse, actualResponse); 389 390 List<AbstractMessage> actualRequests = mockJobController.getRequests(); 391 Assert.assertEquals(1, actualRequests.size()); 392 UpdateJobRequest actualRequest = ((UpdateJobRequest) actualRequests.get(0)); 393 394 Assert.assertEquals(request.getProjectId(), actualRequest.getProjectId()); 395 Assert.assertEquals(request.getRegion(), actualRequest.getRegion()); 396 Assert.assertEquals(request.getJobId(), actualRequest.getJobId()); 397 Assert.assertEquals(request.getJob(), actualRequest.getJob()); 398 Assert.assertEquals(request.getUpdateMask(), actualRequest.getUpdateMask()); 399 Assert.assertTrue( 400 channelProvider.isHeaderSent( 401 ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), 402 GaxGrpcProperties.getDefaultApiClientHeaderPattern())); 403 } 404 405 @Test updateJobExceptionTest()406 public void updateJobExceptionTest() throws Exception { 407 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 408 mockJobController.addException(exception); 409 410 try { 411 UpdateJobRequest request = 412 UpdateJobRequest.newBuilder() 413 .setProjectId("projectId-894832108") 414 .setRegion("region-934795532") 415 .setJobId("jobId101296568") 416 .setJob(Job.newBuilder().build()) 417 .setUpdateMask(FieldMask.newBuilder().build()) 418 .build(); 419 client.updateJob(request); 420 Assert.fail("No exception raised"); 421 } catch (InvalidArgumentException e) { 422 // Expected exception. 423 } 424 } 425 426 @Test cancelJobTest()427 public void cancelJobTest() throws Exception { 428 Job expectedResponse = 429 Job.newBuilder() 430 .setReference(JobReference.newBuilder().build()) 431 .setPlacement(JobPlacement.newBuilder().build()) 432 .setStatus(JobStatus.newBuilder().build()) 433 .addAllStatusHistory(new ArrayList<JobStatus>()) 434 .addAllYarnApplications(new ArrayList<YarnApplication>()) 435 .setDriverOutputResourceUri("driverOutputResourceUri794556277") 436 .setDriverControlFilesUri("driverControlFilesUri1491948202") 437 .putAllLabels(new HashMap<String, String>()) 438 .setScheduling(JobScheduling.newBuilder().build()) 439 .setJobUuid("jobUuid-1437868776") 440 .setDone(true) 441 .setDriverSchedulingConfig(DriverSchedulingConfig.newBuilder().build()) 442 .build(); 443 mockJobController.addResponse(expectedResponse); 444 445 String projectId = "projectId-894832108"; 446 String region = "region-934795532"; 447 String jobId = "jobId101296568"; 448 449 Job actualResponse = client.cancelJob(projectId, region, jobId); 450 Assert.assertEquals(expectedResponse, actualResponse); 451 452 List<AbstractMessage> actualRequests = mockJobController.getRequests(); 453 Assert.assertEquals(1, actualRequests.size()); 454 CancelJobRequest actualRequest = ((CancelJobRequest) actualRequests.get(0)); 455 456 Assert.assertEquals(projectId, actualRequest.getProjectId()); 457 Assert.assertEquals(region, actualRequest.getRegion()); 458 Assert.assertEquals(jobId, actualRequest.getJobId()); 459 Assert.assertTrue( 460 channelProvider.isHeaderSent( 461 ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), 462 GaxGrpcProperties.getDefaultApiClientHeaderPattern())); 463 } 464 465 @Test cancelJobExceptionTest()466 public void cancelJobExceptionTest() throws Exception { 467 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 468 mockJobController.addException(exception); 469 470 try { 471 String projectId = "projectId-894832108"; 472 String region = "region-934795532"; 473 String jobId = "jobId101296568"; 474 client.cancelJob(projectId, region, jobId); 475 Assert.fail("No exception raised"); 476 } catch (InvalidArgumentException e) { 477 // Expected exception. 478 } 479 } 480 481 @Test deleteJobTest()482 public void deleteJobTest() throws Exception { 483 Empty expectedResponse = Empty.newBuilder().build(); 484 mockJobController.addResponse(expectedResponse); 485 486 String projectId = "projectId-894832108"; 487 String region = "region-934795532"; 488 String jobId = "jobId101296568"; 489 490 client.deleteJob(projectId, region, jobId); 491 492 List<AbstractMessage> actualRequests = mockJobController.getRequests(); 493 Assert.assertEquals(1, actualRequests.size()); 494 DeleteJobRequest actualRequest = ((DeleteJobRequest) actualRequests.get(0)); 495 496 Assert.assertEquals(projectId, actualRequest.getProjectId()); 497 Assert.assertEquals(region, actualRequest.getRegion()); 498 Assert.assertEquals(jobId, actualRequest.getJobId()); 499 Assert.assertTrue( 500 channelProvider.isHeaderSent( 501 ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), 502 GaxGrpcProperties.getDefaultApiClientHeaderPattern())); 503 } 504 505 @Test deleteJobExceptionTest()506 public void deleteJobExceptionTest() throws Exception { 507 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 508 mockJobController.addException(exception); 509 510 try { 511 String projectId = "projectId-894832108"; 512 String region = "region-934795532"; 513 String jobId = "jobId101296568"; 514 client.deleteJob(projectId, region, jobId); 515 Assert.fail("No exception raised"); 516 } catch (InvalidArgumentException e) { 517 // Expected exception. 518 } 519 } 520 } 521