diff --git a/sample/build.gradle b/sample/build.gradle index ee9c995..fdedcdd 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -44,7 +44,8 @@ dependencies { implementation 'com.google.api:gax:1.65.1' implementation 'com.google.api:gax-grpc:1.65.1' - implementation 'com.google.maps:gapic-google-maps-fleetengine-v1-java:0.0.197' + implementation 'com.google.maps:gapic-google-maps-fleetengine-v1-java:0.0.348' + implementation 'com.google.maps:gapic-google-maps-fleetengine-delivery-v1-java:0.0.348' implementation project(':fleetengine-auth') testImplementation 'junit:junit:4.13.1' diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/CommandsFactoryServiceClient.java b/sample/src/main/java/com/google/fleetengine/auth/sample/CommandsFactoryServiceClient.java index f934c08..308a11e 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/CommandsFactoryServiceClient.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/CommandsFactoryServiceClient.java @@ -16,10 +16,13 @@ import com.google.fleetengine.auth.client.FleetEngineTokenProvider; import com.google.fleetengine.auth.sample.validation.CommandsFactory; +import com.google.fleetengine.auth.sample.validation.DeliveryServiceCommands; import com.google.fleetengine.auth.sample.validation.TripCommands; import com.google.fleetengine.auth.sample.validation.TripStub; import com.google.fleetengine.auth.sample.validation.VehicleCommands; import com.google.fleetengine.auth.sample.validation.VehicleStub; +import google.maps.fleetengine.delivery.v1.DeliveryServiceClient; +import google.maps.fleetengine.delivery.v1.DeliveryServiceSettings; import google.maps.fleetengine.v1.TripServiceClient; import google.maps.fleetengine.v1.TripServiceSettings; import google.maps.fleetengine.v1.VehicleServiceClient; @@ -58,4 +61,19 @@ public VehicleCommands createVehicleCommands( VehicleStub vehicleStub = new VehicleStubClient(client); return new VehicleCommands(vehicleStub, providerId); } + + /** {@inheritDoc} */ + public DeliveryServiceCommands createDeliveryServiceCommands( + String fleetEngineAddress, String providerId, FleetEngineTokenProvider tokenProvider) + throws IOException { + DeliveryServiceSettings settings = + new com.google.fleetengine.auth.client.FleetEngineClientSettingsModifier< + DeliveryServiceSettings, DeliveryServiceSettings.Builder>(tokenProvider) + .updateBuilder(DeliveryServiceSettings.newBuilder()) + .setEndpoint(fleetEngineAddress) + .build(); + + return new DeliveryServiceCommands( + new DeliveryServiceStubClient(DeliveryServiceClient.create(settings)), providerId); + } } diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/DeliveryServiceStubClient.java b/sample/src/main/java/com/google/fleetengine/auth/sample/DeliveryServiceStubClient.java new file mode 100644 index 0000000..4e33055 --- /dev/null +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/DeliveryServiceStubClient.java @@ -0,0 +1,53 @@ +package com.google.fleetengine.auth.sample; + +import com.google.fleetengine.auth.sample.validation.DeliveryServiceStub; +import google.maps.fleetengine.delivery.v1.CreateDeliveryVehicleRequest; +import google.maps.fleetengine.delivery.v1.CreateTaskRequest; +import google.maps.fleetengine.delivery.v1.DeliveryServiceClient; +import google.maps.fleetengine.delivery.v1.DeliveryVehicle; +import google.maps.fleetengine.delivery.v1.GetDeliveryVehicleRequest; +import google.maps.fleetengine.delivery.v1.GetTaskRequest; +import google.maps.fleetengine.delivery.v1.SearchTasksRequest; +import google.maps.fleetengine.delivery.v1.Task; +import google.maps.fleetengine.delivery.v1.UpdateTaskRequest; + +public class DeliveryServiceStubClient implements DeliveryServiceStub { + + private final DeliveryServiceClient client; + + /** Constructor. */ + public DeliveryServiceStubClient(DeliveryServiceClient client) { + this.client = client; + } + + @Override + public Task createTask(CreateTaskRequest createTaskRequest) { + return client.createTask(createTaskRequest); + } + + @Override + public Task getTask(GetTaskRequest getTaskRequest) { + return client.getTask(getTaskRequest); + } + + @Override + public void searchTasks(SearchTasksRequest searchTripRequest) { + client.searchTasks(searchTripRequest); + } + + @Override + public Task updateTask(UpdateTaskRequest updateTaskRequest) { + return client.updateTask(updateTaskRequest); + } + + @Override + public DeliveryVehicle createDeliveryVehicle( + CreateDeliveryVehicleRequest createDeliveryVehicleRequest) { + return client.createDeliveryVehicle(createDeliveryVehicleRequest); + } + + @Override + public DeliveryVehicle getDeliveryVehicle(GetDeliveryVehicleRequest getDeliveryVehicleRequest) { + return client.getDeliveryVehicle(getDeliveryVehicleRequest); + } +} diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/LmfsConfiguration.java b/sample/src/main/java/com/google/fleetengine/auth/sample/LmfsConfiguration.java new file mode 100644 index 0000000..80892b8 --- /dev/null +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/LmfsConfiguration.java @@ -0,0 +1,42 @@ +package com.google.fleetengine.auth.sample; + +public class LmfsConfiguration { + // XXX_TOKEN_ACCOUNT are the names of the service accounts with the Fleet + // Engine pre defined roles. The name is always in the format of: + // @.iam.gserviceaccount.com + + // Set to service account with the Fleet Engine Delivery Super User SDK role. + public static final String DELIVERY_SERVER_TOKEN_ACCOUNT = + "@.iam.gserviceaccount.com"; + + // Set to service account with the Fleet Engine Delivery Consumer User SDK role. + public static final String DELIVERY_CONSUMER_TOKEN_ACCOUNT = + "@.iam.gserviceaccount.com"; + + // Set to service account with the Fleet Engine Delivery Untrusted Driver SDK role. + public static final String DELIVERY_UNTRUSTED_DRIVER_TOKEN_ACCOUNT = + "@.iam.gserviceaccount.com"; + + // Set to service account with the Fleet Engine Delivery Trusted Driver SDK role. + public static final String DELIVERY_TRUSTED_DRIVER_TOKEN_ACCOUNT = + "@.iam.gserviceaccount.com"; + + // Set to service account with the Fleet Engine Delivery Fleet Read SDK role. + public static final String DELIVERY_FLEET_READER_TOKEN_ACCOUNT = + "@.iam.gserviceaccount.com"; + + // Provider Id is the same as your GCP Project Id. + public static final String PROVIDER_ID = ""; + + // Endpoint of the Fleet Engine address. + // In most cases, the default of fleetengine.googleapis.com:443 is correct + public static final String FLEET_ENGINE_ADDRESS = + "fleetengine.googleapis.com:443"; + + // Audience of the JWT token. + // The address is the same as the FLEET_ENGINE_ADDRESS without the port number. + public static final String FLEET_ENGINE_AUDIENCE = + "https://fleetengine.googleapis.com/"; + + private LmfsConfiguration() {} +} diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/Configuration.java b/sample/src/main/java/com/google/fleetengine/auth/sample/OdrdConfiguration.java similarity index 97% rename from sample/src/main/java/com/google/fleetengine/auth/sample/Configuration.java rename to sample/src/main/java/com/google/fleetengine/auth/sample/OdrdConfiguration.java index b70c6fd..5c04710 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/Configuration.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/OdrdConfiguration.java @@ -14,7 +14,7 @@ package com.google.fleetengine.auth.sample; -class Configuration { +class OdrdConfiguration { // XXX_TOKEN_ACCOUNT are the names of the service accounts with the Fleet // Engine pre defined roles. The name is always in the format of: @@ -46,5 +46,5 @@ class Configuration { public static final String FLEET_ENGINE_AUDIENCE = "https://fleetengine.googleapis.com/"; - private Configuration() {} + private OdrdConfiguration() {} } diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/SampleApp.java b/sample/src/main/java/com/google/fleetengine/auth/sample/SampleApp.java index ed32ae2..662fa22 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/SampleApp.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/SampleApp.java @@ -65,18 +65,20 @@ private SampleApp() {} public static void main(String[] args) throws Throwable { System.out.println( "\n\n\n=== Choose example: ===\n" - + "0. Validate Configured Roles\n" + + "0. Validate Configured ODRD Roles\n" + "1. Create Vehicle\n" + "2. Create Trip\n" + "3. List Vehicles\n" + "4. Search for Vehicles\n" - + "5. Search for Trips\n"); + + "5. Search for Trips\n" + + "----------------------------------------\n" + + "10. Validate Configured LMFS Roles\n"); Scanner scanner = new Scanner(System.in, UTF_8.name()); int choice = scanner.nextInt(); switch (choice) { case 0: - ValidateRoles.run(); + ValidateOdrdRoles.run(); break; case 1: createVehicle(); @@ -93,7 +95,9 @@ public static void main(String[] args) throws Throwable { case 5: searchTrips(); break; - case 6: + case 10: + ValidateLmfsRoles.run(); + break; default: throw new IllegalArgumentException("Invalid choice provided."); } @@ -109,7 +113,7 @@ private static void createVehicle() throws SignerInitializationException, IOExce // Set the vehicle name to the specified format .setName( String.format( - "providers/%s/vehicles/%s", Configuration.PROVIDER_ID, randomVehicleId)) + "providers/%s/vehicles/%s", OdrdConfiguration.PROVIDER_ID, randomVehicleId)) // Set maximum capacity of vehicle to 1 .setMaximumCapacity(1) @@ -137,14 +141,14 @@ private static void createVehicle() throws SignerInitializationException, IOExce .setVehicle(vehicle) // Set the parent to the specified format - .setParent(String.format("providers/%s", Configuration.PROVIDER_ID)) + .setParent(String.format("providers/%s", OdrdConfiguration.PROVIDER_ID)) .build(); VehicleServiceSettings settings = new FleetEngineClientSettingsModifier< VehicleServiceSettings, VehicleServiceSettings.Builder>(createMinter()) .updateBuilder(VehicleServiceSettings.newBuilder()) - .setEndpoint(Configuration.FLEET_ENGINE_ADDRESS) + .setEndpoint(OdrdConfiguration.FLEET_ENGINE_ADDRESS) .build(); VehicleServiceClient client = VehicleServiceClient.create(settings); @@ -158,7 +162,7 @@ private static void createTrip() throws SignerInitializationException, IOExcepti Trip.newBuilder() // Set the trip name to the specified format .setName( - String.format("providers/%s/trips/%s", Configuration.PROVIDER_ID, randomTripId)) + String.format("providers/%s/trips/%s", OdrdConfiguration.PROVIDER_ID, randomTripId)) // Set the trip type to be exclusive as opposed to SHARED .setTripType(TripType.EXCLUSIVE) @@ -180,14 +184,14 @@ private static void createTrip() throws SignerInitializationException, IOExcepti .setTrip(trip) // Set the parent to the specified format - .setParent(String.format("providers/%s", Configuration.PROVIDER_ID)) + .setParent(String.format("providers/%s", OdrdConfiguration.PROVIDER_ID)) .build(); TripServiceSettings settings = new FleetEngineClientSettingsModifier( createMinter()) .updateBuilder(TripServiceSettings.newBuilder()) - .setEndpoint(Configuration.FLEET_ENGINE_ADDRESS) + .setEndpoint(OdrdConfiguration.FLEET_ENGINE_ADDRESS) .build(); TripServiceClient client = TripServiceClient.create(settings); @@ -199,14 +203,14 @@ private static void listVehicles() throws SignerInitializationException, IOExcep ListVehiclesRequest request = ListVehiclesRequest.newBuilder() // Set the parent to the format providers/{providerId} - .setParent(String.format("providers/%s", Configuration.PROVIDER_ID)) + .setParent(String.format("providers/%s", OdrdConfiguration.PROVIDER_ID)) .build(); VehicleServiceSettings settings = new FleetEngineClientSettingsModifier< VehicleServiceSettings, VehicleServiceSettings.Builder>(createMinter()) .updateBuilder(VehicleServiceSettings.newBuilder()) - .setEndpoint(Configuration.FLEET_ENGINE_ADDRESS) + .setEndpoint(OdrdConfiguration.FLEET_ENGINE_ADDRESS) .build(); VehicleServiceClient client = VehicleServiceClient.create(settings); @@ -224,7 +228,7 @@ private static void searchVehicles() throws SignerInitializationException, IOExc SearchVehiclesRequest request = SearchVehiclesRequest.newBuilder() // Set the parent to the format providers/{providerId} - .setParent(String.format("providers/%s", Configuration.PROVIDER_ID)) + .setParent(String.format("providers/%s", OdrdConfiguration.PROVIDER_ID)) // Look for vehicles around a specific Lat \ Lng .setPickupPoint(TerminalLocation.newBuilder().setPoint(EXAMPLE_LAT_LNG).build()) @@ -247,7 +251,7 @@ private static void searchVehicles() throws SignerInitializationException, IOExc new FleetEngineClientSettingsModifier< VehicleServiceSettings, VehicleServiceSettings.Builder>(createMinter()) .updateBuilder(VehicleServiceSettings.newBuilder()) - .setEndpoint(Configuration.FLEET_ENGINE_ADDRESS) + .setEndpoint(OdrdConfiguration.FLEET_ENGINE_ADDRESS) .build(); VehicleServiceClient client = VehicleServiceClient.create(settings); @@ -265,7 +269,7 @@ private static void searchTrips() throws SignerInitializationException, IOExcept SearchTripsRequest request = SearchTripsRequest.newBuilder() // Set the parent to the format providers/{providerId} - .setParent(String.format("providers/%s", Configuration.PROVIDER_ID)) + .setParent(String.format("providers/%s", OdrdConfiguration.PROVIDER_ID)) // Look for both active and inactive trips .setActiveTripsOnly(false) @@ -275,7 +279,7 @@ private static void searchTrips() throws SignerInitializationException, IOExcept new FleetEngineClientSettingsModifier( createMinter()) .updateBuilder(TripServiceSettings.newBuilder()) - .setEndpoint(Configuration.FLEET_ENGINE_ADDRESS) + .setEndpoint(OdrdConfiguration.FLEET_ENGINE_ADDRESS) .build(); TripServiceClient client = TripServiceClient.create(settings); @@ -292,14 +296,14 @@ private static void searchTrips() throws SignerInitializationException, IOExcept private static FleetEngineTokenProvider createMinter() throws SignerInitializationException { return AuthTokenMinter.builder() // Only the account for the server signer is needed in this example - .setServerSigner(ImpersonatedSigner.create(Configuration.SERVER_TOKEN_ACCOUNT)) + .setServerSigner(ImpersonatedSigner.create(OdrdConfiguration.SERVER_TOKEN_ACCOUNT)) // When the audience is not set, it defaults to https://fleetengine.googleapis.com/. // This is fine in the vast majority of cases. .setTokenFactory( new FleetEngineTokenFactory( FleetEngineTokenFactorySettings.builder() - .setAudience(Configuration.FLEET_ENGINE_AUDIENCE) + .setAudience(OdrdConfiguration.FLEET_ENGINE_AUDIENCE) .build())) // Build the minter diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/ValidateLmfsRoles.java b/sample/src/main/java/com/google/fleetengine/auth/sample/ValidateLmfsRoles.java new file mode 100644 index 0000000..28fed70 --- /dev/null +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/ValidateLmfsRoles.java @@ -0,0 +1,88 @@ +package com.google.fleetengine.auth.sample; + +import com.google.fleetengine.auth.AuthTokenMinter; +import com.google.fleetengine.auth.sample.validation.DeliveryConsumerTokenValidationScript; +import com.google.fleetengine.auth.sample.validation.DeliveryFleetReaderTokenValidationScript; +import com.google.fleetengine.auth.sample.validation.DeliveryServerTokenValidationScript; +import com.google.fleetengine.auth.sample.validation.DeliveryServerTokenValidationScript.Ids; +import com.google.fleetengine.auth.sample.validation.DeliveryTrustedDriverTokenValidationScript; +import com.google.fleetengine.auth.sample.validation.DeliveryUntrustedDriverTokenValidationScript; +import com.google.fleetengine.auth.sample.validation.SampleScriptConfiguration; +import com.google.fleetengine.auth.sample.validation.SampleScriptRuntime; +import com.google.fleetengine.auth.token.factory.FleetEngineTokenFactory; +import com.google.fleetengine.auth.token.factory.FleetEngineTokenFactorySettings; +import com.google.fleetengine.auth.token.factory.signer.ImpersonatedSigner; + +public class ValidateLmfsRoles { + private static final String SERVER = "server"; + private static final String CONSUMER = "deliver consumer"; + private static final String UNTRUSTED_DRIVER = "untrusted driver"; + private static final String TRUSTED_DRIVER = "trusted driver"; + private static final String FLEET_READER = "fleet reader"; + + public static void run() throws Throwable { + AuthTokenMinter minter = + AuthTokenMinter.deliveryBuilder() + .setDeliveryServerSigner( + ImpersonatedSigner.create(LmfsConfiguration.DELIVERY_SERVER_TOKEN_ACCOUNT)) + .setDeliveryConsumerSigner( + ImpersonatedSigner.create(LmfsConfiguration.DELIVERY_CONSUMER_TOKEN_ACCOUNT)) + .setTrustedDeliveryDriverSigner( + ImpersonatedSigner.create(LmfsConfiguration.DELIVERY_TRUSTED_DRIVER_TOKEN_ACCOUNT)) + .setUntrustedDeliveryDriverSigner( + ImpersonatedSigner.create( + LmfsConfiguration.DELIVERY_UNTRUSTED_DRIVER_TOKEN_ACCOUNT)) + .setDeliveryFleetReaderSigner( + ImpersonatedSigner.create(LmfsConfiguration.DELIVERY_FLEET_READER_TOKEN_ACCOUNT)) + .setTokenFactory( + new FleetEngineTokenFactory( + FleetEngineTokenFactorySettings.builder() + .setAudience(LmfsConfiguration.FLEET_ENGINE_AUDIENCE) + .build())) + .build(); + + SampleScriptConfiguration configuration = + SampleScriptConfiguration.builder() + .setFleetEngineAddress(LmfsConfiguration.FLEET_ENGINE_ADDRESS) + .setProviderId(LmfsConfiguration.PROVIDER_ID) + .setMinter(minter) + .build(); + + CommandsFactoryServiceClient clientFactory = new CommandsFactoryServiceClient(); + SampleScriptRuntime runtime = CommandLineRuntime.create(); + CommandLineRuntime.printRunScriptMessage(SERVER); + Ids ids = new DeliveryServerTokenValidationScript(runtime, configuration, clientFactory).run(); + + if (configuration.getMinter().deliveryConsumerSigner() != null) { + CommandLineRuntime.printRunScriptMessage(CONSUMER); + new DeliveryConsumerTokenValidationScript(runtime, configuration, clientFactory) + .run(ids.getTrackingId()); + } else { + CommandLineRuntime.printSkipScriptMessage(CONSUMER); + } + + if (configuration.getMinter().untrustedDeliveryDriverSigner() != null) { + CommandLineRuntime.printRunScriptMessage(UNTRUSTED_DRIVER); + new DeliveryUntrustedDriverTokenValidationScript(runtime, configuration, clientFactory) + .run(ids.getDeliveryVehicleId()); + } else { + CommandLineRuntime.printSkipScriptMessage(UNTRUSTED_DRIVER); + } + + if (configuration.getMinter().trustedDeliveryDriverSigner() != null) { + CommandLineRuntime.printRunScriptMessage(TRUSTED_DRIVER); + new DeliveryTrustedDriverTokenValidationScript(runtime, configuration, clientFactory) + .run(ids.getDeliveryVehicleId()); + } else { + CommandLineRuntime.printSkipScriptMessage(TRUSTED_DRIVER); + } + + if (configuration.getMinter().deliveryFleetReaderSigner() != null) { + CommandLineRuntime.printRunScriptMessage(FLEET_READER); + new DeliveryFleetReaderTokenValidationScript(runtime, configuration, clientFactory) + .run(ids.getDeliveryVehicleId()); + } else { + CommandLineRuntime.printSkipScriptMessage(TRUSTED_DRIVER); + } + } +} diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/ValidateRoles.java b/sample/src/main/java/com/google/fleetengine/auth/sample/ValidateOdrdRoles.java similarity index 81% rename from sample/src/main/java/com/google/fleetengine/auth/sample/ValidateRoles.java rename to sample/src/main/java/com/google/fleetengine/auth/sample/ValidateOdrdRoles.java index a6ae68b..eb6b382 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/ValidateRoles.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/ValidateOdrdRoles.java @@ -25,8 +25,8 @@ import com.google.fleetengine.auth.token.factory.FleetEngineTokenFactorySettings; import com.google.fleetengine.auth.token.factory.signer.ImpersonatedSigner; -/** Validates that the roles configured in {@link Configuration} are setup correctly. */ -final class ValidateRoles { +/** Validates that the roles configured in {@link OdrdConfiguration} are setup correctly. */ +final class ValidateOdrdRoles { private static final String SERVER = "server"; private static final String CONSUMER = "consumer"; private static final String DRIVER = "driver"; @@ -34,20 +34,20 @@ final class ValidateRoles { public static void run() throws Throwable { AuthTokenMinter minter = AuthTokenMinter.builder() - .setServerSigner(ImpersonatedSigner.create(Configuration.SERVER_TOKEN_ACCOUNT)) - .setConsumerSigner(ImpersonatedSigner.create(Configuration.CONSUMER_TOKEN_ACCOUNT)) - .setDriverSigner(ImpersonatedSigner.create(Configuration.DRIVER_TOKEN_ACCOUNT)) + .setServerSigner(ImpersonatedSigner.create(OdrdConfiguration.SERVER_TOKEN_ACCOUNT)) + .setConsumerSigner(ImpersonatedSigner.create(OdrdConfiguration.CONSUMER_TOKEN_ACCOUNT)) + .setDriverSigner(ImpersonatedSigner.create(OdrdConfiguration.DRIVER_TOKEN_ACCOUNT)) .setTokenFactory( new FleetEngineTokenFactory( FleetEngineTokenFactorySettings.builder() - .setAudience(Configuration.FLEET_ENGINE_AUDIENCE) + .setAudience(OdrdConfiguration.FLEET_ENGINE_AUDIENCE) .build())) .build(); SampleScriptConfiguration configuration = SampleScriptConfiguration.builder() - .setFleetEngineAddress(Configuration.FLEET_ENGINE_ADDRESS) - .setProviderId(Configuration.PROVIDER_ID) + .setFleetEngineAddress(OdrdConfiguration.FLEET_ENGINE_ADDRESS) + .setProviderId(OdrdConfiguration.PROVIDER_ID) .setMinter(minter) .build(); @@ -72,5 +72,5 @@ public static void run() throws Throwable { } } - private ValidateRoles() {} + private ValidateOdrdRoles() {} } diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/CommandsFactory.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/CommandsFactory.java index 81792d1..649cd45 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/CommandsFactory.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/CommandsFactory.java @@ -29,4 +29,9 @@ TripCommands createTripCommands( VehicleCommands createVehicleCommands( String fleetEngineAddress, String providerId, FleetEngineTokenProvider tokenProvider) throws IOException; + + /** Creates delivery task command class. */ + DeliveryServiceCommands createDeliveryServiceCommands( + String fleetEngineAddress, String providerId, FleetEngineTokenProvider tokenProvider) + throws IOException; } diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryConsumerTokenValidationScript.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryConsumerTokenValidationScript.java new file mode 100644 index 0000000..6832980 --- /dev/null +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryConsumerTokenValidationScript.java @@ -0,0 +1,49 @@ +package com.google.fleetengine.auth.sample.validation; + +import com.google.fleetengine.auth.token.TrackingClaims; + +public class DeliveryConsumerTokenValidationScript { + private final SampleScriptRuntime runtime; + private final SampleScriptConfiguration configuration; + private final CommandsFactory commandsFactory; + + /** Constructor. */ + public DeliveryConsumerTokenValidationScript( + SampleScriptRuntime runtime, + SampleScriptConfiguration configuration, + CommandsFactory commandsFactory) { + this.runtime = runtime; + this.configuration = configuration; + this.commandsFactory = commandsFactory; + } + + /** Run validation script. */ + public void run(String trackingId) throws Throwable { + DeliveryServiceCommands taskCommandsWithTrackingId = + commandsFactory.createDeliveryServiceCommands( + configuration.getFleetEngineAddress(), + configuration.getProviderId(), + () -> + configuration + .getMinter() + .getDeliveryConsumerToken(TrackingClaims.create(trackingId))); + + runtime.runCommand( + "Search tasks with delivery consumer token", + () -> taskCommandsWithTrackingId.searchTasks(trackingId)); + + DeliveryServiceCommands taskCommandsWithIncorrectTrackingId = + commandsFactory.createDeliveryServiceCommands( + configuration.getFleetEngineAddress(), + configuration.getProviderId(), + () -> + configuration + .getMinter() + .getDeliveryConsumerToken( + TrackingClaims.create(ScriptUtils.generateRandomTrackingId()))); + + runtime.expectPermissionDenied( + "Search task fails when tracking id of task different than delivery " + "consumer token", + () -> taskCommandsWithIncorrectTrackingId.searchTasks(trackingId)); + } +} diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryFleetReaderTokenValidationScript.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryFleetReaderTokenValidationScript.java new file mode 100644 index 0000000..1e067d8 --- /dev/null +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryFleetReaderTokenValidationScript.java @@ -0,0 +1,29 @@ +package com.google.fleetengine.auth.sample.validation; + +public class DeliveryFleetReaderTokenValidationScript { + private final SampleScriptRuntime runtime; + private final SampleScriptConfiguration configuration; + private final CommandsFactory commandsFactory; + + /** Constructor. */ + public DeliveryFleetReaderTokenValidationScript( + SampleScriptRuntime runtime, + SampleScriptConfiguration configuration, + CommandsFactory commandsFactory) { + this.runtime = runtime; + this.configuration = configuration; + this.commandsFactory = commandsFactory; + } + + /** Run validation script. */ + public void run(String trackingId) throws Throwable { + DeliveryServiceCommands commands = + commandsFactory.createDeliveryServiceCommands( + configuration.getFleetEngineAddress(), + configuration.getProviderId(), + () -> configuration.getMinter().getDeliveryFleetReaderToken()); + + runtime.runCommand( + "Search tasks with fleet reader token", () -> commands.searchTasks(trackingId)); + } +} diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryServerTokenValidationScript.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryServerTokenValidationScript.java new file mode 100644 index 0000000..afe413f --- /dev/null +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryServerTokenValidationScript.java @@ -0,0 +1,77 @@ +package com.google.fleetengine.auth.sample.validation; + +public class DeliveryServerTokenValidationScript { + private final SampleScriptRuntime runtime; + private final SampleScriptConfiguration configuration; + private final CommandsFactory commandsFactory; + + /** Constructor */ + public DeliveryServerTokenValidationScript( + SampleScriptRuntime runtime, + SampleScriptConfiguration configuration, + CommandsFactory commandsFactory) { + this.runtime = runtime; + this.configuration = configuration; + this.commandsFactory = commandsFactory; + } + + public Ids run() throws Throwable { + Ids ids = + new Ids( + ScriptUtils.generateRandomTaskId(), + ScriptUtils.generateRandomDeliveryVehicleId(), + ScriptUtils.generateRandomTrackingId()); + + DeliveryServiceCommands commands = + commandsFactory.createDeliveryServiceCommands( + configuration.getFleetEngineAddress(), + configuration.getProviderId(), + configuration.getMinter()); + + runtime.runCommand( + "Create delivery vehicle with server token", + () -> commands.createDeliveryVehicle(ids.getDeliveryVehicleId())); + + runtime.runCommand( + "Get delivery vehicle with server token", + () -> commands.getDeliveryVehicle(ids.getDeliveryVehicleId())); + + runtime.runCommand( + "Create task with server token", + () -> commands.createTask(ids.getTaskId(), ids.trackingId)); + + runtime.runCommand( + "Complete task with server token", () -> commands.completeTask(ids.getTaskId())); + + return ids; + } + + /** Ids of newly created entities. */ + public static class Ids { + + private final String deliveryVehicleId; + private final String taskId; + private final String trackingId; + + Ids(String deliveryVehicleId, String taskId, String trackingId) { + this.deliveryVehicleId = deliveryVehicleId; + this.taskId = taskId; + this.trackingId = trackingId; + } + + /** Id of the new Delivery Vehicle created. */ + public String getDeliveryVehicleId() { + return deliveryVehicleId; + } + + /** Id of the new Task created. */ + public String getTaskId() { + return taskId; + } + + /** Tracking id of the new task created. */ + public String getTrackingId() { + return trackingId; + } + } +} diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryServiceCommands.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryServiceCommands.java new file mode 100644 index 0000000..81f9fcb --- /dev/null +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryServiceCommands.java @@ -0,0 +1,112 @@ +package com.google.fleetengine.auth.sample.validation; + +import com.google.protobuf.Duration; +import com.google.protobuf.FieldMask; +import com.google.type.LatLng; +import google.maps.fleetengine.delivery.v1.CreateDeliveryVehicleRequest; +import google.maps.fleetengine.delivery.v1.CreateTaskRequest; +import google.maps.fleetengine.delivery.v1.DeliveryVehicle; +import google.maps.fleetengine.delivery.v1.GetDeliveryVehicleRequest; +import google.maps.fleetengine.delivery.v1.GetTaskRequest; +import google.maps.fleetengine.delivery.v1.LocationInfo; +import google.maps.fleetengine.delivery.v1.SearchTasksRequest; +import google.maps.fleetengine.delivery.v1.Task; +import google.maps.fleetengine.delivery.v1.Task.State; +import google.maps.fleetengine.delivery.v1.Task.TaskOutcome; +import google.maps.fleetengine.delivery.v1.UpdateTaskRequest; + +public class DeliveryServiceCommands { + private static final LatLng PLANNED_LOCATION = ProtosUtil.getLatLng(37.419646, -122.073885); + + private final DeliveryServiceStub stub; + private final String providerId; + + /** Constructor. */ + public DeliveryServiceCommands(DeliveryServiceStub stub, String providerId) { + this.stub = stub; + this.providerId = providerId; + } + + /** Create trip with a given id and hardcoded values. */ + public Task createTask(String taskId, String trackingId) { + Task task = + Task.newBuilder() + .setName(getTaskName(taskId)) + .setTrackingId(trackingId) + .setPlannedLocation(LocationInfo.newBuilder().setPoint(PLANNED_LOCATION).build()) + .setTaskDuration(Duration.newBuilder().setSeconds(3600).build()) + .setType(Task.Type.DELIVERY) + .setState(State.OPEN) + .build(); + + CreateTaskRequest createTaskRequest = + CreateTaskRequest.newBuilder() + .setTask(task) + .setTaskId(taskId) + .setParent(ScriptUtils.getProviderName(providerId)) + .build(); + return stub.createTask(createTaskRequest); + } + + /** Get existing task. */ + public Task getTask(String taskId) { + GetTaskRequest getTaskRequest = + GetTaskRequest.newBuilder().setName(getTaskName(taskId)).build(); + return stub.getTask(getTaskRequest); + } + + /** Search existing tasks by tracking id. */ + public void searchTasks(String trackingId) { + SearchTasksRequest searchTasksRequest = + SearchTasksRequest.newBuilder() + .setParent(ScriptUtils.getProviderName(providerId)) + .setTrackingId(trackingId) + .build(); + stub.searchTasks(searchTasksRequest); + } + + /** Update task outcome to succeed. */ + public Task completeTask(String taskId) { + UpdateTaskRequest updateTaskRequest = + UpdateTaskRequest.newBuilder() + .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome").build()) + .setTask( + Task.newBuilder() + .setName(getTaskName(taskId)) + .setTaskOutcome(TaskOutcome.SUCCEEDED) + .build()) + .build(); + return stub.updateTask(updateTaskRequest); + } + + /** Task names must be in the given format. */ + private String getTaskName(String taskId) { + return String.format("providers/%s/tasks/%s", providerId, taskId); + } + + public DeliveryVehicle createDeliveryVehicle(String deliveryVehicleId) { + DeliveryVehicle deliveryVehicle = + DeliveryVehicle.newBuilder().setName(getDeliveryVehicleName(deliveryVehicleId)).build(); + + CreateDeliveryVehicleRequest createDeliveryVehicleRequest = + CreateDeliveryVehicleRequest.newBuilder() + .setDeliveryVehicle(deliveryVehicle) + .setDeliveryVehicleId(deliveryVehicleId) + .setParent(ScriptUtils.getProviderName(providerId)) + .build(); + return stub.createDeliveryVehicle(createDeliveryVehicleRequest); + } + + public DeliveryVehicle getDeliveryVehicle(String deliveryVehicleId) { + GetDeliveryVehicleRequest getDeliveryVehicleRequest = + GetDeliveryVehicleRequest.newBuilder() + .setName(getDeliveryVehicleName(deliveryVehicleId)) + .build(); + return stub.getDeliveryVehicle(getDeliveryVehicleRequest); + } + + /** Delivery vehicle names must be in the given format. */ + private String getDeliveryVehicleName(String deliveryVehicleId) { + return String.format("providers/%s/deliveryVehicles/%s", providerId, deliveryVehicleId); + } +} diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryServiceStub.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryServiceStub.java new file mode 100644 index 0000000..be1d791 --- /dev/null +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryServiceStub.java @@ -0,0 +1,49 @@ +package com.google.fleetengine.auth.sample.validation; + +import google.maps.fleetengine.delivery.v1.CreateDeliveryVehicleRequest; +import google.maps.fleetengine.delivery.v1.CreateTaskRequest; +import google.maps.fleetengine.delivery.v1.DeliveryVehicle; +import google.maps.fleetengine.delivery.v1.GetDeliveryVehicleRequest; +import google.maps.fleetengine.delivery.v1.GetTaskRequest; +import google.maps.fleetengine.delivery.v1.SearchTasksRequest; +import google.maps.fleetengine.delivery.v1.Task; +import google.maps.fleetengine.delivery.v1.UpdateTaskRequest; + +/** Wraps {@link google.maps.fleetengine.delivery.v1.DeliveryServiceClient} for testing purposes. */ +public interface DeliveryServiceStub { + + /** + * see: {@link + * google.maps.fleetengine.delivery.v1.DeliveryServiceClient#createTask(CreateTaskRequest)} + */ + Task createTask(CreateTaskRequest createTaskRequest); + + /** + * see: {@link google.maps.fleetengine.delivery.v1.DeliveryServiceClient#getTask(GetTaskRequest)} + */ + Task getTask(GetTaskRequest getTripRequest); + + /** + * see: {@link + * google.maps.fleetengine.delivery.v1.DeliveryServiceClient#searchTasks(SearchTasksRequest)} + */ + void searchTasks(SearchTasksRequest searchTripRequest); + + /** + * see: {@link + * google.maps.fleetengine.delivery.v1.DeliveryServiceClient#updateTask(UpdateTaskRequest)} + */ + Task updateTask(UpdateTaskRequest updateTaskRequest); + + /** + * see: {@link + * google.maps.fleetengine.delivery.v1.DeliveryServiceClient#createDeliveryVehicle(CreateDeliveryVehicleRequest)} + */ + DeliveryVehicle createDeliveryVehicle(CreateDeliveryVehicleRequest createDeliveryVehicleRequest); + + /** + * see: {@link + * google.maps.fleetengine.delivery.v1.DeliveryServiceClient#getDeliveryVehicle(GetDeliveryVehicleRequest)} + */ + DeliveryVehicle getDeliveryVehicle(GetDeliveryVehicleRequest deliveryVehicleRequest); +} diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryTrustedDriverTokenValidationScript.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryTrustedDriverTokenValidationScript.java new file mode 100644 index 0000000..fc15799 --- /dev/null +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryTrustedDriverTokenValidationScript.java @@ -0,0 +1,55 @@ +package com.google.fleetengine.auth.sample.validation; + +import com.google.fleetengine.auth.token.DeliveryVehicleClaims; + +public class DeliveryTrustedDriverTokenValidationScript { + + private final SampleScriptRuntime runtime; + private final SampleScriptConfiguration configuration; + private final CommandsFactory commandsFactory; + + public DeliveryTrustedDriverTokenValidationScript( + SampleScriptRuntime runtime, + SampleScriptConfiguration configuration, + CommandsFactory commandsFactory) { + this.runtime = runtime; + this.configuration = configuration; + this.commandsFactory = commandsFactory; + } + + public void run(String deliveryVehicleId) throws Throwable { + DeliveryServiceCommands commands = + commandsFactory.createDeliveryServiceCommands( + configuration.getFleetEngineAddress(), + configuration.getProviderId(), + () -> + configuration + .getMinter() + .getTrustedDeliveryVehicleToken( + DeliveryVehicleClaims.create(deliveryVehicleId))); + + runtime.runCommand( + "Get delivery vehicle with trusted driver token", + () -> commands.getDeliveryVehicle(deliveryVehicleId)); + + runtime.expectPermissionDenied( + "Get delivery vehicle fails when delivery vehicle id different than " + + "trusted driver token", + () -> commands.getDeliveryVehicle(ScriptUtils.generateRandomDeliveryVehicleId())); + + String newDeliveryVehicleId = ScriptUtils.generateRandomDeliveryVehicleId(); + DeliveryServiceCommands deliveryCommands = + commandsFactory.createDeliveryServiceCommands( + configuration.getFleetEngineAddress(), + configuration.getProviderId(), + () -> + configuration + .getMinter() + .getTrustedDeliveryVehicleToken( + DeliveryVehicleClaims.create(newDeliveryVehicleId))); + + runtime.runCommand( + "Create delivery vehicle with trusted driver token", + () -> deliveryCommands.createDeliveryVehicle(newDeliveryVehicleId)); + } +} diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryUntrustedDriverTokenValidationScript.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryUntrustedDriverTokenValidationScript.java new file mode 100644 index 0000000..e2cfb58 --- /dev/null +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/DeliveryUntrustedDriverTokenValidationScript.java @@ -0,0 +1,44 @@ +package com.google.fleetengine.auth.sample.validation; + +import com.google.fleetengine.auth.token.DeliveryVehicleClaims; + +public class DeliveryUntrustedDriverTokenValidationScript { + private final SampleScriptRuntime runtime; + private final SampleScriptConfiguration configuration; + private final CommandsFactory commandsFactory; + + /** Constructor */ + public DeliveryUntrustedDriverTokenValidationScript( + SampleScriptRuntime runtime, + SampleScriptConfiguration configuration, + CommandsFactory commandsFactory) { + this.runtime = runtime; + this.configuration = configuration; + this.commandsFactory = commandsFactory; + } + + public void run(String deliveryVehicleId) throws Throwable { + DeliveryServiceCommands commands = + commandsFactory.createDeliveryServiceCommands( + configuration.getFleetEngineAddress(), + configuration.getProviderId(), + () -> + configuration + .getMinter() + .getUntrustedDeliveryVehicleToken( + DeliveryVehicleClaims.create(deliveryVehicleId))); + + runtime.runCommand( + "Get delivery vehicle with untrusted driver token", + () -> commands.getDeliveryVehicle(deliveryVehicleId)); + + runtime.expectPermissionDenied( + "Get delivery vehicle fails when delivery vehicle id different than " + + "untrusted driver token", + () -> commands.getDeliveryVehicle(ScriptUtils.generateRandomDeliveryVehicleId())); + + runtime.expectPermissionDenied( + "Create delivery vehicle fails with untrusted driver token", + () -> commands.createDeliveryVehicle(ScriptUtils.generateRandomDeliveryVehicleId())); + } +} diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/SampleScriptConfiguration.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/SampleScriptConfiguration.java index 84283d9..b503e09 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/SampleScriptConfiguration.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/SampleScriptConfiguration.java @@ -30,9 +30,8 @@ public abstract class SampleScriptConfiguration { public abstract AuthTokenMinter getMinter(); /** Create SampleScriptConfiguration builder */ - public static SampleScriptConfiguration.Builder builder() { - return new com.google.fleetengine.auth.sample.validation.AutoValue_SampleScriptConfiguration - .Builder(); + public static Builder builder() { + return new AutoValue_SampleScriptConfiguration.Builder(); } /** SampleScriptConfiguration builder */ diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/ScriptUtils.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/ScriptUtils.java index acf0c10..a026e79 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/ScriptUtils.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/ScriptUtils.java @@ -35,4 +35,16 @@ public static String generateRandomVehicleId() { public static String generateRandomTripId() { return String.format("trip-%s", UUID.randomUUID()); } + + public static String generateRandomTaskId() { + return String.format("task-%s", UUID.randomUUID()); + } + + public static String generateRandomDeliveryVehicleId() { + return String.format("delivery-vehicle-%s", UUID.randomUUID()); + } + + public static String generateRandomTrackingId() { + return String.format("tracking-%s", UUID.randomUUID()); + } } diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/TripStub.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/TripStub.java index bfe5478..314f15f 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/TripStub.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/TripStub.java @@ -17,7 +17,6 @@ import google.maps.fleetengine.v1.CreateTripRequest; import google.maps.fleetengine.v1.GetTripRequest; import google.maps.fleetengine.v1.Trip; -import google.maps.fleetengine.v1.TripServiceClient; import google.maps.fleetengine.v1.UpdateTripRequest; /** @@ -26,12 +25,12 @@ */ public interface TripStub { - /** see: {@link TripServiceClient#createTrip(CreateTripRequest)} */ + /** see: {@link google.maps.fleetengine.v1.TripServiceClient#createTrip(CreateTripRequest)} */ Trip createTrip(CreateTripRequest createTripRequest); - /** see: {@link TripServiceClient#getTrip(GetTripRequest)} */ + /** see: {@link google.maps.fleetengine.v1.TripServiceClient#getTrip(GetTripRequest)} */ Trip getTrip(GetTripRequest getTripRequest); - /** see: {@link TripServiceClient#updateTrip(UpdateTripRequest)} */ + /** see: {@link google.maps.fleetengine.v1.TripServiceClient#updateTrip(UpdateTripRequest)} */ Trip updateTrip(UpdateTripRequest updateTripRequest); } diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/VehicleStub.java b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/VehicleStub.java index 14810f0..8f8a47b 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/validation/VehicleStub.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/validation/VehicleStub.java @@ -20,22 +20,30 @@ import google.maps.fleetengine.v1.SearchVehiclesResponse; import google.maps.fleetengine.v1.UpdateVehicleRequest; import google.maps.fleetengine.v1.Vehicle; -import google.maps.fleetengine.v1.VehicleServiceClient; /** * Wraps {@link google.maps.fleetengine.v1.VehicleServiceClient} for * testing purposes. */ public interface VehicleStub { - /** see: {@link VehicleServiceClient#createVehicle(CreateVehicleRequest)} */ + /** + * see: {@link + * google.maps.fleetengine.v1.VehicleServiceClient#createVehicle(CreateVehicleRequest)} + */ Vehicle createVehicle(CreateVehicleRequest request); - /** see: {@link VehicleServiceClient#getVehicle(GetVehicleRequest)} */ + /** see: {@link google.maps.fleetengine.v1.VehicleServiceClient#getVehicle(GetVehicleRequest)} */ Vehicle getVehicle(GetVehicleRequest request); - /** see: {@link VehicleServiceClient#updateVehicle(UpdateVehicleRequest)} */ + /** + * see: {@link + * google.maps.fleetengine.v1.VehicleServiceClient#updateVehicle(UpdateVehicleRequest)} + */ Vehicle updateVehicle(UpdateVehicleRequest request); - /** see: {@link VehicleServiceClient#searchVehicles(SearchVehiclesRequest)} */ + /** + * see: {@link + * google.maps.fleetengine.v1.VehicleServiceClient#searchVehicles(SearchVehiclesRequest)} + */ SearchVehiclesResponse searchVehicles(SearchVehiclesRequest request); } diff --git a/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryConsumerTokenValidationScriptTest.java b/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryConsumerTokenValidationScriptTest.java new file mode 100644 index 0000000..5fe52be --- /dev/null +++ b/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryConsumerTokenValidationScriptTest.java @@ -0,0 +1,65 @@ +package com.google.fleetengine.auth.sample.validation; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.google.fleetengine.auth.AuthTokenMinter; +import java.io.IOException; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.ArgumentCaptor; + +@RunWith(JUnit4.class) +public class DeliveryConsumerTokenValidationScriptTest { + private static final String TEST_FLEET_ENGINE_ADDRESS = "test.fleetengine.address:123"; + private static final String TEST_PROVIDER_ID = "test-provider-id"; + private static final String TEST_TRACKING_ID = "test-tracking-id"; + + private UnitTestSampleScriptRuntime runtime; + private SampleScriptConfiguration configuration; + private CommandsFactory commandsFactory; + private DeliveryServiceCommands deliveryServiceCommandsSuccess; + private DeliveryServiceCommands deliveryServiceCommandsFails; + + @Before + public void setup() throws IOException { + AuthTokenMinter minter = AuthTokenMinter.builder().build(); + runtime = new UnitTestSampleScriptRuntime(); + commandsFactory = mock(CommandsFactory.class); + deliveryServiceCommandsSuccess = mock(DeliveryServiceCommands.class); + deliveryServiceCommandsFails = mock(DeliveryServiceCommands.class); + configuration = + SampleScriptConfiguration.builder() + .setFleetEngineAddress(TEST_FLEET_ENGINE_ADDRESS) + .setProviderId(TEST_PROVIDER_ID) + .setMinter(minter) + .build(); + + when(commandsFactory.createDeliveryServiceCommands( + eq(TEST_FLEET_ENGINE_ADDRESS), eq(TEST_PROVIDER_ID), any())) + .thenReturn(deliveryServiceCommandsSuccess) + .thenReturn(deliveryServiceCommandsFails); + } + + @Test + public void run_callsSearchTasks_withTrackingId() throws Throwable { + DeliveryConsumerTokenValidationScript script = + new DeliveryConsumerTokenValidationScript(runtime, configuration, commandsFactory); + script.run(TEST_TRACKING_ID); + + ArgumentCaptor captor = ArgumentCaptor.forClass(String.class); + verify(deliveryServiceCommandsSuccess, times(1)).searchTasks(captor.capture()); + assertEquals(TEST_TRACKING_ID, captor.getValue()); + + runtime.wasExpectPermissionDeniedCalled(); + verify(deliveryServiceCommandsFails, times(1)).searchTasks(captor.capture()); + assertEquals(TEST_TRACKING_ID, captor.getValue()); + } +} diff --git a/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryFleetReaderTokenValidationScriptTest.java b/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryFleetReaderTokenValidationScriptTest.java new file mode 100644 index 0000000..9554d38 --- /dev/null +++ b/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryFleetReaderTokenValidationScriptTest.java @@ -0,0 +1,58 @@ +package com.google.fleetengine.auth.sample.validation; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.google.fleetengine.auth.AuthTokenMinter; +import java.io.IOException; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.ArgumentCaptor; + +@RunWith(JUnit4.class) +public class DeliveryFleetReaderTokenValidationScriptTest { + private static final String TEST_FLEET_ENGINE_ADDRESS = "test.fleetengine.address:123"; + private static final String TEST_PROVIDER_ID = "test-provider-id"; + private static final String TEST_TRACKING_ID = "test-tracking-id"; + + private UnitTestSampleScriptRuntime runtime; + private SampleScriptConfiguration configuration; + private CommandsFactory commandsFactory; + private DeliveryServiceCommands deliveryServiceCommands; + + @Before + public void setup() throws IOException { + AuthTokenMinter minter = AuthTokenMinter.builder().build(); + runtime = new UnitTestSampleScriptRuntime(); + commandsFactory = mock(CommandsFactory.class); + deliveryServiceCommands = mock(DeliveryServiceCommands.class); + configuration = + SampleScriptConfiguration.builder() + .setFleetEngineAddress(TEST_FLEET_ENGINE_ADDRESS) + .setProviderId(TEST_PROVIDER_ID) + .setMinter(minter) + .build(); + + when(commandsFactory.createDeliveryServiceCommands( + eq(TEST_FLEET_ENGINE_ADDRESS), eq(TEST_PROVIDER_ID), any())) + .thenReturn(deliveryServiceCommands); + } + + @Test + public void run_callsSearchTasks_withTrackingId() throws Throwable { + DeliveryFleetReaderTokenValidationScript script = + new DeliveryFleetReaderTokenValidationScript(runtime, configuration, commandsFactory); + script.run(TEST_TRACKING_ID); + + ArgumentCaptor captor = ArgumentCaptor.forClass(String.class); + verify(deliveryServiceCommands, times(1)).searchTasks(captor.capture()); + assertEquals(TEST_TRACKING_ID, captor.getValue()); + } +} diff --git a/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryServerTokenValidationScriptTest.java b/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryServerTokenValidationScriptTest.java new file mode 100644 index 0000000..2385618 --- /dev/null +++ b/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryServerTokenValidationScriptTest.java @@ -0,0 +1,55 @@ +package com.google.fleetengine.auth.sample.validation; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.google.fleetengine.auth.AuthTokenMinter; +import java.io.IOException; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class DeliveryServerTokenValidationScriptTest { + private static final String TEST_FLEET_ENGINE_ADDRESS = "test.fleetengine.address:123"; + private static final String TEST_PROVIDER_ID = "test-provider-id"; + + private SampleScriptRuntime runtime; + private SampleScriptConfiguration configuration; + private CommandsFactory commandsFactory; + private DeliveryServiceCommands deliveryServiceCommands; + + @Before + public void setup() throws IOException { + AuthTokenMinter minter = AuthTokenMinter.builder().build(); + runtime = new UnitTestSampleScriptRuntime(); + commandsFactory = mock(CommandsFactory.class); + deliveryServiceCommands = mock(DeliveryServiceCommands.class); + configuration = + SampleScriptConfiguration.builder() + .setFleetEngineAddress(TEST_FLEET_ENGINE_ADDRESS) + .setProviderId(TEST_PROVIDER_ID) + .setMinter(minter) + .build(); + + when(commandsFactory.createDeliveryServiceCommands( + eq(TEST_FLEET_ENGINE_ADDRESS), eq(TEST_PROVIDER_ID), any())) + .thenReturn(deliveryServiceCommands); + } + + @Test + public void run_callsDeliveryServiceCommands() throws Throwable { + DeliveryServerTokenValidationScript script = + new DeliveryServerTokenValidationScript(runtime, configuration, commandsFactory); + script.run(); + + verify(deliveryServiceCommands).getDeliveryVehicle(any()); + verify(deliveryServiceCommands).createDeliveryVehicle(any()); + verify(deliveryServiceCommands).createTask(any(), any()); + verify(deliveryServiceCommands).completeTask(any()); + } +} diff --git a/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryTrustedDriverTokenValidationScriptTest.java b/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryTrustedDriverTokenValidationScriptTest.java new file mode 100644 index 0000000..9770486 --- /dev/null +++ b/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryTrustedDriverTokenValidationScriptTest.java @@ -0,0 +1,68 @@ +package com.google.fleetengine.auth.sample.validation; + +import static org.junit.Assert.assertNotEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.google.fleetengine.auth.AuthTokenMinter; +import java.io.IOException; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.ArgumentCaptor; + +@RunWith(JUnit4.class) +public class DeliveryTrustedDriverTokenValidationScriptTest { + private static final String TEST_FLEET_ENGINE_ADDRESS = "test.fleetengine.address:123"; + private static final String TEST_PROVIDER_ID = "test-provider-id"; + private static final String TEST_DELIVERY_VEHICLE_ID = "test-delivery-vehicle-id"; + + private UnitTestSampleScriptRuntime runtime; + private SampleScriptConfiguration configuration; + private CommandsFactory commandsFactory; + private DeliveryServiceCommands deliveryServiceCommands; + + @Before + public void setup() throws IOException { + AuthTokenMinter minter = AuthTokenMinter.builder().build(); + runtime = new UnitTestSampleScriptRuntime(); + commandsFactory = mock(CommandsFactory.class); + deliveryServiceCommands = mock(DeliveryServiceCommands.class); + configuration = + SampleScriptConfiguration.builder() + .setFleetEngineAddress(TEST_FLEET_ENGINE_ADDRESS) + .setProviderId(TEST_PROVIDER_ID) + .setMinter(minter) + .build(); + + when(commandsFactory.createDeliveryServiceCommands( + eq(TEST_FLEET_ENGINE_ADDRESS), eq(TEST_PROVIDER_ID), any())) + .thenReturn(deliveryServiceCommands); + } + + @Test + public void run_callsGetDeliveryVehicle_withDeliveryVehicleId() throws Throwable { + DeliveryTrustedDriverTokenValidationScript script = + new DeliveryTrustedDriverTokenValidationScript(runtime, configuration, commandsFactory); + script.run(TEST_DELIVERY_VEHICLE_ID); + + runtime.wasExpectPermissionDeniedCalled(); + verify(deliveryServiceCommands, times(1)).getDeliveryVehicle(TEST_DELIVERY_VEHICLE_ID); + } + + @Test + public void run_callsCreateDeliveryVehicle_withDifferentDeliveryVehicleId() throws Throwable { + DeliveryTrustedDriverTokenValidationScript script = + new DeliveryTrustedDriverTokenValidationScript(runtime, configuration, commandsFactory); + script.run(TEST_DELIVERY_VEHICLE_ID); + + ArgumentCaptor captor = ArgumentCaptor.forClass(String.class); + verify(deliveryServiceCommands, times(1)).createDeliveryVehicle(captor.capture()); + assertNotEquals(TEST_DELIVERY_VEHICLE_ID, captor.getValue()); + } +} diff --git a/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryUntrustedDriverTokenValidationScriptTest.java b/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryUntrustedDriverTokenValidationScriptTest.java new file mode 100644 index 0000000..8fecd45 --- /dev/null +++ b/sample/src/test/java/com/google/fleetengine/auth/sample/DeliveryUntrustedDriverTokenValidationScriptTest.java @@ -0,0 +1,68 @@ +package com.google.fleetengine.auth.sample.validation; + +import static org.junit.Assert.assertNotEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.google.fleetengine.auth.AuthTokenMinter; +import java.io.IOException; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.ArgumentCaptor; + +@RunWith(JUnit4.class) +public class DeliveryUntrustedDriverTokenValidationScriptTest { + private static final String TEST_FLEET_ENGINE_ADDRESS = "test.fleetengine.address:123"; + private static final String TEST_PROVIDER_ID = "test-provider-id"; + private static final String TEST_DELIVERY_VEHICLE_ID = "test-delivery-vehicle-id"; + + private UnitTestSampleScriptRuntime runtime; + private SampleScriptConfiguration configuration; + private CommandsFactory commandsFactory; + private DeliveryServiceCommands deliveryServiceCommands; + + @Before + public void setup() throws IOException { + AuthTokenMinter minter = AuthTokenMinter.builder().build(); + runtime = new UnitTestSampleScriptRuntime(); + commandsFactory = mock(CommandsFactory.class); + deliveryServiceCommands = mock(DeliveryServiceCommands.class); + configuration = + SampleScriptConfiguration.builder() + .setFleetEngineAddress(TEST_FLEET_ENGINE_ADDRESS) + .setProviderId(TEST_PROVIDER_ID) + .setMinter(minter) + .build(); + + when(commandsFactory.createDeliveryServiceCommands( + eq(TEST_FLEET_ENGINE_ADDRESS), eq(TEST_PROVIDER_ID), any())) + .thenReturn(deliveryServiceCommands); + } + + @Test + public void run_callsGetDeliveryVehicle_withDeliveryVehicleId() throws Throwable { + DeliveryUntrustedDriverTokenValidationScript script = + new DeliveryUntrustedDriverTokenValidationScript(runtime, configuration, commandsFactory); + script.run(TEST_DELIVERY_VEHICLE_ID); + + runtime.wasExpectPermissionDeniedCalled(); + verify(deliveryServiceCommands, times(1)).getDeliveryVehicle(TEST_DELIVERY_VEHICLE_ID); + } + + @Test + public void run_callsCreateDeliveryVehicle_withDifferentDeliveryVehicleId() throws Throwable { + DeliveryUntrustedDriverTokenValidationScript script = + new DeliveryUntrustedDriverTokenValidationScript(runtime, configuration, commandsFactory); + script.run(TEST_DELIVERY_VEHICLE_ID); + + ArgumentCaptor captor = ArgumentCaptor.forClass(String.class); + verify(deliveryServiceCommands, times(1)).createDeliveryVehicle(captor.capture()); + assertNotEquals(TEST_DELIVERY_VEHICLE_ID, captor.getValue()); + } +} diff --git a/version.properties b/version.properties index 64acfab..3eec925 100644 --- a/version.properties +++ b/version.properties @@ -15,5 +15,5 @@ ################################################################################ # Used by conventional commits in github. Do not touch. -libVersion=1.6.0 +libVersion=1.7.0 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy