Skip to content

Commit 0701b24

Browse files
cartertinneyCopilot
andcommitted
e2e: add DPS leak checks
Run strict SDK and Paho leak tracking after every DPS registration test. Share tracker construction with the IoT Hub suite while preserving its existing false-positive filter. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 6aa8144 commit 0701b24

3 files changed

Lines changed: 45 additions & 11 deletions

File tree

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Copyright (c) Microsoft. All rights reserved.
2+
# Licensed under the MIT license. See LICENSE file in the project root for
3+
# full license information.
4+
5+
from .leak_tracker import LeakTracker
6+
7+
TRACKED_MODULES = ("azure.iot.device", "paho")
8+
9+
10+
def create_tracker(filter_callback=None):
11+
tracker = LeakTracker()
12+
for module_name in TRACKED_MODULES:
13+
tracker.track_module(module_name)
14+
tracker.filter_callback = filter_callback
15+
return tracker

‎tests/e2e/iothub_e2e/conftest.py‎

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
import test_config
99
import device_identity_helper
1010
import const
11-
import dev_utils.leak_tracker as leak_tracker_module
12-
from dev_utils import test_env, get_random_message, get_random_dict, iptables
11+
from dev_utils import test_env, get_random_message, get_random_dict, iptables, sdk_leak_tracker
1312
from utils import is_windows
1413

1514
from drop_fixtures import dropper # noqa: F401
@@ -122,11 +121,7 @@ def leak_tracker_filter(leaks):
122121
@pytest.fixture(scope="function")
123122
def leak_tracker():
124123
"""Opt the requesting test into a leak check before fixture teardown."""
125-
tracker = leak_tracker_module.LeakTracker()
126-
tracker.track_module("azure.iot.device")
127-
tracker.track_module("paho")
128-
tracker.filter_callback = leak_tracker_filter
129-
return tracker
124+
return sdk_leak_tracker.create_tracker(filter_callback=leak_tracker_filter)
130125

131126

132127
@pytest.fixture(scope="session")
@@ -232,10 +227,7 @@ def pytest_runtest_setup(item):
232227
#
233228
# Of these 2, the `leak_tracker` fixture is more useful.
234229
#
235-
item.outer_leak_tracker = leak_tracker_module.LeakTracker()
236-
item.outer_leak_tracker.track_module("azure.iot.device")
237-
item.outer_leak_tracker.track_module("paho")
238-
item.outer_leak_tracker.filter_callback = leak_tracker_filter
230+
item.outer_leak_tracker = sdk_leak_tracker.create_tracker(filter_callback=leak_tracker_filter)
239231
item.outer_leak_tracker.set_initial_object_list()
240232

241233

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Copyright (c) Microsoft Corporation. All rights reserved.
2+
# Licensed under the MIT License. See License.txt in the project root for
3+
# license information.
4+
5+
import pytest
6+
7+
from dev_utils import sdk_leak_tracker
8+
9+
10+
@pytest.hookimpl(wrapper=True)
11+
def pytest_runtest_call():
12+
"""
13+
Check that DPS client objects are released after each registration test.
14+
15+
Successful registration shuts down the provisioning pipeline before returning. The leak check
16+
runs after the test frame is released so test-local clients and results do not cause false
17+
positives.
18+
"""
19+
# DPS clients are created after this baseline, so allowing a "replacement" object would hide
20+
# a real leak rather than suppress a false positive.
21+
tracker = sdk_leak_tracker.create_tracker()
22+
tracker.set_initial_object_list()
23+
24+
result = yield
25+
26+
tracker.check_for_leaks()
27+
return result

0 commit comments

Comments
 (0)