Skip to content

Commit 6ce3d83

Browse files
committed
Merge branch 'dev' of github.com:osociety/network_tools_flutter into dev
2 parents 9ef3eee + 8afa2fc commit 6ce3d83

File tree

6 files changed

+142
-12
lines changed

6 files changed

+142
-12
lines changed

.github/workflows/flutter.yml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
name: Flutter
77

88
on:
9-
push:
10-
branches: ["main"]
119
pull_request:
1210
branches: ["main", "dev"]
1311

@@ -70,6 +68,15 @@ jobs:
7068

7169
- name: Run analyzer
7270
run: flutter analyze
71+
72+
- name: Install coverage tools
73+
run: flutter pub global activate coverage
7374

7475
- name: Run tests
75-
run: flutter test
76+
run: flutter test --coverage
77+
78+
- name: Upload Coverage to CodeCov
79+
uses: codecov/codecov-action@v3
80+
with:
81+
token: ${{secrets.CODECOV_TOKEN}}
82+
file: coverage/lcov.info

.github/workflows/publish.yml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,7 @@ jobs:
6161
run: flutter pub global activate coverage
6262

6363
- name: Run tests
64-
run: flutter test --coverage-path="coverage"
65-
66-
- name: Format Coverage
67-
run: $HOME/.pub-cache/bin/format_coverage --lcov --in=coverage --out=coverage/coverage.lcov --report-on=lib
64+
run: flutter test --coverage
6865

6966
- name: Setup Pub Credentials
7067
shell: bash
@@ -86,4 +83,4 @@ jobs:
8683
uses: codecov/codecov-action@v3
8784
with:
8885
token: ${{secrets.CODECOV_TOKEN}}
89-
file: coverage/coverage.lcov
86+
file: coverage/lcov.info

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Change Log
22

3+
## 1.0.1
4+
5+
* Bug fixes and improvements, add more tests for coverage
6+
37
## 1.0.0
48

59
* Initial support added for ping_ios_dart in network_tools

lib/src/port_scanner_flutter.dart

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class PortScannerFlutter {
1212
Duration timeout = const Duration(milliseconds: 2000),
1313
}) {
1414
DartPingIOS.register();
15-
return PortScanner.isOpen(target, port);
15+
return PortScanner.isOpen(target, port, timeout: timeout);
1616
}
1717

1818
/// Scans ports only listed in [portList] for a [target]. Progress can be
@@ -28,7 +28,11 @@ class PortScannerFlutter {
2828
bool resultsInAddressAscendingOrder = true,
2929
}) {
3030
DartPingIOS.register();
31-
return PortScanner.customDiscover(target);
31+
return PortScanner.customDiscover(target,
32+
portList: portList,
33+
progressCallback: progressCallback,
34+
timeout: timeout,
35+
resultsInAddressAscendingOrder: resultsInAddressAscendingOrder);
3236
}
3337

3438
/// Scans port from [startPort] to [endPort] of [target]. Progress can be
@@ -43,7 +47,12 @@ class PortScannerFlutter {
4347
bool resultsInAddressAscendingOrder = true,
4448
}) {
4549
DartPingIOS.register();
46-
return PortScanner.scanPortsForSingleDevice(target);
50+
return PortScanner.scanPortsForSingleDevice(target,
51+
startPort: startPort,
52+
endPort: endPort,
53+
progressCallback: progressCallback,
54+
timeout: timeout,
55+
resultsInAddressAscendingOrder: resultsInAddressAscendingOrder);
4756
}
4857

