Skip to content

Commit 7ce7079

Browse files
gguusslesv
authored andcommitted
IoT MQTT Tests (#966)
* Adds MQTT device tests and example of configuration retrieval * Fixes compilation * Changes RSA certs to not expire, updates manager with setConfig, adds tests. * Updates MQTT client dependency to use latest version from Maven central. * Removes unused scripts and updates sample quickstart instructions. * Updates flaky tests in vision beta.
1 parent 4b646f9 commit 7ce7079

File tree

17 files changed

+401
-420
lines changed

17 files changed

+401
-420
lines changed

iot/api-client/README.md

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,17 @@ Google Cloud IoT Core platform.
44

55
## Quickstart
66

7-
1. Install the gCloud CLI as described in [the Cloud IoT Core documentation](https://cloud.google.com/iot/docs/how-tos/getting-started#set_up_the_google_cloud_sdk_and_gcloud).
8-
2. Create a PubSub topic:
9-
10-
gcloud beta pubsub topics create projects/my-iot-project/topics/device-events
11-
12-
3. Add the special account `[email protected]` with the role `Publisher` to that
13-
PubSub topic from the [Cloud Developer Console](https://console.cloud.google.com)
14-
or by using the helper script in the [/scripts](./scripts) folder.
15-
16-
4. Create a registry:
17-
18-
gcloud beta iot registries create my-registry \
19-
--project=my-iot-project \
20-
--region=us-central1 \
21-
--event-pubsub-topic=projects/my-iot-project/topics/device-events
22-
23-
5. Use the [`generate_keys.sh`](generate_keys.sh) script to generate your signing keys:
7+
1. From the [Google Cloud IoT Core section](https://console.cloud.google.com/iot/)
8+
of the Google Cloud console, create a device registry.
9+
2. Use the [`generate_keys.sh`](generate_keys.sh) script to generate your signing keys:
2410

2511
./generate_keys.sh
2612

27-
6. Create a device.
13+
3. Add a device using the file `rsa_cert.pem`, specifying RS256_X509 and using the
14+
text copy of the public key starting with the ----START---- block of the certificate.
2815

29-
gcloud beta iot devices create my-java-device \
30-
--project=my-iot-project \
31-
--region=us-central1 \
32-
--registry=my-registry \
33-
--public-key path=rsa_cert.pem,type=rs256
16+
cat rsa_cert.pem
3417

35-
7. Connect a sample device using the sample app in the [`mqtt_example`](./mqtt_example) folder.
36-
8. Learn how to manage devices programatically with the sample app in the
37-
`manager` folder.
18+
4. Connect a device using the HTTP or MQTT device samples in the [manager](./manager) folder.
3819

20+
5. Programmattically control device configuration and using the device manager sample in the [manager](./manager) folder.

iot/api-client/manager/README.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,3 +211,56 @@ To publish state messages, run the sample as follows:
211211
gcloud beta pubsub subscriptions pull --auto-ack \
212212
projects/my-iot-project/subscriptions/my-subscription
213213
```
214+
215+
# Cloud IoT Core Java MQTT example
216+
217+
This sample app publishes data to Cloud Pub/Sub using the MQTT bridge provided
218+
as part of Google Cloud IoT Core.
219+
220+
Note that before you can run the sample, you must configure a Google Cloud
221+
PubSub topic for Cloud IoT Core and register a device as described in the
222+
[parent README](../README.md).
223+
224+
## Setup
225+
226+
Run the following command to install the dependencies using Maven:
227+
228+
mvn clean compile
229+
230+
## Running the sample
231+
232+
The following command summarizes the sample usage:
233+
234+
mvn exec:java \
235+
-Dexec.mainClass="com.example.cloud.iot.examples.MqttExample" \
236+
-Dexec.args="-project_id=my-iot-project \
237+
-registry_id=my-registry \
238+
-device_id=my-device \
239+
-private_key_file=rsa_private_pkcs8 \
240+
-algorithm=RS256"
241+
242+
For example, if your project ID is `blue-jet-123`, your service account
243+
credentials are stored in your home folder in creds.json and you have generated
244+
your credentials using the [`generate_keys.sh`](../generate_keys.sh) script
245+
provided in the parent folder, you can run the sample as:
246+
247+
mvn exec:java \
248+
-Dexec.mainClass="com.example.cloud.iot.examples.MqttExample" \
249+
-Dexec.args="-project_id=blue-jet-123 \
250+
-registry_id=my-registry \
251+
-device_id=my-device \
252+
-private_key_file=../rsa_private_pkcs8 \
253+
-algorithm=RS256"
254+
255+
## Reading the messages written by the sample client
256+
257+
1. Create a subscription to your topic.
258+
259+
gcloud beta pubsub subscriptions create \
260+
projects/your-project-id/subscriptions/my-subscription \
261+
--topic device-events
262+
263+
2. Read messages published to the topic
264+
265+
gcloud beta pubsub subscriptions pull --auto-ack \
266+
projects/my-iot-project/subscriptions/my-subscription

iot/api-client/manager/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@
3737
</properties>
3838

3939
<dependencies>
40+
<dependency>
41+
<groupId>org.eclipse.paho</groupId>
42+
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
43+
<version>1.2.0</version>
44+
</dependency>
4045
<dependency>
4146
<groupId>org.json</groupId>
4247
<artifactId>json</artifactId>
Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
-----BEGIN CERTIFICATE-----
2-
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
1818
-----END CERTIFICATE-----
Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
-----BEGIN PRIVATE KEY-----
2-
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDdWhkFaxeyeXKe
3-
2Sa2pfuzIGH5jmiuDq+bETmVRSMRuNL3o1hyxMAH+Pch1h8yXacWLqrwg4gSnLfo
4-
SRIVCbTyjB8miabCZ0IhLHG4Bs+3Yz2Bf4sNiNQU3Z68mkUBMPQxg8tlYJR/xK9w
5-
nQv14jF0lGqqBO3I9Pu6AHN4PpBAnos7PIM8B2mLDFkltvoZx0/Sa9yImk01RlO0
6-
QGhkNS60AXdD8PQZaE94b5L5A1v7PqVUmyqQXQHKO4BaniNOc9zMXg7EklYWSpOR
7-
VK9ExYV7IAo/3G8p41cHim3QuKbxAAEEt0Cd7zm1v9W0PQLSDUcCaOd7DWO/HwGF
8-
F29z82NZAgMBAAECggEBAKMHcfhQqRJ1apteWqoZ1ClZR2/zmFviSypN5HhxhGPQ
9-
Gen0b/ePu9PjZbmRKEcDPUYUNyiP58+1h6pY7y15icE+vM64gY8bWFRwlI0yzxhF
10-
yo4vby4XwgRgOkK06O/4q1IwvMS8/oKgTYsG0EFYSI6RpYH1wWDKNwEGxgUhJ0O/
11-
YxTlFpEObuBg+aILeEemU6+QoULwNgfCqVUEkbSZFy5Z9D66PdRoiLum6FmwICBd
12-
rChr06ACqCxuiFhMb1VoHPinIvJNZeLClUGShi9R/hgUZfZxddpNKDtEjZGFWgNw
13-
dVpDFbpVLsqiV+B2TlfX10u9RnWoVi5r8Iv3gMdpqqUCgYEA82c9rm/fEi7fp03U
14-
Y5C1z1YX/7UP+bbsOEZi6BsnJOSptbnBt0g4Ph0TRIbWsAAjd9psU3rSK73U8kso
15-
6xCRe05RzhXWbnl80TUGQpLFcAlZd7R6eXe9kESGu+sheIXGcRJnzM6CFykerkhV
16-
nGp29t/sQBVggqBm7/o8oJg1cLcCgYEA6M608xHaMr1Xw+hEdYqAnxJ4nLwG5Gja
17-
T5NyeGyuJnPP9ullza/n2mOm6ujznzD3JGLqhixR4TI3h2vQ7oMDtkbytRFmishW
18-
rrW59OM3hohvdd0GMfI4boNCyEBMc1s1855nqHprpje+l3S9HuPUHYI4KXlQzz4o
19-
fqCoWHSonG8CgYEAjYhO2Yu7jnsrGcGr6mlPDszlD49dRrsTCHYFNSn0zQMZm83z
20-
0ntwGM4XUhWF6Llr5llf+/rDEyRDGtCRbn4n2idkcg1Irtx9s7i9dyCZJdiJ6Y1M
21-
Wi1CUQ1HuyWyRL6k8ULekLzT8Fu8t2LgRR+zJUJ3wZusjshuksRTVJ6tFGkCgYBl
22-
VxWNeYfx7ln1/XVPdSroE7JNB8w4QSxG13hM04I7Ws58PL0D/D6A4kAWobDq6vWp
23-
8SUFouVBkgp5+ITKTl2fSuL7zsdEQlD5XEHGR+IzvdBHDh9UPowyDxFS+ipNTLb/
24-
hUS6IhAaGsnsQ/TPLX14Guc3pod2rygRdv3RA3ciIQKBgEhWmdwDjB3c8/7c/vhV
25-
gU+OYziQPHJb7IYrvCxAMym+lM6SVAR62vDSkGBwZdgnr4X1LwO9/qbV+eOR07hv
26-
KhDQ9AX10y1t7FHybZMatvr0l283/BVanXonq7ihzrWjDnZU97N05gIj6Ew4EHy7
27-
EGgOLKa63rYJQK4WLwP4mMEF
2+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCzaWesYabNF5KP
3+
yhMfrzBHvlZajIHLMx7E9hwUxSQRvAvq3IbmEuH1RsfqBTuG5zQsloQlNcNGEXhx
4+
Ov56JywmfzNM5kVmf9ZB5B2N6O2K9NKmO/BcsFR5T6PDQNPAZPzXfT7BpQo++WEh
5+
4S7lzHQUlJy8L2Xzc9m866XoTbvqSyo1kwyl2TOn/1iGJbAoQ7+0jjKZqZmaOx/+
6+
CIlOj3r79+f7qdetwANUvAz6SrKiz5tl/ia9LPiVAw9B2f2W82P4rGJEwpaFONMw
7+
C2kTOb+6nWJLLNNfGS1ULknjYU1tpBrqff/oyeULAIDT2Cvb/lTeONX9lpHGhsju
8+
129YE01bAgMBAAECggEAdA0CWqbv1kohK5FyvVP8zut3wCqS6nWuuYjYsTa0FiSl
9+
MM5lE/2y241lUyL/VkvHm+/gmpEkNvamCdg3M5yTGnO9I0jwK1UVqpl75Id+4Btt
10+
BspOuCX2/mFddLdCQXkRc/I33dp7vjBhfCDEzTBrBcT7fV7Le6a8eU+Uiad+nhXa
11+
9kIZxQdavaFtHUW8ltuJHfG0BCsQ7saQlmTTV7JS3gPd3VgftDZslM+4a1ac1Uoc
12+
+ADDTURCdkIiari168bWBE060T5O3FLFo+H4W3cTuylUQwPEmOOVqj3MP1oRM8CV
13+
IXARL2KRi6TT4oXcm2ntEZxtiN3Oo9icqV0/FlzhAQKBgQDkAXfHHpAr23DxVEpP
14+
uSIYM7ASFETC+w7IX2qcjAQX1uTUG/2sRuzpaoZe9VoaUZNdnXgQXOBhNkQlgHgm
15+
8LQhN+CFlQZAbqvLvj46UjNwBxwISQW4Qd904VuJuC4ew+OsA8ZxWe/BrbDU8zHM
16+
Vu1eSu89BrQB15CNQmkDkhIACwKBgQDJcI+zcPV0Lcf5JnA2LrttqosFMJ0XAlvV
17+
+KLLNG13oGuPWW2sROvtpHiPFO/FzX9hR3NSocNjwj0Y7QlULr7KfPK1nLHBa1Os
18+
DFnKVLb9UUIqDsMCAzupY3zc4fh7Jw9FfIveLYf0nDjSuTeyp8Mt93m4bmLhFgBs
19+
dKs9546p8QKBgCE+AYubbiOmy9Gzm14CPPFQX+RS5i+TUPVvy+hlFZewMg6mwhZj
20+
BNmHOW4Q0YEy0Yx9j+q6z8/8jHT3RQ1QXMLXFboEHzQ3rn53DzWLlIpJzxF6LAZQ
21+
PFcbIDB1FOxRXRlQN5eBKE6Rl02E44bKSbNMs5KvLoFyP1YJD6yAmHU/AoGAe6dz
22+
Lu26XvTzeogT/c62E13LNQZgiA1UnoagOCkYwYRiQn7dChDM2vZJY1uwzDWXafnY
23+
WvMd5BEKPFDVly2SxO3qd32WyGq/1C9ItyFFqz7EZNjm8EdXymVd8qFsTPzvLPKF
24+
UX+Vo5x6bTBxdmPxNjhiKcrpO86rt+fubnPEaaECgYBn2dFS/G7kUs0ybH2JZTp3
25+
Y68lnY3mzfQCX4J83I81aAXU+IhHK7n1hegVGP47dVZ2iizaib+ubX0JCaa0pwHe
26+
K/geI+vcK7WNa3LKXL70OmZO0ToscdUC5jVKFCohmDo9+oecOndQ8OkjLkZMiBDG
27+
oOwoxIvf1KkQ7VyFYgnOBA==
2828
-----END PRIVATE KEY-----
Binary file not shown.

0 commit comments

Comments
 (0)