IoT Data

Implementation details for API iot-data

Coverage Overview

IoT Data is supported by LocalStack only in the pro image.

AvailabilityTesting*
OperationImplementedImageInternal Test SuiteExternal Test SuiteTerraform ValidatedAWS ValidatedSnapshot TestedDetails
DeleteThingShadow✔️pro✔️✔️✔️✔️Show Tests
GetRetainedMessage
GetThingShadow✔️pro✔️✔️✔️✔️Show Tests
ListNamedShadowsForThing✔️pro
ListRetainedMessages
Publish✔️pro✔️✔️✔️✔️Show Tests
UpdateThingShadow✔️pro✔️✔️✔️✔️Show Tests

Terminology

  • Internal Test Suite: tested by LocalStack's internal integration test suite
  • External Test Suite: covered by an external integration test suite, that runs against LocalStack
  • Terraform Validated: operation tested with Terraform
  • AWS Validated: the integration test that includes this operation call was validated against AWS
  • Snapshot Tested: the operation is part of a snapshot parity test, which verifies the responses by LocalStack and AWS are the same

Testing Details

This section gives an overview about the internal integration test suite and the specific test cases that recorded the API call.

How to read the test details?

For each operation we put up a list of the related integration test cases.
Those operation calls have been recorded during the execution of the outlined test cases. Some calls might be internal, i.e., they are not explicitly called in the test, but are triggered implicitly by the LocalStack framework.

  • Parameters: The tests are ordered by the parameters used, which are highlighted in bold.
  • Test Details: LocalStack Community or LocalStack Pro indicates where the test originates. For each test you see:
    • test name
    • status code returned (which is the expected one for the test case)
    • information about validation:
      • AWS validated the test is validated against AWS, meaning it run successfully against real AWS as well
      • Snapshot Tested this is a snapshot parity test, meaning the responses are validated against AWS


DeleteThingShadow

Parameters: shadowName, thingName
  • LocalStack Pro
    • test_delete_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_delete_device_shadow[named] HTTP Status Code: 200
    • test_delete_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_delete_shadow[named] HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_delete_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_delete_device_shadow[named] HTTP Status Code: 404 (ResourceNotFoundException)
    • test_delete_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_delete_shadow[named] HTTP Status Code: 404 (ResourceNotFoundException) AWS validated Snapshot Tested
Parameters: thingName
  • LocalStack Pro
    • test_delete_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_delete_device_shadow[classic] HTTP Status Code: 200
    • test_delete_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_delete_shadow[classic] HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_delete_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_delete_device_shadow[classic] HTTP Status Code: 404 (ResourceNotFoundException)
    • test_delete_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_delete_shadow[classic] HTTP Status Code: 404 (ResourceNotFoundException) AWS validated Snapshot Tested

GetThingShadow

Parameters: shadowName, thingName
  • LocalStack Pro
    • test_delete_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_delete_device_shadow[named] HTTP Status Code: 200
    • test_get_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_get_device_shadow[named] HTTP Status Code: 200
    • test_get_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_get_device_shadow[named] HTTP Status Code: 200
    • test_update_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_update_device_shadow[named] HTTP Status Code: 200
    • test_delete_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_delete_shadow[named] HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_thing_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow[named] HTTP Status Code: 200 AWS validated
    • test_thing_shadow_update_reported_null_value LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow_update_reported_null_value HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_get_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_get_device_shadow[named] HTTP Status Code: 404 (ResourceNotFoundException)
    • test_update_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_update_device_shadow[named] HTTP Status Code: 404 (ResourceNotFoundException)
Parameters: thingName
  • LocalStack Pro
    • test_delete_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_delete_device_shadow[classic] HTTP Status Code: 200
    • test_get_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_get_device_shadow[classic] HTTP Status Code: 200
    • test_get_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_get_device_shadow[classic] HTTP Status Code: 200
    • test_update_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_update_device_shadow[classic] HTTP Status Code: 200
    • test_delete_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_delete_shadow[classic] HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_shadow_after_thing_deletion LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_shadow_after_thing_deletion HTTP Status Code: 200 AWS validated
    • test_thing_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow[classic] HTTP Status Code: 200 AWS validated
    • test_thing_shadow_metadata LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow_metadata HTTP Status Code: 200 AWS validated
    • test_get_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_get_device_shadow[classic] HTTP Status Code: 404 (ResourceNotFoundException)
    • test_update_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_update_device_shadow[classic] HTTP Status Code: 404 (ResourceNotFoundException)

Publish

