Skip to content

Commit 5a920cb

Browse files
authored
fix port subrange from subclass (#13001)
1 parent 969e613 commit 5a920cb

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

localstack-core/localstack/utils/net.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,8 @@ def subrange(self, start: int = None, end: int = None) -> "PortRange":
342342
if end > self.end:
343343
raise ValueError(f"end not in range ({end} < {self.end})")
344344

345-
port_range = PortRange(start, end)
345+
# ensures that we return an instance of a subclass
346+
port_range = type(self)(start, end)
346347
port_range._ports_cache = self._ports_cache
347348
port_range._ports_lock = self._ports_lock
348349
return port_range

tests/unit/utils/test_net_utils.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
)
2424

2525

26+
class TestPortRange(PortRange):
27+
pass
28+
29+
2630
@markers.skip_offline
2731
def test_resolve_hostname():
2832
assert "127." in resolve_hostname(LOCALHOST)
@@ -117,6 +121,14 @@ def test_subrange():
117121
assert r.is_port_reserved(50005)
118122

119123

124+
def test_subrange_from_subclass():
125+
r = TestPortRange(1000, 5000)
126+
sr = r.subrange(1000, 2000)
127+
128+
assert isinstance(sr, TestPortRange)
129+
assert sr.as_range() == range(1000, 2001)
130+
131+
120132
def test_get_free_tcp_port_range_fails_if_reserved(monkeypatch):
121133
mock = MagicMock()
122134
mock.return_value = True

0 commit comments

Comments
 (0)