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.optimization.v1; 18 19 import com.google.api.gax.core.NoCredentialsProvider; 20 import com.google.api.gax.httpjson.GaxHttpJsonProperties; 21 import com.google.api.gax.httpjson.testing.MockHttpService; 22 import com.google.api.gax.rpc.ApiClientHeaderProvider; 23 import com.google.api.gax.rpc.ApiException; 24 import com.google.api.gax.rpc.ApiExceptionFactory; 25 import com.google.api.gax.rpc.InvalidArgumentException; 26 import com.google.api.gax.rpc.StatusCode; 27 import com.google.api.gax.rpc.testing.FakeStatusCode; 28 import com.google.cloud.optimization.v1.stub.HttpJsonFleetRoutingStub; 29 import com.google.longrunning.Operation; 30 import com.google.protobuf.Any; 31 import com.google.protobuf.Duration; 32 import java.io.IOException; 33 import java.util.ArrayList; 34 import java.util.List; 35 import java.util.concurrent.ExecutionException; 36 import javax.annotation.Generated; 37 import org.junit.After; 38 import org.junit.AfterClass; 39 import org.junit.Assert; 40 import org.junit.Before; 41 import org.junit.BeforeClass; 42 import org.junit.Test; 43 44 @Generated("by gapic-generator-java") 45 public class FleetRoutingClientHttpJsonTest { 46 private static MockHttpService mockService; 47 private static FleetRoutingClient client; 48 49 @BeforeClass startStaticServer()50 public static void startStaticServer() throws IOException { 51 mockService = 52 new MockHttpService( 53 HttpJsonFleetRoutingStub.getMethodDescriptors(), 54 FleetRoutingSettings.getDefaultEndpoint()); 55 FleetRoutingSettings settings = 56 FleetRoutingSettings.newHttpJsonBuilder() 57 .setTransportChannelProvider( 58 FleetRoutingSettings.defaultHttpJsonTransportProviderBuilder() 59 .setHttpTransport(mockService) 60 .build()) 61 .setCredentialsProvider(NoCredentialsProvider.create()) 62 .build(); 63 client = FleetRoutingClient.create(settings); 64 } 65 66 @AfterClass stopServer()67 public static void stopServer() { 68 client.close(); 69 } 70 71 @Before setUp()72 public void setUp() {} 73 74 @After tearDown()75 public void tearDown() throws Exception { 76 mockService.reset(); 77 } 78 79 @Test optimizeToursTest()80 public void optimizeToursTest() throws Exception { 81 OptimizeToursResponse expectedResponse = 82 OptimizeToursResponse.newBuilder() 83 .addAllRoutes(new ArrayList<ShipmentRoute>()) 84 .setRequestLabel("requestLabel1285152165") 85 .addAllSkippedShipments(new ArrayList<SkippedShipment>()) 86 .addAllValidationErrors(new ArrayList<OptimizeToursValidationError>()) 87 .setMetrics(OptimizeToursResponse.Metrics.newBuilder().build()) 88 .setTotalCost(-705890328) 89 .build(); 90 mockService.addResponse(expectedResponse); 91 92 OptimizeToursRequest request = 93 OptimizeToursRequest.newBuilder() 94 .setParent("projects/project-5833/locations/location-5833") 95 .setTimeout(Duration.newBuilder().build()) 96 .setModel(ShipmentModel.newBuilder().build()) 97 .setMaxValidationErrors(-1367418922) 98 .addAllInjectedFirstSolutionRoutes(new ArrayList<ShipmentRoute>()) 99 .setInjectedSolutionConstraint(InjectedSolutionConstraint.newBuilder().build()) 100 .addAllRefreshDetailsRoutes(new ArrayList<ShipmentRoute>()) 101 .setInterpretInjectedSolutionsUsingLabels(true) 102 .setConsiderRoadTraffic(true) 103 .setPopulatePolylines(true) 104 .setPopulateTransitionPolylines(true) 105 .setAllowLargeDeadlineDespiteInterruptionRisk(true) 106 .setUseGeodesicDistances(true) 107 .setGeodesicMetersPerSecond(-2129658905) 108 .setLabel("label102727412") 109 .setPopulateTravelStepPolylines(true) 110 .build(); 111 112 OptimizeToursResponse actualResponse = client.optimizeTours(request); 113 Assert.assertEquals(expectedResponse, actualResponse); 114 115 List<String> actualRequests = mockService.getRequestPaths(); 116 Assert.assertEquals(1, actualRequests.size()); 117 118 String apiClientHeaderKey = 119 mockService 120 .getRequestHeaders() 121 .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) 122 .iterator() 123 .next(); 124 Assert.assertTrue( 125 GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() 126 .matcher(apiClientHeaderKey) 127 .matches()); 128 } 129 130 @Test optimizeToursExceptionTest()131 public void optimizeToursExceptionTest() throws Exception { 132 ApiException exception = 133 ApiExceptionFactory.createException( 134 new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); 135 mockService.addException(exception); 136 137 try { 138 OptimizeToursRequest request = 139 OptimizeToursRequest.newBuilder() 140 .setParent("projects/project-5833/locations/location-5833") 141 .setTimeout(Duration.newBuilder().build()) 142 .setModel(ShipmentModel.newBuilder().build()) 143 .setMaxValidationErrors(-1367418922) 144 .addAllInjectedFirstSolutionRoutes(new ArrayList<ShipmentRoute>()) 145 .setInjectedSolutionConstraint(InjectedSolutionConstraint.newBuilder().build()) 146 .addAllRefreshDetailsRoutes(new ArrayList<ShipmentRoute>()) 147 .setInterpretInjectedSolutionsUsingLabels(true) 148 .setConsiderRoadTraffic(true) 149 .setPopulatePolylines(true) 150 .setPopulateTransitionPolylines(true) 151 .setAllowLargeDeadlineDespiteInterruptionRisk(true) 152 .setUseGeodesicDistances(true) 153 .setGeodesicMetersPerSecond(-2129658905) 154 .setLabel("label102727412") 155 .setPopulateTravelStepPolylines(true) 156 .build(); 157 client.optimizeTours(request); 158 Assert.fail("No exception raised"); 159 } catch (InvalidArgumentException e) { 160 // Expected exception. 161 } 162 } 163 164 @Test batchOptimizeToursTest()165 public void batchOptimizeToursTest() throws Exception { 166 BatchOptimizeToursResponse expectedResponse = BatchOptimizeToursResponse.newBuilder().build(); 167 Operation resultOperation = 168 Operation.newBuilder() 169 .setName("batchOptimizeToursTest") 170 .setDone(true) 171 .setResponse(Any.pack(expectedResponse)) 172 .build(); 173 mockService.addResponse(resultOperation); 174 175 BatchOptimizeToursRequest request = 176 BatchOptimizeToursRequest.newBuilder() 177 .setParent("projects/project-5833/locations/location-5833") 178 .addAllModelConfigs(new ArrayList<BatchOptimizeToursRequest.AsyncModelConfig>()) 179 .build(); 180 181 BatchOptimizeToursResponse actualResponse = client.batchOptimizeToursAsync(request).get(); 182 Assert.assertEquals(expectedResponse, actualResponse); 183 184 List<String> actualRequests = mockService.getRequestPaths(); 185 Assert.assertEquals(1, actualRequests.size()); 186 187 String apiClientHeaderKey = 188 mockService 189 .getRequestHeaders() 190 .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) 191 .iterator() 192 .next(); 193 Assert.assertTrue( 194 GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() 195 .matcher(apiClientHeaderKey) 196 .matches()); 197 } 198 199 @Test batchOptimizeToursExceptionTest()200 public void batchOptimizeToursExceptionTest() throws Exception { 201 ApiException exception = 202 ApiExceptionFactory.createException( 203 new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); 204 mockService.addException(exception); 205 206 try { 207 BatchOptimizeToursRequest request = 208 BatchOptimizeToursRequest.newBuilder() 209 .setParent("projects/project-5833/locations/location-5833") 210 .addAllModelConfigs(new ArrayList<BatchOptimizeToursRequest.AsyncModelConfig>()) 211 .build(); 212 client.batchOptimizeToursAsync(request).get(); 213 Assert.fail("No exception raised"); 214 } catch (ExecutionException e) { 215 } 216 } 217 } 218