Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
6042a8d
remove deprecated samples
sbSteveK Aug 15, 2025
e4a79f5
remove more samples and begin updating ci
sbSteveK Aug 15, 2025
fce9ad9
update mac ci
sbSteveK Aug 15, 2025
21361ef
update linux ci
sbSteveK Aug 15, 2025
486926b
more sample ci cleanup
sbSteveK Aug 15, 2025
52ed9e2
more sample culling
sbSteveK Aug 15, 2025
e6d375d
remove more mqtt3 samples
sbSteveK Aug 15, 2025
72bf681
remove unused roles
sbSteveK Aug 15, 2025
337355a
remove mqtt3 samples from codebuild smoketest
sbSteveK Aug 15, 2025
5b4bdf8
point CD and other areas to mqtt5 pubsub. Reinstate basic_discovery
sbSteveK Aug 18, 2025
8d380b8
remove --is_ci args from runner scripts
sbSteveK Aug 18, 2025
0a302fc
remove ci from mqtt5 pubsub
sbSteveK Aug 18, 2025
5c23074
forgot utils
sbSteveK Aug 18, 2025
ff8a813
restore old basic_discovery.py
sbSteveK Aug 18, 2025
029e88d
restore basic_discovery.md
sbSteveK Aug 18, 2025
3cfbabf
simplify arg parsing for pubsub
sbSteveK Aug 18, 2025
7561ef6
update custom auth sample
sbSteveK Aug 18, 2025
d5f5aa3
remove duplicate use_websockets
sbSteveK Aug 18, 2025
c8b1ed8
missed comma
sbSteveK Aug 18, 2025
df3c19d
comma again
sbSteveK Aug 18, 2025
2bb49a1
rename args
sbSteveK Aug 18, 2025
4c54985
input_custom_authorizer_name
sbSteveK Aug 18, 2025
b696d7e
is_ci remove
sbSteveK Aug 18, 2025
baa0c37
clientID
sbSteveK Aug 18, 2025
228e40a
use websockets is a toggle
sbSteveK Aug 18, 2025
3b69654
update samples
sbSteveK Aug 18, 2025
81d83dc
remove is_ci
sbSteveK Aug 18, 2025
85bd350
remove command line utils
sbSteveK Aug 18, 2025
45b4fcc
update fleet_provisioning test
sbSteveK Aug 19, 2025
0750ba1
remove utils dependency from remaining service tests
sbSteveK Aug 19, 2025
ac73022
remove utils from basic_discovery
sbSteveK Aug 19, 2025
bb3b98a
remove command_line_utils.py
sbSteveK Aug 19, 2025
5805cd7
samples-wide factoring start
sbSteveK Aug 19, 2025
f75b65e
simplify parser
sbSteveK Aug 19, 2025
13724e8
further formatting
sbSteveK Aug 19, 2025
391912e
Merge branch 'main' into sample-revamp
sbSteveK Aug 27, 2025
575774c
update README and FAQ
sbSteveK Aug 27, 2025
edf254e
PR fixes
sbSteveK Aug 27, 2025
353908a
try removing ci_run_greengrass_discovery_cfg to check if it's running
sbSteveK Aug 27, 2025
1d0fa5b
restore ci_run_greengrass_ipc_cfg
sbSteveK Aug 27, 2025
ea9e2d9
be holistic and also remove mqtt5 samples from ci
sbSteveK Aug 28, 2025
cb04f25
remove Device Advisor from CI
sbSteveK Aug 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
update fleet_provisioning test
  • Loading branch information
sbSteveK committed Aug 19, 2025
commit 45b4fcc1300f6bdcb70a3e469a7da8d6dfa85934
95 changes: 67 additions & 28 deletions servicetests/tests/FleetProvisioning/fleet_provisioning.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import time
import traceback
import json
from utils.command_line_utils import CommandLineUtils
# from utils.command_line_utils import CommandLineUtils

