• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  * SPDX-License-Identifier: Apache-2.0.
4  */
5 
6 package software.amazon.awssdk.crt.test;
7 
8 import org.junit.Assume;
9 import org.junit.Test;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.fail;
12 
13 import software.amazon.awssdk.crt.io.TlsContext;
14 import software.amazon.awssdk.crt.io.TlsContextOptions;
15 import software.amazon.awssdk.crt.mqtt.MqttMessage;
16 import software.amazon.awssdk.crt.mqtt.QualityOfService;
17 
18 import java.util.UUID;
19 import java.util.concurrent.CompletableFuture;
20 import java.util.function.*;
21 
22 public class IotServiceTest extends MqttClientConnectionFixture {
IotServiceTest()23     public IotServiceTest() {
24     }
25 
26     static final String TEST_TOPIC = "sdk/test/java/" + UUID.randomUUID().toString();
27     int subsAcked = 0;
28 
29     @Test
testIotService()30     public void testIotService() {
31         skipIfNetworkUnavailable();
32         Assume.assumeTrue(AWS_TEST_MQTT311_IOT_CORE_HOST != null);
33         Assume.assumeTrue(AWS_TEST_MQTT311_IOT_CORE_RSA_CERT != null);
34         Assume.assumeTrue(AWS_TEST_MQTT311_IOT_CORE_RSA_KEY != null);
35         Consumer<MqttMessage> messageHandler = (message) -> {};
36         int port = 8883;
37 
38         try (TlsContextOptions contextOptions = TlsContextOptions.createWithMtlsFromPath(
39                 AWS_TEST_MQTT311_IOT_CORE_RSA_CERT,
40                 AWS_TEST_MQTT311_IOT_CORE_RSA_KEY);)
41             {
42                 try (TlsContext context = new TlsContext(contextOptions);)
43                 {
44                     connectDirectWithConfig(
45                         context,
46                         AWS_TEST_MQTT311_IOT_CORE_HOST,
47                         port,
48                         null,
49                         null,
50                         null);
51 
52                     CompletableFuture<Integer> subscribed = connection.subscribe(TEST_TOPIC, QualityOfService.AT_LEAST_ONCE, messageHandler);
53                     subscribed.thenApply(packetId -> subsAcked++);
54                     subscribed.get();
55 
56                     assertEquals("Single subscription", 1, subsAcked);
57 
58                     CompletableFuture<Integer> unsubscribed = connection.unsubscribe(TEST_TOPIC);
59                     unsubscribed.thenApply(packetId -> subsAcked--);
60                     unsubscribed.get();
61 
62                     assertEquals("No Subscriptions", 0, subsAcked);
63 
64                     disconnect();
65                     close();
66                 }
67                 catch (Exception ex)
68                 {
69                     fail(ex.getMessage());
70                 }
71             }
72     }
73 };
74