4958
static Future<ActiveHost?> connectToPort({

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: network_tools_flutter
22
description: Extended features of network_tools package for flutter framework supporting iOS and Android
3-
version: 1.0.0
3+
version: 1.0.1
44
issue_tracker: https://github.com/osociety/network_tools_flutter/issues
55
repository: https://github.com/osociety/network_tools_flutter
66

test/port_scan_flutter_test.dart

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import 'dart:async';
2+
3+
import 'package:network_tools/network_tools.dart';
4+
import 'package:flutter_test/flutter_test.dart';
5+
import 'package:network_tools_flutter/network_tools_flutter.dart';
6+
import 'package:universal_io/io.dart';
7+
8+
void main() {
9+
// Logger.root.level = Level.FINE;
10+
// Logger.root.onRecord.listen((record) {
11+
// print(
12+
// '${DateFormat.Hms().format(record.time)}: ${record.level.name}: ${record.loggerName}: ${record.message}',
13+
// );
14+
// });
15+
int port = 0; // keep this value between 1-2034
16+
final List<ActiveHost> hostsWithOpenPort = [];
17+
late ServerSocket server;
18+
// Fetching interfaceIp and hostIp
19+
setUpAll(() async {
20+
//open a port in shared way because of hostscanner using same,
21+
//if passed false then two hosts come up in search and breaks test.
22+
server =
23+
await ServerSocket.bind(InternetAddress.anyIPv4, port, shared: true);
24+
port = server.port;
25+
final interfaceList =
26+
await NetworkInterface.list(); //will give interface list
27+
if (interfaceList.isNotEmpty) {
28+
final localInterface =
29+
interfaceList.elementAt(0); //fetching first interface like en0/eth0
30+
if (localInterface.addresses.isNotEmpty) {
31+
final address = localInterface.addresses
32+
.elementAt(0)
33+
.address; //gives IP address of GHA local machine.
34+
final interfaceIp = address.substring(0, address.lastIndexOf('.'));
35+
//ssh should be running at least in any host
36+
await for (final host
37+
in HostScanner.scanDevicesForSinglePort(interfaceIp, port)) {
38+
hostsWithOpenPort.add(host);
39+
}
40+
}
41+
}
42+
});
43+
44+
group('Testing Port Scanner', () {
45+
test('Running scanPortsForSingleDevice tests', () {
46+
for (final activeHost in hostsWithOpenPort) {
47+
final port = activeHost.openPorts.elementAt(0).port;
48+
expectLater(
49+
PortScannerFlutter.scanPortsForSingleDevice(
50+
activeHost.address,
51+
startPort: port - 1,
52+
endPort: port + 1,
53+
),
54+
emitsThrough(
55+
isA<ActiveHost>().having(
56+
(p0) => p0.openPorts.contains(OpenPort(port)),
57+
"Should match host having same open port",
58+
equals(true),
59+
),
60+
),
61+
);
62+
}
63+
});
64+
65+
test('Running connectToPort tests', () {
66+
for (final activeHost in hostsWithOpenPort) {
67+
expectLater(
68+
PortScannerFlutter.connectToPort(
69+
address: activeHost.address,
70+
port: port,
71+
timeout: const Duration(seconds: 5),
72+
activeHostsController: StreamController<ActiveHost>(),
73+
),
74+
completion(
75+
isA<ActiveHost>().having(
76+
(p0) => p0.openPorts.contains(OpenPort(port)),
77+
"Should match host having same open port",
78+
equals(true),
79+
),
80+
),
81+
);
82+
}
83+
});
84+
test('Running customDiscover tests', () {
85+
for (final activeHost in hostsWithOpenPort) {
86+
expectLater(
87+
PortScannerFlutter.customDiscover(activeHost.address,
88+
portList: [port - 1, port, port + 1]),
89+
emits(isA<ActiveHost>()),
90+
);
91+
}
92+
});
93+
94+
test('Running isOpen tests', () {
95+
for (final activeHost in hostsWithOpenPort) {
96+
expectLater(
97+
PortScannerFlutter.isOpen(activeHost.address, port),
98+
completion(
99+
isA<ActiveHost>().having(
100+
(p0) => p0.openPorts.contains(OpenPort(port)),
101+
"Should match host having same open port",
102+
equals(true),
103+
),
104+
),
105+
);
106+
}
107+
});
108+
});
109+
110+
tearDownAll(() {
111+
server.close();
112+
});
113+
}

0 commit comments

Comments
 (0)