# - Overview -
# This sample uses the AWS IoT Fleet Provisioning to provision device using either the keys
Expand All @@ -28,7 +28,46 @@
# cmdData is the arguments/input from the command line placed into a single struct for
# use in this sample. This handles all of the command line parsing, validating, etc.
# See the Utils/CommandLineUtils for more information.
cmdData = CommandLineUtils.parse_sample_input_fleet_provisioning()
# cmdData = CommandLineUtils.parse_sample_input_fleet_provisioning()
# --------------------------------- ARGUMENT PARSING -----------------------------------------
import argparse, uuid

def parse_sample_input():
parser = argparse.ArgumentParser(
description="MQTT5 pub/sub sample (mTLS).",
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)

# Connection / TLS
parser.add_argument("--endpoint", required=True, dest="input_endpoint", help="IoT endpoint hostname")
parser.add_argument("--port", type=int, default=8883, dest="input_port", help="Port (8883 mTLS, 443 ALPN)")
parser.add_argument("--cert", required=True, dest="input_cert",
help="Path to the certificate file to use during mTLS connection establishment")
parser.add_argument("--key", required=True, dest="input_key",
help="Path to the private key file to use during mTLS connection establishment")
parser.add_argument("--ca_file", dest="input_ca", help="Path to optional CA bundle (PEM)")

# Proxy (optional)
parser.add_argument("--proxy-host", dest="input_proxy_host", help="HTTP proxy host")
parser.add_argument("--proxy-port", type=int, default=0, dest="input_proxy_port", help="HTTP proxy port")

# Misc
parser.add_argument("--client-id", dest="input_clientId",
default=f"test-{uuid.uuid4().hex[:8]}", help="Client ID")
parser.add_argument("--mqtt_version", type=int, default=0, dest="input_mqtt_version", help="MQTT Version")
parser.add_argument("--csr", dest="input_csr_path", help="Path to CSR in Pem format (optional).")
parser.add_argument("--template_name", dest="input_template_name", help="The name of your provisioning template.")
parser.add_argument("--template_parameters", dest="input_template_parameters", help="Template parameters json.")

return parser.parse_args()

args = parse_sample_input()

# --------------------------------- ARGUMENT PARSING END -----------------------------------------

# [--csr <path>]
# [--template_name <str>]
# [--template_parameters <json>]

# MQTT5 specific
mqtt5_client = None
Expand Down Expand Up @@ -63,7 +102,7 @@ def exit(msg_or_exception):
if not locked_data.disconnect_called:
print("Disconnecting...")
locked_data.disconnect_called = True
if cmdData.input_mqtt_version == 5:
if args.input_mqtt_version == 5:
mqtt5_client.stop()
else:
future = mqtt_connection.disconnect()
Expand Down Expand Up @@ -234,27 +273,27 @@ def on_lifecycle_stopped(lifecycle_stopped_data: mqtt5.LifecycleStoppedData):
if __name__ == '__main__':
# Create the proxy options if the data is present in cmdData
proxy_options = None
if cmdData.input_proxy_host is not None and cmdData.input_proxy_port != 0:
if args.input_proxy_host is not None and args.input_proxy_port != 0:
proxy_options = http.HttpProxyOptions(
host_name=cmdData.input_proxy_host,
port=cmdData.input_proxy_port)
host_name=args.input_proxy_host,
port=args.input_proxy_port)

if cmdData.input_mqtt_version == 5:
if args.input_mqtt_version == 5:
mqtt_qos = mqtt5.QoS.AT_LEAST_ONCE
# Create a mqtt5 connection from the command line data
mqtt5_client = mqtt5_client_builder.mtls_from_path(
endpoint=cmdData.input_endpoint,
port=cmdData.input_port,
cert_filepath=cmdData.input_cert,
pri_key_filepath=cmdData.input_key,
ca_filepath=cmdData.input_ca,
client_id=cmdData.input_clientId,
endpoint=args.input_endpoint,
port=args.input_port,
cert_filepath=args.input_cert,
pri_key_filepath=args.input_key,
ca_filepath=args.input_ca,
client_id=args.input_clientId,
clean_session=False,
keep_alive_secs=30,
http_proxy_options=proxy_options,
on_lifecycle_connection_success=on_lifecycle_connection_success,
on_lifecycle_stopped=on_lifecycle_stopped)
print(f"Connecting to {cmdData.input_endpoint} with client ID '{cmdData.input_clientId}' with MQTT5...")
print(f"Connecting to {args.input_endpoint} with client ID '{args.input_clientId}' with MQTT5...")