Parameters: payload, qos, topic
  • LocalStack Pro
    • test_publish_to_mqtt_topic LocalStack Pro: tests/aws/services/iot/test_iot.py::TestMQTT::test_publish_to_mqtt_topic HTTP Status Code: 200
    • test_topic_rule_triggers_dynamodb_v2_put_item LocalStack Pro: tests/aws/services/iot/test_iot.py::TestTopicRules::test_topic_rule_triggers_dynamodb_v2_put_item HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_topic_rule_triggers_firehose_put_record LocalStack Pro: tests/aws/services/iot/test_iot.py::TestTopicRules::test_topic_rule_triggers_firehose_put_record HTTP Status Code: 200 AWS validated
    • test_topic_rule_triggers_kinesis_put_record LocalStack Pro: tests/aws/services/iot/test_iot.py::TestTopicRules::test_topic_rule_triggers_kinesis_put_record HTTP Status Code: 200 AWS validated
    • test_topic_rule_triggers_lambda LocalStack Pro: tests/aws/services/iot/test_iot.py::TestTopicRules::test_topic_rule_triggers_lambda HTTP Status Code: 200
    • test_topic_rule_triggers_sqs_message LocalStack Pro: tests/aws/services/iot/test_iot.py::TestTopicRules::test_topic_rule_triggers_sqs_message HTTP Status Code: 200 AWS validated
Parameters: payload, topic
  • LocalStack Pro
    • test_connect_mqtt_via_aws_iot_sdk[mqtt] LocalStack Pro: tests/aws/services/iot/test_iot.py::TestMQTT::test_connect_mqtt_via_aws_iot_sdk[mqtt] HTTP Status Code: 200 AWS validated
    • test_connect_mqtt_via_aws_iot_sdk[websockets] LocalStack Pro: tests/aws/services/iot/test_iot.py::TestMQTT::test_connect_mqtt_via_aws_iot_sdk[websockets] HTTP Status Code: 200 AWS validated
    • test_registry_events_with_topic_rule_triggers_dynamodb_v2_put_item LocalStack Pro: tests/aws/services/iot/test_iot.py::TestTopicRules::test_registry_events_with_topic_rule_triggers_dynamodb_v2_put_item HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_delete_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_delete_device_shadow[classic] HTTP Status Code: 200
    • test_delete_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_delete_device_shadow[named] HTTP Status Code: 200
    • test_get_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_get_device_shadow[classic] HTTP Status Code: 200
    • test_get_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_get_device_shadow[named] HTTP Status Code: 200
    • test_update_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_update_device_shadow[classic] HTTP Status Code: 200
    • test_update_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_update_device_shadow[named] HTTP Status Code: 200
    • test_delete_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_delete_shadow[classic] HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_delete_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_delete_shadow[named] HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_shadow_after_thing_deletion LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_shadow_after_thing_deletion HTTP Status Code: 200 AWS validated
    • test_thing_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow[classic] HTTP Status Code: 200 AWS validated
    • test_thing_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow[named] HTTP Status Code: 200 AWS validated
    • test_thing_shadow_input_errors LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow_input_errors HTTP Status Code: 200
    • test_thing_shadow_metadata LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow_metadata HTTP Status Code: 200 AWS validated
    • test_thing_shadow_update_reported_null_value LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow_update_reported_null_value HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_update_shadow_response LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_update_shadow_response HTTP Status Code: 200 AWS validated

UpdateThingShadow

Parameters: payload, shadowName, thingName
  • LocalStack Pro
    • test_delete_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_delete_device_shadow[named] HTTP Status Code: 200
    • test_get_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_get_device_shadow[named] HTTP Status Code: 200
    • test_update_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_update_device_shadow[named] HTTP Status Code: 200
    • test_delete_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_delete_shadow[named] HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_thing_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow[named] HTTP Status Code: 200 AWS validated
    • test_thing_shadow_update_reported_null_value LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow_update_reported_null_value HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_update_device_shadow[named] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_update_device_shadow[named] HTTP Status Code: 400 (InvalidRequestException)
Parameters: payload, thingName
  • LocalStack Pro
    • test_delete_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_delete_device_shadow[classic] HTTP Status Code: 200
    • test_get_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_get_device_shadow[classic] HTTP Status Code: 200
    • test_update_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_update_device_shadow[classic] HTTP Status Code: 200
    • test_delete_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_delete_shadow[classic] HTTP Status Code: 200 AWS validated Snapshot Tested
    • test_shadow_after_thing_deletion LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_shadow_after_thing_deletion HTTP Status Code: 200 AWS validated
    • test_thing_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow[classic] HTTP Status Code: 200 AWS validated
    • test_thing_shadow_metadata LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow_metadata HTTP Status Code: 200 AWS validated
    • test_update_shadow_response LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_update_shadow_response HTTP Status Code: 200 AWS validated
    • test_update_device_shadow[classic] LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceMQTT::test_update_device_shadow[classic] HTTP Status Code: 400 (InvalidRequestException)
    • test_thing_shadow_input_errors LocalStack Pro: tests/aws/services/iot_data/test_iot_data.py::TestDeviceShadowServiceREST::test_thing_shadow_input_errors HTTP Status Code: 400 (InvalidRequestException)