mirror of https://github.com/dapr/java-sdk.git
				
				
				
			Adding Integration Test for Pub Sub over HTTP (#167)
* Adding Integration Test for Pub Sub over HTTP * Update PubSubIT.java * Remove unneeded thread sleep * Serializer is now optional in client builder. Co-authored-by: Artur Souza <artursouza.ms@outlook.com>
This commit is contained in:
		
							parent
							
								
									45fe471c48
								
							
						
					
					
						commit
						ebea096bef
					
				|  | @ -0,0 +1,77 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) Microsoft Corporation. | ||||||
|  |  * Licensed under the MIT License. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | package io.dapr.it.pubsub.http; | ||||||
|  | 
 | ||||||
|  | import io.dapr.client.DaprClient; | ||||||
|  | import io.dapr.client.DaprClientBuilder; | ||||||
|  | import io.dapr.client.domain.Verb; | ||||||
|  | import io.dapr.it.BaseIT; | ||||||
|  | import io.dapr.it.DaprRun; | ||||||
|  | import io.dapr.serializer.DefaultObjectSerializer; | ||||||
|  | import org.junit.Test; | ||||||
|  | 
 | ||||||
|  | import java.util.Collections; | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | import static io.dapr.it.Retry.callWithRetry; | ||||||
|  | import static org.junit.Assert.assertEquals; | ||||||
|  | import static org.junit.Assert.assertTrue; | ||||||
|  | 
 | ||||||
