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.grpc.GaxGrpcProperties; 21 import com.google.api.gax.grpc.testing.LocalChannelProvider; 22 import com.google.api.gax.grpc.testing.MockGrpcService; 23 import com.google.api.gax.grpc.testing.MockServiceHelper; 24 import com.google.api.gax.rpc.ApiClientHeaderProvider; 25 import com.google.api.gax.rpc.InvalidArgumentException; 26 import com.google.api.gax.rpc.StatusCode; 27 import com.google.longrunning.Operation; 28 import com.google.protobuf.AbstractMessage; 29 import com.google.protobuf.Any; 30 import com.google.protobuf.Duration; 31 import io.grpc.StatusRuntimeException; 32 import java.io.IOException; 33 import java.util.ArrayList; 34 import java.util.Arrays; 35 import java.util.List; 36 import java.util.UUID; 37 import java.util.concurrent.ExecutionException; 38 import javax.annotation.Generated; 39 import org.junit.After; 40 import org.junit.AfterClass; 41 import org.junit.Assert; 42 import org.junit.Before; 43 import org.junit.BeforeClass; 44 import org.junit.Test; 45 46 @Generated("by gapic-generator-java") 47 public class FleetRoutingClientTest { 48 private static MockFleetRouting mockFleetRouting; 49 private static MockServiceHelper mockServiceHelper; 50 private LocalChannelProvider channelProvider; 51 private FleetRoutingClient client; 52 53 @BeforeClass startStaticServer()54 public static void startStaticServer() { 55 mockFleetRouting = new MockFleetRouting(); 56 mockServiceHelper = 57 new MockServiceHelper( 58 UUID.randomUUID().toString(), Arrays.<MockGrpcService>asList(mockFleetRouting)); 59 mockServiceHelper.start(); 60 } 61 62 @AfterClass stopServer()63 public static void stopServer() { 64 mockServiceHelper.stop(); 65 } 66 67 @Before setUp()68 public void setUp() throws IOException { 69 mockServiceHelper.reset(); 70 channelProvider = mockServiceHelper.createChannelProvider(); 71 FleetRoutingSettings settings = 72 FleetRoutingSettings.newBuilder() 73 .setTransportChannelProvider(channelProvider) 74 .setCredentialsProvider(NoCredentialsProvider.create()) 75 .build(); 76 client = FleetRoutingClient.create(settings); 77 } 78 79 @After tearDown()80 public void tearDown() throws Exception { 81 client.close(); 82 } 83 84 @Test optimizeToursTest()85 public void optimizeToursTest() throws Exception { 86 OptimizeToursResponse expectedResponse = 87 OptimizeToursResponse.newBuilder() 88 .addAllRoutes(new ArrayList<ShipmentRoute>()) 89 .setRequestLabel("requestLabel1285152165") 90 .addAllSkippedShipments(new ArrayList<SkippedShipment>()) 91 .addAllValidationErrors(new ArrayList<OptimizeToursValidationError>()) 92 .setMetrics(OptimizeToursResponse.Metrics.newBuilder().build()) 93 .setTotalCost(-705890328) 94 .build(); 95 mockFleetRouting.addResponse(expectedResponse); 96 97 OptimizeToursRequest request = 98 OptimizeToursRequest.newBuilder() 99 .setParent("parent-995424086") 100 .setTimeout(Duration.newBuilder().build()) 101 .setModel(ShipmentModel.newBuilder().build()) 102 .setMaxValidationErrors(-1367418922) 103 .addAllInjectedFirstSolutionRoutes(new ArrayList<ShipmentRoute>()) 104 .setInjectedSolutionConstraint(InjectedSolutionConstraint.newBuilder().build()) 105 .addAllRefreshDetailsRoutes(new ArrayList<ShipmentRoute>()) 106 .setInterpretInjectedSolutionsUsingLabels(true) 107 .setConsiderRoadTraffic(true) 108 .setPopulatePolylines(true) 109 .setPopulateTransitionPolylines(true) 110 .setAllowLargeDeadlineDespiteInterruptionRisk(true) 111 .setUseGeodesicDistances(true) 112 .setGeodesicMetersPerSecond(-2129658905) 113 .setLabel("label102727412") 114 .setPopulateTravelStepPolylines(true) 115 .build(); 116 117 OptimizeToursResponse actualResponse = client.optimizeTours(request); 118 Assert.assertEquals(expectedResponse, actualResponse); 119 120 List<AbstractMessage> actualRequests = mockFleetRouting.getRequests(); 121 Assert.assertEquals(1, actualRequests.size()); 122 OptimizeToursRequest actualRequest = ((OptimizeToursRequest) actualRequests.get(0)); 123 124 Assert.assertEquals(request.getParent(), actualRequest.getParent()); 125 Assert.assertEquals(request.getTimeout(), actualRequest.getTimeout()); 126 Assert.assertEquals(request.getModel(), actualRequest.getModel()); 127 Assert.assertEquals(request.getSolvingMode(), actualRequest.getSolvingMode()); 128 Assert.assertEquals(request.getMaxValidationErrors(), actualRequest.getMaxValidationErrors()); 129 Assert.assertEquals(request.getSearchMode(), actualRequest.getSearchMode()); 130 Assert.assertEquals( 131 request.getInjectedFirstSolutionRoutesList(), 132 actualRequest.getInjectedFirstSolutionRoutesList()); 133 Assert.assertEquals( 134 request.getInjectedSolutionConstraint(), actualRequest.getInjectedSolutionConstraint()); 135 Assert.assertEquals( 136 request.getRefreshDetailsRoutesList(), actualRequest.getRefreshDetailsRoutesList()); 137 Assert.assertEquals( 138 request.getInterpretInjectedSolutionsUsingLabels(), 139 actualRequest.getInterpretInjectedSolutionsUsingLabels()); 140 Assert.assertEquals(request.getConsiderRoadTraffic(), actualRequest.getConsiderRoadTraffic()); 141 Assert.assertEquals(request.getPopulatePolylines(), actualRequest.getPopulatePolylines()); 142 Assert.assertEquals( 143 request.getPopulateTransitionPolylines(), actualRequest.getPopulateTransitionPolylines()); 144 Assert.assertEquals( 145 request.getAllowLargeDeadlineDespiteInterruptionRisk(), 146 actualRequest.getAllowLargeDeadlineDespiteInterruptionRisk()); 147 Assert.assertEquals(request.getUseGeodesicDistances(), actualRequest.getUseGeodesicDistances()); 148 Assert.assertEquals( 149 request.getGeodesicMetersPerSecond(), actualRequest.getGeodesicMetersPerSecond(), 0.0001); 150 Assert.assertEquals(request.getLabel(), actualRequest.getLabel()); 151 Assert.assertEquals( 152 request.getPopulateTravelStepPolylines(), actualRequest.getPopulateTravelStepPolylines()); 153 Assert.assertTrue( 154 channelProvider.isHeaderSent( 155 ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), 156 GaxGrpcProperties.getDefaultApiClientHeaderPattern())); 157 } 158 159 @Test optimizeToursExceptionTest()160 public void optimizeToursExceptionTest() throws Exception { 161 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 162 mockFleetRouting.addException(exception); 163 164 try { 165 OptimizeToursRequest request = 166 OptimizeToursRequest.newBuilder() 167 .setParent("parent-995424086") 168 .setTimeout(Duration.newBuilder().build()) 169 .setModel(ShipmentModel.newBuilder().build()) 170 .setMaxValidationErrors(-1367418922) 171 .addAllInjectedFirstSolutionRoutes(new ArrayList<ShipmentRoute>()) 172 .setInjectedSolutionConstraint(InjectedSolutionConstraint.newBuilder().build()) 173 .addAllRefreshDetailsRoutes(new ArrayList<ShipmentRoute>()) 174 .setInterpretInjectedSolutionsUsingLabels(true) 175 .setConsiderRoadTraffic(true) 176 .setPopulatePolylines(true) 177 .setPopulateTransitionPolylines(true) 178 .setAllowLargeDeadlineDespiteInterruptionRisk(true) 179 .setUseGeodesicDistances(true) 180 .setGeodesicMetersPerSecond(-2129658905) 181 .setLabel("label102727412") 182 .setPopulateTravelStepPolylines(true) 183 .build(); 184 client.optimizeTours(request); 185 Assert.fail("No exception raised"); 186 } catch (InvalidArgumentException e) { 187 // Expected exception. 188 } 189 } 190 191 @Test batchOptimizeToursTest()192 public void batchOptimizeToursTest() throws Exception { 193 BatchOptimizeToursResponse expectedResponse = BatchOptimizeToursResponse.newBuilder().build(); 194 Operation resultOperation = 195 Operation.newBuilder() 196 .setName("batchOptimizeToursTest") 197 .setDone(true) 198 .setResponse(Any.pack(expectedResponse)) 199 .build(); 200 mockFleetRouting.addResponse(resultOperation); 201 202 BatchOptimizeToursRequest request = 203 BatchOptimizeToursRequest.newBuilder() 204 .setParent("parent-995424086") 205 .addAllModelConfigs(new ArrayList<BatchOptimizeToursRequest.AsyncModelConfig>()) 206 .build(); 207 208 BatchOptimizeToursResponse actualResponse = client.batchOptimizeToursAsync(request).get(); 209 Assert.assertEquals(expectedResponse, actualResponse); 210 211 List<AbstractMessage> actualRequests = mockFleetRouting.getRequests(); 212 Assert.assertEquals(1, actualRequests.size()); 213 BatchOptimizeToursRequest actualRequest = ((BatchOptimizeToursRequest) actualRequests.get(0)); 214 215 Assert.assertEquals(request.getParent(), actualRequest.getParent()); 216 Assert.assertEquals(request.getModelConfigsList(), actualRequest.getModelConfigsList()); 217 Assert.assertTrue( 218 channelProvider.isHeaderSent( 219 ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), 220 GaxGrpcProperties.getDefaultApiClientHeaderPattern())); 221 } 222 223 @Test batchOptimizeToursExceptionTest()224 public void batchOptimizeToursExceptionTest() throws Exception { 225 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 226 mockFleetRouting.addException(exception); 227 228 try { 229 BatchOptimizeToursRequest request = 230 BatchOptimizeToursRequest.newBuilder() 231 .setParent("parent-995424086") 232 .addAllModelConfigs(new ArrayList<BatchOptimizeToursRequest.AsyncModelConfig>()) 233 .build(); 234 client.batchOptimizeToursAsync(request).get(); 235 Assert.fail("No exception raised"); 236 } catch (ExecutionException e) { 237 Assert.assertEquals(InvalidArgumentException.class, e.getCause().getClass()); 238 InvalidArgumentException apiException = ((InvalidArgumentException) e.getCause()); 239 Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode()); 240 } 241 } 242 } 243