mqtt5_client.start()

Expand All @@ -267,22 +306,22 @@ def on_lifecycle_stopped(lifecycle_stopped_data: mqtt5.LifecycleStoppedData):
# fails or succeeds.
future_connection_success.result()

elif cmdData.input_mqtt_version == 3:
elif args.input_mqtt_version == 3:
mqtt_qos = mqtt.QoS.AT_LEAST_ONCE
# Create a MQTT connection from the command line data
mqtt_connection = mqtt_connection_builder.mtls_from_path(
endpoint=cmdData.input_endpoint,
port=cmdData.input_port,
cert_filepath=cmdData.input_cert,
pri_key_filepath=cmdData.input_key,
ca_filepath=cmdData.input_ca,
endpoint=args.input_endpoint,
port=args.input_port,
cert_filepath=args.input_cert,
pri_key_filepath=args.input_key,
ca_filepath=args.input_ca,
on_connection_interrupted=on_connection_interrupted,
on_connection_resumed=on_connection_resumed,
client_id=cmdData.input_clientId,
client_id=args.input_clientId,
clean_session=False,
keep_alive_secs=30,
http_proxy_options=proxy_options)
print(f"Connecting to {cmdData.input_endpoint} with client ID '{cmdData.input_clientId}' with MQTT5...")
print(f"Connecting to {args.input_endpoint} with client ID '{args.input_clientId}' with MQTT5...")

connected_future = mqtt_connection.connect()

Expand All @@ -306,7 +345,7 @@ def on_lifecycle_stopped(lifecycle_stopped_data: mqtt5.LifecycleStoppedData):
# to succeed before publishing the corresponding "request".

# Keys workflow if csr is not provided
if cmdData.input_csr_path is None:
if args.input_csr_path is None:
createkeysandcertificate_subscription_request = iotidentity.CreateKeysAndCertificateSubscriptionRequest()

createkeysandcertificate_subscribed_accepted_future, _ = identity_client.subscribe_to_create_keys_and_certificate_accepted(
Expand Down Expand Up @@ -344,7 +383,7 @@ def on_lifecycle_stopped(lifecycle_stopped_data: mqtt5.LifecycleStoppedData):
createcertificatefromcsr_subscribed_rejected_future.result()

registerthing_subscription_request = iotidentity.RegisterThingSubscriptionRequest(
template_name=cmdData.input_template_name)
template_name=args.input_template_name)

registerthing_subscribed_accepted_future, _ = identity_client.subscribe_to_register_thing_accepted(
request=registerthing_subscription_request,
Expand All @@ -361,9 +400,9 @@ def on_lifecycle_stopped(lifecycle_stopped_data: mqtt5.LifecycleStoppedData):
# Wait for subscription to succeed
registerthing_subscribed_rejected_future.result()

fleet_template_name = cmdData.input_template_name
fleet_template_parameters = cmdData.input_template_parameters
if cmdData.input_csr_path is None:
fleet_template_name = args.input_template_name
fleet_template_parameters = args.input_template_parameters
if args.input_csr_path is None:
publish_future = identity_client.publish_create_keys_and_certificate(
request=iotidentity.CreateKeysAndCertificateRequest(), qos=mqtt_qos)
publish_future.add_done_callback(on_publish_create_keys_and_certificate)
Expand All @@ -378,7 +417,7 @@ def on_lifecycle_stopped(lifecycle_stopped_data: mqtt5.LifecycleStoppedData):
certificate_ownership_token=createKeysAndCertificateResponse.certificate_ownership_token,
parameters=json.loads(fleet_template_parameters))
else:
csrPath = open(cmdData.input_csr_path, 'r').read()
csrPath = open(args.input_csr_path, 'r').read()
publish_future = identity_client.publish_create_certificate_from_csr(
request=iotidentity.CreateCertificateFromCsrRequest(certificate_signing_request=csrPath),
qos=mqtt_qos)
Expand Down
Loading