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;
+ }
}