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.maps.routing.v2; 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.grpc.testing.MockStreamObserver; 25 import com.google.api.gax.rpc.ApiClientHeaderProvider; 26 import com.google.api.gax.rpc.InvalidArgumentException; 27 import com.google.api.gax.rpc.ServerStreamingCallable; 28 import com.google.api.gax.rpc.StatusCode; 29 import com.google.protobuf.AbstractMessage; 30 import com.google.protobuf.Duration; 31 import com.google.protobuf.Timestamp; 32 import com.google.rpc.Status; 33 import io.grpc.StatusRuntimeException; 34 import java.io.IOException; 35 import java.util.ArrayList; 36 import java.util.Arrays; 37 import java.util.List; 38 import java.util.UUID; 39 import java.util.concurrent.ExecutionException; 40 import javax.annotation.Generated; 41 import org.junit.After; 42 import org.junit.AfterClass; 43 import org.junit.Assert; 44 import org.junit.Before; 45 import org.junit.BeforeClass; 46 import org.junit.Test; 47 48 @Generated("by gapic-generator-java") 49 public class RoutesClientTest { 50 private static MockRoutes mockRoutes; 51 private static MockServiceHelper mockServiceHelper; 52 private LocalChannelProvider channelProvider; 53 private RoutesClient client; 54 55 @BeforeClass startStaticServer()56 public static void startStaticServer() { 57 mockRoutes = new MockRoutes(); 58 mockServiceHelper = 59 new MockServiceHelper( 60 UUID.randomUUID().toString(), Arrays.<MockGrpcService>asList(mockRoutes)); 61 mockServiceHelper.start(); 62 } 63 64 @AfterClass stopServer()65 public static void stopServer() { 66 mockServiceHelper.stop(); 67 } 68 69 @Before setUp()70 public void setUp() throws IOException { 71 mockServiceHelper.reset(); 72 channelProvider = mockServiceHelper.createChannelProvider(); 73 RoutesSettings settings = 74 RoutesSettings.newBuilder() 75 .setTransportChannelProvider(channelProvider) 76 .setCredentialsProvider(NoCredentialsProvider.create()) 77 .build(); 78 client = RoutesClient.create(settings); 79 } 80 81 @After tearDown()82 public void tearDown() throws Exception { 83 client.close(); 84 } 85 86 @Test computeRoutesTest()87 public void computeRoutesTest() throws Exception { 88 ComputeRoutesResponse expectedResponse = 89 ComputeRoutesResponse.newBuilder() 90 .addAllRoutes(new ArrayList<Route>()) 91 .setFallbackInfo(FallbackInfo.newBuilder().build()) 92 .setGeocodingResults(GeocodingResults.newBuilder().build()) 93 .build(); 94 mockRoutes.addResponse(expectedResponse); 95 96 ComputeRoutesRequest request = 97 ComputeRoutesRequest.newBuilder() 98 .setOrigin(Waypoint.newBuilder().build()) 99 .setDestination(Waypoint.newBuilder().build()) 100 .addAllIntermediates(new ArrayList<Waypoint>()) 101 .setTravelMode(RouteTravelMode.forNumber(0)) 102 .setRoutingPreference(RoutingPreference.forNumber(0)) 103 .setPolylineQuality(PolylineQuality.forNumber(0)) 104 .setPolylineEncoding(PolylineEncoding.forNumber(0)) 105 .setDepartureTime(Timestamp.newBuilder().build()) 106 .setComputeAlternativeRoutes(true) 107 .setRouteModifiers(RouteModifiers.newBuilder().build()) 108 .setLanguageCode("languageCode-2092349083") 109 .setRegionCode("regionCode-1991004415") 110 .setUnits(Units.forNumber(0)) 111 .addAllRequestedReferenceRoutes(new ArrayList<ComputeRoutesRequest.ReferenceRoute>()) 112 .addAllExtraComputations(new ArrayList<ComputeRoutesRequest.ExtraComputation>()) 113 .build(); 114 115 ComputeRoutesResponse actualResponse = client.computeRoutes(request); 116 Assert.assertEquals(expectedResponse, actualResponse); 117 118 List<AbstractMessage> actualRequests = mockRoutes.getRequests(); 119 Assert.assertEquals(1, actualRequests.size()); 120 ComputeRoutesRequest actualRequest = ((ComputeRoutesRequest) actualRequests.get(0)); 121 122 Assert.assertEquals(request.getOrigin(), actualRequest.getOrigin()); 123 Assert.assertEquals(request.getDestination(), actualRequest.getDestination()); 124 Assert.assertEquals(request.getIntermediatesList(), actualRequest.getIntermediatesList()); 125 Assert.assertEquals(request.getTravelMode(), actualRequest.getTravelMode()); 126 Assert.assertEquals(request.getRoutingPreference(), actualRequest.getRoutingPreference()); 127 Assert.assertEquals(request.getPolylineQuality(), actualRequest.getPolylineQuality()); 128 Assert.assertEquals(request.getPolylineEncoding(), actualRequest.getPolylineEncoding()); 129 Assert.assertEquals(request.getDepartureTime(), actualRequest.getDepartureTime()); 130 Assert.assertEquals( 131 request.getComputeAlternativeRoutes(), actualRequest.getComputeAlternativeRoutes()); 132 Assert.assertEquals(request.getRouteModifiers(), actualRequest.getRouteModifiers()); 133 Assert.assertEquals(request.getLanguageCode(), actualRequest.getLanguageCode()); 134 Assert.assertEquals(request.getRegionCode(), actualRequest.getRegionCode()); 135 Assert.assertEquals(request.getUnits(), actualRequest.getUnits()); 136 Assert.assertEquals( 137 request.getRequestedReferenceRoutesList(), actualRequest.getRequestedReferenceRoutesList()); 138 Assert.assertEquals( 139 request.getExtraComputationsList(), actualRequest.getExtraComputationsList()); 140 Assert.assertTrue( 141 channelProvider.isHeaderSent( 142 ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), 143 GaxGrpcProperties.getDefaultApiClientHeaderPattern())); 144 } 145 146 @Test computeRoutesExceptionTest()147 public void computeRoutesExceptionTest() throws Exception { 148 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 149 mockRoutes.addException(exception); 150 151 try { 152 ComputeRoutesRequest request = 153 ComputeRoutesRequest.newBuilder() 154 .setOrigin(Waypoint.newBuilder().build()) 155 .setDestination(Waypoint.newBuilder().build()) 156 .addAllIntermediates(new ArrayList<Waypoint>()) 157 .setTravelMode(RouteTravelMode.forNumber(0)) 158 .setRoutingPreference(RoutingPreference.forNumber(0)) 159 .setPolylineQuality(PolylineQuality.forNumber(0)) 160 .setPolylineEncoding(PolylineEncoding.forNumber(0)) 161 .setDepartureTime(Timestamp.newBuilder().build()) 162 .setComputeAlternativeRoutes(true) 163 .setRouteModifiers(RouteModifiers.newBuilder().build()) 164 .setLanguageCode("languageCode-2092349083") 165 .setRegionCode("regionCode-1991004415") 166 .setUnits(Units.forNumber(0)) 167 .addAllRequestedReferenceRoutes(new ArrayList<ComputeRoutesRequest.ReferenceRoute>()) 168 .addAllExtraComputations(new ArrayList<ComputeRoutesRequest.ExtraComputation>()) 169 .build(); 170 client.computeRoutes(request); 171 Assert.fail("No exception raised"); 172 } catch (InvalidArgumentException e) { 173 // Expected exception. 174 } 175 } 176 177 @Test computeRouteMatrixTest()178 public void computeRouteMatrixTest() throws Exception { 179 RouteMatrixElement expectedResponse = 180 RouteMatrixElement.newBuilder() 181 .setOriginIndex(2078721657) 182 .setDestinationIndex(-1296954015) 183 .setStatus(Status.newBuilder().build()) 184 .setCondition(RouteMatrixElementCondition.forNumber(0)) 185 .setDistanceMeters(1958857108) 186 .setDuration(Duration.newBuilder().build()) 187 .setStaticDuration(Duration.newBuilder().build()) 188 .setTravelAdvisory(RouteTravelAdvisory.newBuilder().build()) 189 .setFallbackInfo(FallbackInfo.newBuilder().build()) 190 .build(); 191 mockRoutes.addResponse(expectedResponse); 192 ComputeRouteMatrixRequest request = 193 ComputeRouteMatrixRequest.newBuilder() 194 .addAllOrigins(new ArrayList<RouteMatrixOrigin>()) 195 .addAllDestinations(new ArrayList<RouteMatrixDestination>()) 196 .setTravelMode(RouteTravelMode.forNumber(0)) 197 .setRoutingPreference(RoutingPreference.forNumber(0)) 198 .setDepartureTime(Timestamp.newBuilder().build()) 199 .setLanguageCode("languageCode-2092349083") 200 .setRegionCode("regionCode-1991004415") 201 .addAllExtraComputations(new ArrayList<ComputeRouteMatrixRequest.ExtraComputation>()) 202 .build(); 203 204 MockStreamObserver<RouteMatrixElement> responseObserver = new MockStreamObserver<>(); 205 206 ServerStreamingCallable<ComputeRouteMatrixRequest, RouteMatrixElement> callable = 207 client.computeRouteMatrixCallable(); 208 callable.serverStreamingCall(request, responseObserver); 209 210 List<RouteMatrixElement> actualResponses = responseObserver.future().get(); 211 Assert.assertEquals(1, actualResponses.size()); 212 Assert.assertEquals(expectedResponse, actualResponses.get(0)); 213 } 214 215 @Test computeRouteMatrixExceptionTest()216 public void computeRouteMatrixExceptionTest() throws Exception { 217 StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); 218 mockRoutes.addException(exception); 219 ComputeRouteMatrixRequest request = 220 ComputeRouteMatrixRequest.newBuilder() 221 .addAllOrigins(new ArrayList<RouteMatrixOrigin>()) 222 .addAllDestinations(new ArrayList<RouteMatrixDestination>()) 223 .setTravelMode(RouteTravelMode.forNumber(0)) 224 .setRoutingPreference(RoutingPreference.forNumber(0)) 225 .setDepartureTime(Timestamp.newBuilder().build()) 226 .setLanguageCode("languageCode-2092349083") 227 .setRegionCode("regionCode-1991004415") 228 .addAllExtraComputations(new ArrayList<ComputeRouteMatrixRequest.ExtraComputation>()) 229 .build(); 230 231 MockStreamObserver<RouteMatrixElement> responseObserver = new MockStreamObserver<>(); 232 233 ServerStreamingCallable<ComputeRouteMatrixRequest, RouteMatrixElement> callable = 234 client.computeRouteMatrixCallable(); 235 callable.serverStreamingCall(request, responseObserver); 236 237 try { 238 List<RouteMatrixElement> actualResponses = responseObserver.future().get(); 239 Assert.fail("No exception thrown"); 240 } catch (ExecutionException e) { 241 Assert.assertTrue(e.getCause() instanceof InvalidArgumentException); 242 InvalidArgumentException apiException = ((InvalidArgumentException) e.getCause()); 243 Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode()); 244 } 245 } 246 } 247