test-runner/limitations.py (53 lines of code) (raw):
# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for
# full license information.
import pytest
from horton_settings import settings
all_languages = set(["pythonv2", "c", "csharp", "java", "node"])
all_transports = set(["amqp", "amqpws", "mqtt", "mqttws"])
def get_maximum_telemetry_message_size(client):
"""
Returns the maximum message size (in bytes) the client can support
"""
if client.settings.language == "java" and client.settings.transport == "amqpws":
# java amqpws limitation. Actual number is unknown. This just blocks 63K+ tests.
# The real limit is probably near an even number like 32K
return 62 * 1024
elif client.settings.language == "node":
# node swagger wrapper limitation
return 64 * 1024
else:
return 255 * 1024
def can_always_overlap_telemetry_messages(client):
"""
Returns True if the client can reliably overlay telemetry messages
"""
if client.settings.language == "node":
# node will fail test_send_5_telemetry_events_to_iothub 1/10 times
return False
else:
return True
def _verify_and_make_set(var, allowed_values):
"""
Turn a string or a list into a set so we can use set operations
"""
if isinstance(var, str):
var = set([var])
elif isinstance(var, list):
var = set(var)
elif isinstance(var, set):
pass
else:
raise ValueError("invalid type")
if (var & allowed_values) != var:
raise ValueError("invalid value")
return var
def uses_shared_key_auth(client):
"""
return True if the client supports shared key auth
"""
return client.settings.connection_type.startswith("connection_string")
def only_run_test_for(client, languages):
"""
only run the test for the given language(s)
"""
languages = _verify_and_make_set(languages, all_languages)
if client.settings.language not in languages:
pytest.skip()
def skip_test_for(client, languages, transports=all_transports):
"""
skip the test for the given language(s)
"""
languages = _verify_and_make_set(languages, all_languages)
transports = _verify_and_make_set(transports, all_transports)
if (
client.settings.language in languages
and client.settings.transport in transports
):
pytest.skip()
def skip_if_no_system_control():
"""
Skip the test if we don't have a system_control API
"""
if not settings.system_control.adapter:
pytest.skip()
def only_run_test_on_iotedge_module(client):
if client.settings.object_type != "iotedge_module":
pytest.skip()
def only_run_test_on_iothub_device(client):
if client.settings.object_type != "iothub_device":
pytest.skip()
def needs_manual_connect(client):
return client.settings.language == "pythonv2"