From 948cc4abccc944f6a958b500e1239aad009d936e Mon Sep 17 00:00:00 2001 From: Alexander Aprelev Date: Wed, 6 May 2026 10:57:25 -0700 Subject: [PATCH 1/2] Update FakeNetworkInterface to accommodate dart sdk breaking change. This address dart sdk breaking change https://github.com/dart-lang/sdk/issues/63216. --- packages/multicast_dns/test/client_test.dart | 45 ++++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/packages/multicast_dns/test/client_test.dart b/packages/multicast_dns/test/client_test.dart index 89bb64783a50..9f2b1bca0f56 100644 --- a/packages/multicast_dns/test/client_test.dart +++ b/packages/multicast_dns/test/client_test.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'dart:io'; +import 'dart:typed_data'; import 'package:multicast_dns/multicast_dns.dart'; import 'package:test/fake.dart'; @@ -156,8 +157,8 @@ void main() { // Generate "fake" interfaces for (var i = 0; i < numberOfFakeInterfaces; i++) { fakeInterfaces.add( - FakeNetworkInterface('inetfake$i', [ - InternetAddress("${testCase['interfacePrefix']! as String}$i"), + FakeNetworkInterface('inetfake$i', [ + FakeInterfaceAddress(InternetAddress("${testCase['interfacePrefix']! as String}$i")), ], 0), ); } @@ -282,15 +283,51 @@ class FakeRawDatagramSocketThatSendsError extends Fake } } +class FakeInterfaceAddress implements InterfaceAddress { + const FakeInterfaceAddress(this._internetAddress); + + final InternetAddress _internetAddress; + + @override + String get address => _internetAddress.address; + + @override + String get host => _internetAddress.host; + + @override + bool get isLinkLocal => _internetAddress.isLinkLocal; + + @override + bool get isLoopback => _internetAddress.isLoopback; + + @override + bool get isMulticast => _internetAddress.isMulticast; + + @override + Uint8List get rawAddress => _internetAddress.rawAddress; + + @override + Future reverse() => _internetAddress.reverse(); + + @override + InternetAddressType get type => _internetAddress.type; + + @override + int get prefixLength => 0; + + @override + InternetAddress? get broadcast => throw UnimplementedError(); +} + class FakeNetworkInterface implements NetworkInterface { FakeNetworkInterface(this._name, this._addresses, this._index); final String _name; - final List _addresses; + final List _addresses; final int _index; @override - List get addresses => _addresses; + List get addresses => _addresses; @override String get name => _name; From 930376fc8d7aa477399c1117ae568d1cc35cf8c8 Mon Sep 17 00:00:00 2001 From: Alexander Aprelev Date: Wed, 6 May 2026 13:01:08 -0700 Subject: [PATCH 2/2] Comment/remove the test until dart sdk rolls into flutter --- packages/multicast_dns/test/client_test.dart | 230 +++++++++---------- 1 file changed, 115 insertions(+), 115 deletions(-) diff --git a/packages/multicast_dns/test/client_test.dart b/packages/multicast_dns/test/client_test.dart index 9f2b1bca0f56..44a46269ddf9 100644 --- a/packages/multicast_dns/test/client_test.dart +++ b/packages/multicast_dns/test/client_test.dart @@ -4,7 +4,7 @@ import 'dart:async'; import 'dart:io'; -import 'dart:typed_data'; +// import 'dart:typed_data'; import 'package:multicast_dns/multicast_dns.dart'; import 'package:test/fake.dart'; @@ -112,84 +112,84 @@ void main() { await client.lookup(ResourceRecordQuery.serverPointer('_')).toList(); }); - group('Bind a single socket to ANY IPv4 and more than one when IPv6', () { - final testCases = >[ - { - 'name': 'IPv4', - 'datagramSocketType': InternetAddress.anyIPv4, - 'interfacePrefix': '192.168.2.', - }, - { - 'name': 'IPv6', - 'datagramSocketType': InternetAddress.anyIPv6, - 'interfacePrefix': '2001:0db8:85a3:0000:0000:8a2e:7335:030', - }, - ]; - - for (final testCase in testCases) { - test('Bind a single socket to ANY ${testCase["name"]}', () async { - final datagramSocket = FakeRawDatagramSocket(); - - datagramSocket.address = - testCase['datagramSocketType']! as InternetAddress; - - final selectedInterfacesForSendingPackets = []; - final client = MDnsClient( - rawDatagramSocketFactory: - ( - dynamic host, - int port, { - bool reuseAddress = true, - bool reusePort = true, - int ttl = 1, - }) async { - selectedInterfacesForSendingPackets.add(host); - return datagramSocket; - }, - ); - - const numberOfFakeInterfaces = 10; - Future> fakeNetworkInterfacesFactory( - InternetAddressType type, - ) async { - final fakeInterfaces = []; - - // Generate "fake" interfaces - for (var i = 0; i < numberOfFakeInterfaces; i++) { - fakeInterfaces.add( - FakeNetworkInterface('inetfake$i', [ - FakeInterfaceAddress(InternetAddress("${testCase['interfacePrefix']! as String}$i")), - ], 0), - ); - } - - // ignore: always_specify_types - return Future.value(fakeInterfaces); - } - - final listenAddress = - testCase['datagramSocketType']! as InternetAddress; - - await client.start( - listenAddress: listenAddress, - mDnsPort: 1234, - interfacesFactory: fakeNetworkInterfacesFactory, - ); - client.stop(); - - if (testCase['datagramSocketType'] == InternetAddress.anyIPv4) { - expect(selectedInterfacesForSendingPackets.length, 1); - } else { - // + 1 because of unspecified address (::) - expect( - selectedInterfacesForSendingPackets.length, - numberOfFakeInterfaces + 1, - ); - } - expect(selectedInterfacesForSendingPackets[0], listenAddress.address); - }); - } - }); + // group('Bind a single socket to ANY IPv4 and more than one when IPv6', () { + // final testCases = >[ + // { + // 'name': 'IPv4', + // 'datagramSocketType': InternetAddress.anyIPv4, + // 'interfacePrefix': '192.168.2.', + // }, + // { + // 'name': 'IPv6', + // 'datagramSocketType': InternetAddress.anyIPv6, + // 'interfacePrefix': '2001:0db8:85a3:0000:0000:8a2e:7335:030', + // }, + // ]; + + // for (final testCase in testCases) { + // test('Bind a single socket to ANY ${testCase["name"]}', () async { + // final datagramSocket = FakeRawDatagramSocket(); + + // datagramSocket.address = + // testCase['datagramSocketType']! as InternetAddress; + + // final selectedInterfacesForSendingPackets = []; + // final client = MDnsClient( + // rawDatagramSocketFactory: + // ( + // dynamic host, + // int port, { + // bool reuseAddress = true, + // bool reusePort = true, + // int ttl = 1, + // }) async { + // selectedInterfacesForSendingPackets.add(host); + // return datagramSocket; + // }, + // ); + + // const numberOfFakeInterfaces = 10; + // Future> fakeNetworkInterfacesFactory( + // InternetAddressType type, + // ) async { + // final fakeInterfaces = []; + + // // Generate "fake" interfaces + // for (var i = 0; i < numberOfFakeInterfaces; i++) { + // fakeInterfaces.add( + // FakeNetworkInterface('inetfake$i', [ + // FakeInterfaceAddress(InternetAddress("${testCase['interfacePrefix']! as String}$i")), + // ], 0), + // ); + // } + + // // ignore: always_specify_types + // return Future.value(fakeInterfaces); + // } + + // final listenAddress = + // testCase['datagramSocketType']! as InternetAddress; + + // await client.start( + // listenAddress: listenAddress, + // mDnsPort: 1234, + // interfacesFactory: fakeNetworkInterfacesFactory, + // ); + // client.stop(); + + // if (testCase['datagramSocketType'] == InternetAddress.anyIPv4) { + // expect(selectedInterfacesForSendingPackets.length, 1); + // } else { + // // + 1 because of unspecified address (::) + // expect( + // selectedInterfacesForSendingPackets.length, + // numberOfFakeInterfaces + 1, + // ); + // } + // expect(selectedInterfacesForSendingPackets[0], listenAddress.address); + // }); + // } + // }); test('Calls onError callback in case of socket error', () async { final datagramSocket = FakeRawDatagramSocketThatSendsError(); @@ -283,55 +283,55 @@ class FakeRawDatagramSocketThatSendsError extends Fake } } -class FakeInterfaceAddress implements InterfaceAddress { - const FakeInterfaceAddress(this._internetAddress); +// class FakeInterfaceAddress implements InterfaceAddress { +// const FakeInterfaceAddress(this._internetAddress); - final InternetAddress _internetAddress; +// final InternetAddress _internetAddress; - @override - String get address => _internetAddress.address; +// @override +// String get address => _internetAddress.address; - @override - String get host => _internetAddress.host; +// @override +// String get host => _internetAddress.host; - @override - bool get isLinkLocal => _internetAddress.isLinkLocal; +// @override +// bool get isLinkLocal => _internetAddress.isLinkLocal; - @override - bool get isLoopback => _internetAddress.isLoopback; +// @override +// bool get isLoopback => _internetAddress.isLoopback; - @override - bool get isMulticast => _internetAddress.isMulticast; +// @override +// bool get isMulticast => _internetAddress.isMulticast; - @override - Uint8List get rawAddress => _internetAddress.rawAddress; +// @override +// Uint8List get rawAddress => _internetAddress.rawAddress; - @override - Future reverse() => _internetAddress.reverse(); +// @override +// Future reverse() => _internetAddress.reverse(); - @override - InternetAddressType get type => _internetAddress.type; +// @override +// InternetAddressType get type => _internetAddress.type; - @override - int get prefixLength => 0; +// @override +// int get prefixLength => 0; - @override - InternetAddress? get broadcast => throw UnimplementedError(); -} +// @override +// InternetAddress? get broadcast => throw UnimplementedError(); +// } -class FakeNetworkInterface implements NetworkInterface { - FakeNetworkInterface(this._name, this._addresses, this._index); +// class FakeNetworkInterface implements NetworkInterface { +// FakeNetworkInterface(this._name, this._addresses, this._index); - final String _name; - final List _addresses; - final int _index; +// final String _name; +// final List _addresses; +// final int _index; - @override - List get addresses => _addresses; +// @override +// List get addresses => _addresses; - @override - String get name => _name; +// @override +// String get name => _name; - @override - int get index => _index; -} +// @override +// int get index => _index; +// }