|  | public class PubSubIT extends BaseIT { | ||||||
|  | 
 | ||||||
|  |     //Number of messages to be sent: 10 | ||||||
|  |     private static final int NUM_MESSAGES = 10; | ||||||
|  |      | ||||||
|  |     //The title of the topic to be used for publishing | ||||||
|  |     private static final String TOPIC_NAME = "testingtopic"; | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void testPubSub() throws Exception { | ||||||
|  |         System.out.println("Working Directory = " + System.getProperty("user.dir")); | ||||||
|  | 
 | ||||||
|  |         final DaprRun daprRun = startDaprApp( | ||||||
|  |                 this.getClass().getSimpleName(), | ||||||
|  |                 SubscriberService.SUCCESS_MESSAGE, | ||||||
|  |                 SubscriberService.class, | ||||||
|  |                 true, | ||||||
|  |                 60000); | ||||||
|  |         // At this point, it is guaranteed that the service above is running and all ports being listened to. | ||||||
|  | 
 | ||||||
|  |         DaprClient client = new DaprClientBuilder().build(); | ||||||
|  |         for (int i = 0; i < NUM_MESSAGES; i++) { | ||||||
|  |             String message = String.format("This is message #%d", i); | ||||||
|  |             //Publishing messages | ||||||
|  |             client.publishEvent(TOPIC_NAME, message).block(); | ||||||
|  |             System.out.println("Published message: " + message); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         //Publishing a single byte: Example of non-string based content published | ||||||
|  |         client.publishEvent( | ||||||
|  |                 TOPIC_NAME, | ||||||
|  |                 new byte[] { 1 }, | ||||||
|  |                 Collections.singletonMap("content-type", "application/octet-stream")).block(); | ||||||
|  |         System.out.println("Published one byte."); | ||||||
|  | 
 | ||||||
|  |         Thread.sleep(3000); | ||||||
|  | 
 | ||||||
|  |         callWithRetry(() -> { | ||||||
|  |             System.out.println("Checking results ..."); | ||||||
|  |             final List<String> messages = client.invokeService(Verb.GET, daprRun.getAppName(), "messages", null, List.class).block(); | ||||||
|  |             assertEquals(11, messages.size()); | ||||||
|  | 
 | ||||||
|  |             for (int i = 0; i < NUM_MESSAGES; i++) { | ||||||
|  | 
 | ||||||
|  |                     assertTrue(messages.get(i).startsWith("This is message ")); | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |             byte[] result=new byte[] { 1 }; | ||||||
|  |             assertEquals(result.length, messages.get(10).getBytes().length); | ||||||
|  |             assertEquals(result[0], messages.get(10).getBytes()[0]); | ||||||
|  | 
 | ||||||
|  |         }, 2000); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -0,0 +1,57 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) Microsoft Corporation. | ||||||
|  |  * Licensed under the MIT License. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | package io.dapr.it.pubsub.http; | ||||||
|  | 
 | ||||||
|  | import io.dapr.client.domain.CloudEvent; | ||||||
|  | import io.dapr.serializer.DefaultObjectSerializer; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import reactor.core.publisher.Mono; | ||||||
|  | 
 | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * SpringBoot Controller to handle input binding. | ||||||
|  |  */ | ||||||
|  | @RestController | ||||||
|  | public class SubscriberController { | ||||||
|  | 
 | ||||||
|  |   private static final List<String> messagesReceived = new ArrayList(); | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Dapr's default serializer/deserializer. | ||||||
|  |    */ | ||||||
|  |   private static final DefaultObjectSerializer SERIALIZER = new DefaultObjectSerializer (); | ||||||
|  | 
 | ||||||
|  |   @GetMapping("/dapr/subscribe") | ||||||
|  |   public byte[] daprConfig() throws Exception { | ||||||
|  |     return SERIALIZER.serialize(new String[] { "testingtopic" }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @GetMapping(path = "/messages") | ||||||
|  |   public List<String> getMessages() { | ||||||
|  |     return messagesReceived; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @PostMapping(path = "/testingtopic") | ||||||
|  |   public Mono<Void> handleMessage(@RequestBody(required = false) byte[] body, | ||||||
|  |                                   @RequestHeader Map<String, String> headers) { | ||||||
|  |     return Mono.fromRunnable(() -> { | ||||||
|  |       try { | ||||||
|  |         // Dapr's event is compliant to CloudEvent. | ||||||
|  |         CloudEvent envelope = CloudEvent.deserialize(body); | ||||||
|  | 
 | ||||||
|  |         String message = envelope.getData() == null ? "" : envelope.getData(); | ||||||
|  |         System.out.println("Subscriber got message: " + message); | ||||||
|  |         messagesReceived.add(envelope.getData()); | ||||||
|  |       } catch (Exception e) { | ||||||
|  |         throw new RuntimeException(e); | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -0,0 +1,40 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) Microsoft Corporation. | ||||||
|  |  * Licensed under the MIT License. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | package io.dapr.it.pubsub.http; | ||||||
|  | 
 | ||||||
|  | import io.dapr.it.binding.http.InputBindingService; | ||||||
|  | import org.springframework.boot.SpringApplication; | ||||||
|  | import org.springframework.boot.autoconfigure.SpringBootApplication; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Service for subscriber. | ||||||
|  |  */ | ||||||
|  | @SpringBootApplication(scanBasePackages = {"io.dapr.it.pubsub.http"}) | ||||||
|  | public class SubscriberService { | ||||||
|  | 
 | ||||||
|  |   public static final String SUCCESS_MESSAGE = "dapr initialized. Status: Running. Init Elapsed"; | ||||||
|  | 
 | ||||||
|  |   public static void main(String[] args) throws Exception { | ||||||
|  |     int port = Integer.parseInt(args[0]); | ||||||
|  | 
 | ||||||
|  |     System.out.printf("Service starting on port %d ...\n", port); | ||||||
|  | 
 | ||||||
|  |     // Start Dapr's callback endpoint. | ||||||
|  |     start(port); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Starts Dapr's callback in a given port. | ||||||
|  |    * | ||||||
|  |    * @param port Port to listen to. | ||||||
|  |    */ | ||||||
|  |   private static void start(int port) { | ||||||
|  |     SpringApplication app = new SpringApplication(SubscriberService.class); | ||||||
|  |     app.run(String.format("--server.port=%d", port)); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue