5.5 KiB
5.5 KiB
iperf3-gui Implementation Plan
Status: COMPLETED Last updated: 2025-08-24 15:00 UTC+09:00
Goal: Create a Flutter Android app that bundles iperf3 and provides a simple GUI for client-mode network throughput testing.
Completed Tasks
Task 1: Scaffold Flutter project ✅
- Created project with
flutter createusing orgnovoyuuparosk - Package:
com.novoyuuparosk.iperf3gui - Kotlin for Android, Swift for iOS
- Commit:
5a7c36a
Task 2: Add dependencies and configure analysis ✅
- Dependencies:
provider: ^6.1.2,path_provider: ^2.1.4 - Dev dependencies:
flutter_lints: ^6.0.0,flutter_test - Strict analysis options (strict-casts, strict-inference, strict-raw-types)
- Commit:
815fc48
Task 3: Domain models ✅
TestConfiguration: server, port, duration, interval, parallelStreams, validationIperf3Result: rawOutput, exitCode- Unit tests for both models (5 tests)
- Commit:
ef194af
Task 4: iperf3 binary service ✅
Iperf3Service: spawns Process with CLI args from TestConfiguration- Captures stdout/stderr, returns Iperf3Result
- Commit:
815fc48
Task 5: TestRunViewModel ✅
- State enum: idle, running, completed, error
- Methods: runTest(), reset()
- ChangeNotifier for UI updates
- 4 unit tests
- Commit:
a6922b6
Task 6: Main test screen UI ✅
- TextField for server (default: iperf.es.net)
- TextField for port (default: 5201)
- ElevatedButton "GO" with loading indicator
- Status text indicator
- Raw output TextField (read-only)
- Provider integration for state management
- Commit:
815fc48
Task 7: Bundle iperf3 binaries ✅
- Downloaded iperf3 v3.21 binaries from davidBar-On/android-iperf3 gh-pages branch
- arm64-v8a: 133,600 bytes (ELF 64-bit, Android 28+, NDK r28c)
- armeabi-v7a: 98,828 bytes (ELF 32-bit, Android 28+, NDK r28c)
- Added to
pubspec.yamlassets section - Commit:
6c3ebf7
Task 8: README ✅
- Project description and features
- Architecture overview with tree diagram
- Build instructions
- License info (MIT, iperf3 is BSD-3-Clause)
- Commit:
6c3ebf7
Task 9: CI workflow ✅
- GitHub Actions workflow for analyze + tests
- Triggers on push/PR to master
- Uses Flutter 3.47.1 stable
- Commit:
3ba1133
Task 10: Push to Gitea ✅
- Pushed to
ssh://git@pi5-16.local:2222/android-stuff/iperf3-gui.git - Remote:
origin - Branch:
master - All commits pushed successfully
- Commit:
6c3ebf7
Verification
$ flutter analyze
No issues found! (ran in 0.5s)
$ flutter test
00:00 +10: All tests passed!
Remaining Work
Future Enhancements
- Add server-mode support (dual client/server toggle)
- Add result parsing/formatting (extract bandwidth, loss, jitter)
- Add history of past tests
- Add settings screen for advanced options (UDP, parallel streams, etc.)
- Add JSON output support for machine-readable results
- Add proper splash screen and app icon
- Add proguard/r8 configuration for release builds
- Add instrumentation tests for UI components
Project Structure
iperf3-gui/
├── .github/workflows/
│ └── ci.yaml # CI: analyze + test
├── .hermes/plans/
│ └── 2025-08-24_1200-iperf3-gui-mvp.md # This plan
├── assets/
│ └── iperf3/ # Bundled iperf3 v3.21 binaries
│ ├── arm64-v8a/ # 133,600 bytes
│ │ └── iperf3 # ELF 64-bit, Android 28+
│ └── armeabi-v7a/ # 98,828 bytes
│ └── iperf3 # ELF 32-bit, Android 28+
├── lib/
│ ├── domain/
│ │ ├── models/
│ │ │ ├── test_configuration.dart # Test config with validation
│ │ │ └── iperf3_result.dart # Raw result from iperf3
│ │ └── services/
│ │ └── iperf3_service.dart # Process runner for iperf3
│ ├── ui/
│ │ └── features/
│ │ └── test_run/
│ │ ├── test_run_screen.dart # UI screen
│ │ └── test_run_view_model.dart # State management
│ ├── data/
│ │ └── services/
│ │ ├── iperf3_service.dart # (also in domain)
│ │ └── iperf3_binary_path_provider.dart # Extracts binary from assets
│ └── main.dart # App entry point
├── test/
│ ├── widget_test.dart # Smoke test
│ ├── domain/models/
│ │ ├── test_configuration_test.dart # Config tests
│ │ └── iperf3_result_test.dart # Result tests
│ └── ui/features/test_run/
│ └── test_run_view_model_test.dart # ViewModel tests
├── android/
│ ├── app/src/main/kotlin/novoyuuparosk/iperf3gui/
│ │ └── MainActivity.kt
│ └── app/build.gradle.kts
│ ├── applicationId = "com.novoyuuparosk.iperf3gui"
├── pubspec.yaml
├── analysis_options.yaml
├── README.md
└── .gitignore
Commit History
6c3ebf7 feat: bundle iperf3 v3.21 binaries from davidBar-On/android-iperf3
3ba1133 feat: add CI workflow and update README
815fc48 refactor: fix lint issues and wire up main screen
a6922b6 feat: add TestRunViewModel with state management
ef194af feat: add domain models for test configuration and results
5a7c36a chore: scaffold Flutter project with com.novoyuuparosk.iperf3gui package
5bc59a9 Initial commit