From 167667b68268d3aa94115a709b29fabcc774b743 Mon Sep 17 00:00:00 2001 From: Gus Class Date: Tue, 12 Dec 2017 14:51:13 -0800 Subject: [PATCH 1/2] Adds tests for HTTP device sample. --- iot/api-client/http_example/README.md | 75 ------------ iot/api-client/http_example/pom.xml | 62 ---------- iot/api-client/manager/README.md | 77 ++++++++++++ iot/api-client/manager/pom.xml | 15 +++ iot/api-client/manager/resources/README.md | 4 + .../manager/resources/ec_public.pem | 4 +- iot/api-client/manager/resources/rsa_cert.pem | 32 ++--- .../manager/resources/rsa_private.pem | 28 +++++ .../manager/resources/rsa_private_pkcs8 | Bin 0 -> 1218 bytes .../cloud/iot/examples/HttpExample.java | 45 ++++++- .../iot/examples/HttpExampleOptions.java | 2 +- .../example/cloud/iot/examples/ManagerIT.java | 110 ++++++++++++++++++ 12 files changed, 296 insertions(+), 158 deletions(-) delete mode 100644 iot/api-client/http_example/README.md delete mode 100644 iot/api-client/http_example/pom.xml create mode 100644 iot/api-client/manager/resources/README.md create mode 100644 iot/api-client/manager/resources/rsa_private.pem create mode 100644 iot/api-client/manager/resources/rsa_private_pkcs8 rename iot/api-client/{http_example/src/main/java/com/google => manager/src/main/java/com/example}/cloud/iot/examples/HttpExample.java (82%) rename iot/api-client/{http_example/src/main/java/com/google => manager/src/main/java/com/example}/cloud/iot/examples/HttpExampleOptions.java (99%) diff --git a/iot/api-client/http_example/README.md b/iot/api-client/http_example/README.md deleted file mode 100644 index 825640f7d58..00000000000 --- a/iot/api-client/http_example/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# Cloud IoT Core Java HTTP example - -This sample app publishes data to Cloud Pub/Sub using the HTTP bridge provided -as part of Google Cloud IoT Core. - -Note that before you can run the sample, you must configure a Google Cloud -PubSub topic for Cloud IoT Core and register a device as described in the -[parent README](../README.md). - -## Setup - -Run the following command to install the dependencies using Maven: - - mvn clean compile - -## Running the sample - -The following command summarizes the sample usage: - -``` - mvn exec:java \ - -Dexec.mainClass="com.google.cloud.iot.examples.HttpExample" \ - -Dexec.args="-project_id= \ - -registry_id= \ - -device_id= \ - -private_key_file= \ - -message_type= \ - -algorithm=" -``` - -For example, if your project ID is `blue-jet-123`, your service account -credentials are stored in your home folder in creds.json and you have generated -your credentials using the [`generate_keys.sh`](../generate_keys.sh) script -provided in the parent folder, you can run the sample as: - -``` - mvn exec:java \ - -Dexec.mainClass="com.google.cloud.iot.examples.HttpExample" \ - -Dexec.args="-project_id=blue-jet-123 \ - -registry_id=my-registry \ - -device_id=my-java-device \ - -private_key_file=../rsa_private_pkcs8 \ - -algorithm=RS256" -``` - -To publish state messages, run the sample as follows: - -``` - mvn exec:java \ - -Dexec.mainClass="com.google.cloud.iot.examples.HttpExample" \ - -Dexec.args="-project_id=blue-jet-123 \ - -registry_id=my-registry \ - -device_id=my-java-device \ - -private_key_file=../rsa_private_pkcs8 \ - -message_type=state \ - -algorithm=RS256" -``` - - -## Reading the messages written by the sample client - -1. Create a subscription to your topic. - -``` - gcloud beta pubsub subscriptions create \ - projects/your-project-id/subscriptions/my-subscription \ - --topic device-events -``` - -2. Read messages published to the topic - -``` - gcloud beta pubsub subscriptions pull --auto-ack \ - projects/my-iot-project/subscriptions/my-subscription -``` diff --git a/iot/api-client/http_example/pom.xml b/iot/api-client/http_example/pom.xml deleted file mode 100644 index a60c66ba065..00000000000 --- a/iot/api-client/http_example/pom.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - 4.0.0 - com.google.cloud.iot.examples - cloudiot-http-example - jar - 1.0 - cloudiot-http-example - http://maven.apache.org - - - 1.7 - 1.7 - - - - - doc-samples - com.google.cloud - 1.0.0 - ../../../ - - - - - io.jsonwebtoken - jjwt - 0.7.0 - - - joda-time - joda-time - 2.1 - - - commons-cli - commons-cli - 1.3 - - - org.json - json - 20090211 - - - - diff --git a/iot/api-client/manager/README.md b/iot/api-client/manager/README.md index 70fa6a6984c..1935be2cf4e 100644 --- a/iot/api-client/manager/README.md +++ b/iot/api-client/manager/README.md @@ -134,3 +134,80 @@ Patch a device with RSA: -project_id=blue-jet-123 -pubsub_topic=hello-java \ -registry_name=hello-java -rsa_certificate_file ../rsa_cert.pem \ -device_id="java-device-0" -command=patch-device-rsa + + +# Cloud IoT Core Java HTTP example + +This sample app publishes data to Cloud Pub/Sub using the HTTP bridge provided +as part of Google Cloud IoT Core. + +Note that before you can run the sample, you must configure a Google Cloud +PubSub topic for Cloud IoT Core and register a device as described in the +[parent README](../README.md). + +## Setup + +Run the following command to install the dependencies using Maven: + + mvn clean compile + +## Running the sample + +The following command summarizes the sample usage: + +``` + mvn exec:java \ + -Dexec.mainClass="com.example.cloud.iot.examples.HttpExample" \ + -Dexec.args="-project_id= \ + -registry_id= \ + -device_id= \ + -private_key_file= \ + -message_type= \ + -algorithm=" +``` + +For example, if your project ID is `blue-jet-123`, your service account +credentials are stored in your home folder in creds.json and you have generated +your credentials using the [`generate_keys.sh`](../generate_keys.sh) script +provided in the parent folder, you can run the sample as: + +``` + mvn exec:java \ + -Dexec.mainClass="com.example.cloud.iot.examples.HttpExample" \ + -Dexec.args="-project_id=blue-jet-123 \ + -registry_id=my-registry \ + -device_id=my-java-device \ + -private_key_file=../rsa_private_pkcs8 \ + -algorithm=RS256" +``` + +To publish state messages, run the sample as follows: + +``` + mvn exec:java \ + -Dexec.mainClass="com.example.cloud.iot.examples.HttpExample" \ + -Dexec.args="-project_id=blue-jet-123 \ + -registry_id=my-registry \ + -device_id=my-java-device \ + -private_key_file=../rsa_private_pkcs8 \ + -message_type=state \ + -algorithm=RS256" +``` + + +## Reading the messages written by the sample client + +1. Create a subscription to your topic. + +``` + gcloud beta pubsub subscriptions create \ + projects/your-project-id/subscriptions/my-subscription \ + --topic device-events +``` + +2. Read messages published to the topic + +``` + gcloud beta pubsub subscriptions pull --auto-ack \ + projects/my-iot-project/subscriptions/my-subscription +``` diff --git a/iot/api-client/manager/pom.xml b/iot/api-client/manager/pom.xml index 59f142d84e3..df8573e75ad 100644 --- a/iot/api-client/manager/pom.xml +++ b/iot/api-client/manager/pom.xml @@ -37,6 +37,21 @@ + + org.json + json + 20090211 + + + io.jsonwebtoken + jjwt + 0.7.0 + + + joda-time + joda-time + 2.1 + com.google.apis google-api-services-cloudiot diff --git a/iot/api-client/manager/resources/README.md b/iot/api-client/manager/resources/README.md new file mode 100644 index 00000000000..ba272ccaf74 --- /dev/null +++ b/iot/api-client/manager/resources/README.md @@ -0,0 +1,4 @@ +# Test public certificate files + +The public certificates in this folder are only provided for testing and should +not be used for registering your devices. diff --git a/iot/api-client/manager/resources/ec_public.pem b/iot/api-client/manager/resources/ec_public.pem index d14a5b6fc3f..74b7a7240f8 100644 --- a/iot/api-client/manager/resources/ec_public.pem +++ b/iot/api-client/manager/resources/ec_public.pem @@ -1,4 +1,4 @@ -----BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECfwA4OrF9Pcr1W5mXUa+Dx8hpPYd -+pQ5153zNtSSaeEnA/4hrY2AKxUHmKIPJXYRkZrxTxsFElkkpLcoi/CUNQ== +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJ/zj75PhGtoayWD9pm/IbXRXi9ai +RQDMFQ87sOOQIWDTxnsHFplqb8cDCtO1h5QsutcAVTPZL0CZiqIg5j7b1w== -----END PUBLIC KEY----- diff --git a/iot/api-client/manager/resources/rsa_cert.pem b/iot/api-client/manager/resources/rsa_cert.pem index ccaf7eded0a..53cdf27f607 100644 --- a/iot/api-client/manager/resources/rsa_cert.pem +++ b/iot/api-client/manager/resources/rsa_cert.pem @@ -1,18 +1,18 @@ -----BEGIN CERTIFICATE----- -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 -----END CERTIFICATE----- diff --git a/iot/api-client/manager/resources/rsa_private.pem b/iot/api-client/manager/resources/rsa_private.pem new file mode 100644 index 00000000000..bcab9fb0092 --- /dev/null +++ b/iot/api-client/manager/resources/rsa_private.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDdWhkFaxeyeXKe +2Sa2pfuzIGH5jmiuDq+bETmVRSMRuNL3o1hyxMAH+Pch1h8yXacWLqrwg4gSnLfo +SRIVCbTyjB8miabCZ0IhLHG4Bs+3Yz2Bf4sNiNQU3Z68mkUBMPQxg8tlYJR/xK9w +nQv14jF0lGqqBO3I9Pu6AHN4PpBAnos7PIM8B2mLDFkltvoZx0/Sa9yImk01RlO0 +QGhkNS60AXdD8PQZaE94b5L5A1v7PqVUmyqQXQHKO4BaniNOc9zMXg7EklYWSpOR +VK9ExYV7IAo/3G8p41cHim3QuKbxAAEEt0Cd7zm1v9W0PQLSDUcCaOd7DWO/HwGF +F29z82NZAgMBAAECggEBAKMHcfhQqRJ1apteWqoZ1ClZR2/zmFviSypN5HhxhGPQ +Gen0b/ePu9PjZbmRKEcDPUYUNyiP58+1h6pY7y15icE+vM64gY8bWFRwlI0yzxhF +yo4vby4XwgRgOkK06O/4q1IwvMS8/oKgTYsG0EFYSI6RpYH1wWDKNwEGxgUhJ0O/ +YxTlFpEObuBg+aILeEemU6+QoULwNgfCqVUEkbSZFy5Z9D66PdRoiLum6FmwICBd +rChr06ACqCxuiFhMb1VoHPinIvJNZeLClUGShi9R/hgUZfZxddpNKDtEjZGFWgNw +dVpDFbpVLsqiV+B2TlfX10u9RnWoVi5r8Iv3gMdpqqUCgYEA82c9rm/fEi7fp03U +Y5C1z1YX/7UP+bbsOEZi6BsnJOSptbnBt0g4Ph0TRIbWsAAjd9psU3rSK73U8kso +6xCRe05RzhXWbnl80TUGQpLFcAlZd7R6eXe9kESGu+sheIXGcRJnzM6CFykerkhV +nGp29t/sQBVggqBm7/o8oJg1cLcCgYEA6M608xHaMr1Xw+hEdYqAnxJ4nLwG5Gja +T5NyeGyuJnPP9ullza/n2mOm6ujznzD3JGLqhixR4TI3h2vQ7oMDtkbytRFmishW +rrW59OM3hohvdd0GMfI4boNCyEBMc1s1855nqHprpje+l3S9HuPUHYI4KXlQzz4o +fqCoWHSonG8CgYEAjYhO2Yu7jnsrGcGr6mlPDszlD49dRrsTCHYFNSn0zQMZm83z +0ntwGM4XUhWF6Llr5llf+/rDEyRDGtCRbn4n2idkcg1Irtx9s7i9dyCZJdiJ6Y1M +Wi1CUQ1HuyWyRL6k8ULekLzT8Fu8t2LgRR+zJUJ3wZusjshuksRTVJ6tFGkCgYBl +VxWNeYfx7ln1/XVPdSroE7JNB8w4QSxG13hM04I7Ws58PL0D/D6A4kAWobDq6vWp +8SUFouVBkgp5+ITKTl2fSuL7zsdEQlD5XEHGR+IzvdBHDh9UPowyDxFS+ipNTLb/ +hUS6IhAaGsnsQ/TPLX14Guc3pod2rygRdv3RA3ciIQKBgEhWmdwDjB3c8/7c/vhV +gU+OYziQPHJb7IYrvCxAMym+lM6SVAR62vDSkGBwZdgnr4X1LwO9/qbV+eOR07hv +KhDQ9AX10y1t7FHybZMatvr0l283/BVanXonq7ihzrWjDnZU97N05gIj6Ew4EHy7 +EGgOLKa63rYJQK4WLwP4mMEF +-----END PRIVATE KEY----- diff --git a/iot/api-client/manager/resources/rsa_private_pkcs8 b/iot/api-client/manager/resources/rsa_private_pkcs8 new file mode 100644 index 0000000000000000000000000000000000000000..c197093331958fc6a30f474ddb17204c7b5a0643 GIT binary patch literal 1218 zcmV;z1U>sOf&{(-0RS)!1_>&LNQUrs4#*Aqyhl|0)hbn0Nq*{1#1_w zd2*iFCbp&fvmjylj%cn9ubUA$l|>^FxYGBdSaQU`2l)3P)*mumrxq@%@PmjFoVVyn z5)}!w@{AuQiKfD5LLn@1xCYO+V?BX?iw%g>6y2V@nneLH^f80WWnh$l#IJCj3-#hL zbd+kU1ntQ5`?>&gcs`Ioo{Kv?gFFXmiws#Mw)z>zPtt4Lh?-3`MpLvvXk;}mv;lWR z@bnpIPk3*V`2$<~KBZKfDv(_P$~%Bso+D0k+{|7M#FADPN|TXPuSCU#dmsuw+;1u4 zR|kr1(72}Y009KIK%MV7wZGN0Jp$4VM*?W)dktg19|46IZ*%iwSpowA009Dm0RaG` z2XXjNsSGW^+kGs?3Wx0_kM*}@Z6gMc3 z=g+l=s#xzWd5OV3yw13Rj~iH2aFmTQ&lp9@jxTR67s3Q!IzqJQ@A#`yFucUP{(_)Q ziw4j^SV)eMrGfRqV9GZE2F3*;Cqutu6y+9?4sPIJ`JxMWN2XJ+kfB2GHV49~RRoc= znHMfu^gg;h)M$virs!F)ARt|=C~MQ80;nu*h*(T-RcIXery}xAW#Yn>L6U|qQT`Yd zW%hA(+D#}sM2(S!S_5!(T0<4ORW8b+SKxL|SJ&4|y+(DYRxWGsi}!%XX{x0Hfq?+? zXFaZO-x4n0r%lvjkhRZN7yq>n`L^shMq=n2CnV&lwYkB!NH{(n6GVpAumB@>+H6yL z(ks2x@=GY|5RrRMQO*_CZh3ssH3mYG#c&B(ceHwWcfF8AhP&$_c!kDs5@*cLf)^_8P@f}m#a`aGbRHE_2Afq?+%&b0Fp+A_UY!{|hHih!RIc$~Zj5WWUEkaQZN4q7mM82f)Lf(+P z)9_oow_@N$AG0Mwcfp&ij>vA3#8XtBtrTejfq-RK6^(g^@$Omm{dG@uD(DlkO$W?4 zK`chscudoRJ6g_sJiP<_K7ist7NM}}>h-DdB?Y48L6Qo2_=L(%U7t$g`_9KiLQwf! zLB>boGriD94j)uLj4}@qQu-=QOt$}pM7kmn8XC#$L-fxreRvw@H>QVnuP70A{m}z= zA|V2SfJj!E+yjgq-1Gk2{`ggaPmW_akUVl*?1n46EI>0UzLd_AR0Mk3@Y0ZAaAnvh zuZ8t51HJyH)%oL*)3|Rc5YY4m_0uhF>{0S Date: Fri, 15 Dec 2017 11:03:53 -0800 Subject: [PATCH 2/2] Small change to instructions for README. --- iot/api-client/manager/resources/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/iot/api-client/manager/resources/README.md b/iot/api-client/manager/resources/README.md index ba272ccaf74..27fbefe8215 100644 --- a/iot/api-client/manager/resources/README.md +++ b/iot/api-client/manager/resources/README.md @@ -1,4 +1,5 @@ # Test public certificate files -The public certificates in this folder are only provided for testing and should -not be used for registering your devices. +The certificates in this folder are only provided for testing and should not be +used for registering your devices. Instructions and a shell script are in the +parent folder for getting started.