Test that IPv6 sockets get closed (fe5dc3513b2c673bdfdc779b3ea2035ba13dd5e4) (#457)
diff --git a/packages/multicast_dns/CHANGELOG.md b/packages/multicast_dns/CHANGELOG.md index f70ebf8..426f0b0 100644 --- a/packages/multicast_dns/CHANGELOG.md +++ b/packages/multicast_dns/CHANGELOG.md
@@ -1,4 +1,9 @@ +## 0.3.1 + +* Close IPv6 sockets on [MDnsClient.stop]. + ## 0.3.0+1 + * Removed redundant link in README.md file. ## 0.3.0
diff --git a/packages/multicast_dns/pubspec.yaml b/packages/multicast_dns/pubspec.yaml index 0a11ff5..2d24824 100644 --- a/packages/multicast_dns/pubspec.yaml +++ b/packages/multicast_dns/pubspec.yaml
@@ -2,7 +2,7 @@ description: Dart package for mDNS queries (e.g. Bonjour, Avahi). repository: https://github.com/flutter/packages/tree/master/packages/multicast_dns issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+multicast_dns%22 -version: 0.3.0+1 +version: 0.3.1 environment: sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/multicast_dns/test/client_test.dart b/packages/multicast_dns/test/client_test.dart index bd592f3..4c49fcb 100644 --- a/packages/multicast_dns/test/client_test.dart +++ b/packages/multicast_dns/test/client_test.dart
@@ -29,11 +29,50 @@ expect(lastPort, 1234); }); + + test('Closes IPv4 sockets', () async { + final FakeRawDatagramSocket datagramSocket = FakeRawDatagramSocket(); + final MDnsClient client = MDnsClient(rawDatagramSocketFactory: + (dynamic host, int port, + {bool reuseAddress = true, + bool reusePort = true, + int ttl = 1}) async { + return datagramSocket; + }); + + await client.start( + mDnsPort: 1234, + interfacesFactory: (InternetAddressType type) async => + <NetworkInterface>[]); + expect(datagramSocket.closed, false); + client.stop(); + expect(datagramSocket.closed, true); + }); + + test('Closes IPv6 sockets', () async { + final FakeRawDatagramSocket datagramSocket = FakeRawDatagramSocket(); + datagramSocket.address = InternetAddress.anyIPv6; + final MDnsClient client = MDnsClient(rawDatagramSocketFactory: + (dynamic host, int port, + {bool reuseAddress = true, + bool reusePort = true, + int ttl = 1}) async { + return datagramSocket; + }); + + await client.start( + mDnsPort: 1234, + interfacesFactory: (InternetAddressType type) async => + <NetworkInterface>[]); + expect(datagramSocket.closed, false); + client.stop(); + expect(datagramSocket.closed, true); + }); } class FakeRawDatagramSocket extends Fake implements RawDatagramSocket { @override - InternetAddress get address => InternetAddress.anyIPv4; + InternetAddress address = InternetAddress.anyIPv4; @override StreamSubscription<RawSocketEvent> listen( @@ -44,4 +83,11 @@ return const Stream<RawSocketEvent>.empty().listen(onData, onError: onError, cancelOnError: cancelOnError, onDone: onDone); } + + bool closed = false; + + @override + void close() { + closed = true; + } }