From bcee358a0e04a70a69059eafc4a71777dcb1bce6 Mon Sep 17 00:00:00 2001 From: Christien Rioux Date: Tue, 30 Apr 2024 17:43:09 -0400 Subject: [PATCH] update ndk and gradle versions add subpackage to veilid-flutter with test fixtures for writing veilid integration tests in dart --- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- veilid-flutter/example/analysis_options.yaml | 14 ++++-- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/integration_test/app_test.dart | 7 ++- veilid-flutter/example/lib/log.dart | 23 ++++----- veilid-flutter/example/lib/log_terminal.dart | 50 +++++++++---------- veilid-flutter/example/pubspec.lock | 43 ++++++++-------- veilid-flutter/example/pubspec.yaml | 6 ++- .../packages/veilid_test/.gitignore | 7 +++ .../packages/veilid_test/CHANGELOG.md | 3 ++ veilid-flutter/packages/veilid_test/README.md | 39 +++++++++++++++ .../veilid_test/analysis_options.yaml | 15 ++++++ .../lib/src/processor_connection_state.dart | 21 ++++++++ .../veilid_test/lib/src/ticker_fixture.dart | 47 +++++++++++++++++ .../lib/src/update_processor_fixture.dart | 42 ++++++++++++++++ .../veilid_test/lib/src/veilid_fixture.dart} | 35 ++++++++++--- .../packages/veilid_test/lib/veilid_test.dart | 7 +++ .../packages/veilid_test/pubspec.yaml | 18 +++++++ .../gradle/wrapper/gradle-wrapper.properties | 2 +- 20 files changed, 305 insertions(+), 80 deletions(-) create mode 100644 veilid-flutter/packages/veilid_test/.gitignore create mode 100644 veilid-flutter/packages/veilid_test/CHANGELOG.md create mode 100644 veilid-flutter/packages/veilid_test/README.md create mode 100644 veilid-flutter/packages/veilid_test/analysis_options.yaml create mode 100644 veilid-flutter/packages/veilid_test/lib/src/processor_connection_state.dart create mode 100644 veilid-flutter/packages/veilid_test/lib/src/ticker_fixture.dart create mode 100644 veilid-flutter/packages/veilid_test/lib/src/update_processor_fixture.dart rename veilid-flutter/{example/integration_test/fixtures.dart => packages/veilid_test/lib/src/veilid_fixture.dart} (84%) create mode 100644 veilid-flutter/packages/veilid_test/lib/veilid_test.dart create mode 100644 veilid-flutter/packages/veilid_test/pubspec.yaml diff --git a/veilid-core/src/tests/android/gradle/wrapper/gradle-wrapper.properties b/veilid-core/src/tests/android/gradle/wrapper/gradle-wrapper.properties index 41dfb879..609ab8e6 100644 --- a/veilid-core/src/tests/android/gradle/wrapper/gradle-wrapper.properties +++ b/veilid-core/src/tests/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/veilid-core/src/tests/android/veilid_core_android_tests/gradle/wrapper/gradle-wrapper.properties b/veilid-core/src/tests/android/veilid_core_android_tests/gradle/wrapper/gradle-wrapper.properties index c5da459e..83146d1a 100644 --- a/veilid-core/src/tests/android/veilid_core_android_tests/gradle/wrapper/gradle-wrapper.properties +++ b/veilid-core/src/tests/android/veilid_core_android_tests/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip diff --git a/veilid-flutter/example/analysis_options.yaml b/veilid-flutter/example/analysis_options.yaml index bf4898d6..04953d6b 100644 --- a/veilid-flutter/example/analysis_options.yaml +++ b/veilid-flutter/example/analysis_options.yaml @@ -1,9 +1,15 @@ -include: package:flutter_lints/flutter.yaml - +include: package:lint_hard/all.yaml analyzer: errors: invalid_annotation_target: ignore - + exclude: + - '**/*.g.dart' + - '**/*.freezed.dart' + - '**/*.pb.dart' + - '**/*.pbenum.dart' + - '**/*.pbjson.dart' + - '**/*.pbserver.dart' linter: rules: - - unawaited_futures \ No newline at end of file + unawaited_futures: true + avoid_positional_boolean_parameters: false diff --git a/veilid-flutter/example/android/gradle/wrapper/gradle-wrapper.properties b/veilid-flutter/example/android/gradle/wrapper/gradle-wrapper.properties index 562c5e44..aeaff6f8 100644 --- a/veilid-flutter/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/veilid-flutter/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip diff --git a/veilid-flutter/example/integration_test/app_test.dart b/veilid-flutter/example/integration_test/app_test.dart index 3ac5baf9..3a254f63 100644 --- a/veilid-flutter/example/integration_test/app_test.dart +++ b/veilid-flutter/example/integration_test/app_test.dart @@ -1,9 +1,11 @@ @Timeout(Duration(seconds: 60)) +library veilid_flutter_integration_test; + import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; +import 'package:veilid_test/veilid_test.dart'; -import 'fixtures.dart'; import 'test_crypto.dart'; import 'test_routing_context.dart'; import 'test_table_db.dart'; @@ -12,7 +14,8 @@ import 'test_dht.dart'; void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - final fixture = DefaultFixture(); + final fixture = + DefaultVeilidFixture(programName: 'veilid_flutter integration test'); group('Unstarted Tests', () { test('veilid config defaults', testVeilidConfigDefaults); diff --git a/veilid-flutter/example/lib/log.dart b/veilid-flutter/example/lib/log.dart index fd305c9a..3ad7a6a1 100644 --- a/veilid-flutter/example/lib/log.dart +++ b/veilid-flutter/example/lib/log.dart @@ -1,8 +1,8 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/foundation.dart'; -import 'package:veilid/veilid.dart'; -import 'package:loggy/loggy.dart'; import 'package:ansicolor/ansicolor.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:loggy/loggy.dart'; +import 'package:veilid/veilid.dart'; // Loggy tools const LogLevel traceLevel = LogLevel('Trace', 1); @@ -86,24 +86,23 @@ class CallbackPrinter extends LoggyPrinter { callback?.call(record); } - void setCallback(Function(LogRecord)? cb) { + // ignore: use_setters_to_change_properties + void setCallback(void Function(LogRecord)? cb) { callback = cb; } } -var globalTerminalPrinter = CallbackPrinter(); +CallbackPrinter globalTerminalPrinter = CallbackPrinter(); extension TraceLoggy on Loggy { void trace(dynamic message, [Object? error, StackTrace? stackTrace]) => log(traceLevel, message, error, stackTrace); } -LogOptions getLogOptions(LogLevel? level) { - return LogOptions( - level ?? LogLevel.all, - stackTraceLevel: LogLevel.error, - ); -} +LogOptions getLogOptions(LogLevel? level) => LogOptions( + level ?? LogLevel.all, + stackTraceLevel: LogLevel.error, + ); void initLoggy() { Loggy.initLoggy( diff --git a/veilid-flutter/example/lib/log_terminal.dart b/veilid-flutter/example/lib/log_terminal.dart index 7ce676fe..aca7fe1c 100644 --- a/veilid-flutter/example/lib/log_terminal.dart +++ b/veilid-flutter/example/lib/log_terminal.dart @@ -6,7 +6,6 @@ import 'veilid_theme.dart'; const kDefaultTerminalStyle = TerminalStyle( fontSize: kDefaultMonoTerminalFontSize, - height: kDefaultMonoTerminalFontHeight, fontFamily: kDefaultMonoTerminalFontFamily); class LogTerminal extends StatefulWidget { @@ -14,7 +13,7 @@ class LogTerminal extends StatefulWidget { @override // ignore: library_private_types_in_public_api - _LogTerminalState createState() => _LogTerminalState(); + State createState() => _LogTerminalState(); } class _LogTerminalState extends State { @@ -28,32 +27,31 @@ class _LogTerminalState extends State { void initState() { super.initState(); terminal.setLineFeedMode(true); - globalTerminalPrinter - .setCallback((log) => {terminal.write("${log.pretty()}\n")}); + globalTerminalPrinter.setCallback((log) { + terminal.write('${log.pretty()}\n'); + }); } @override - Widget build(BuildContext context) { - return TerminalView( - terminal, - textStyle: kDefaultTerminalStyle, - controller: terminalController, - autofocus: true, - backgroundOpacity: 0.9, - onSecondaryTapDown: (details, offset) async { - final selection = terminalController.selection; - if (selection != null) { - final text = terminal.buffer.getText(selection); - terminalController.clearSelection(); - await Clipboard.setData(ClipboardData(text: text)); - } else { - final data = await Clipboard.getData('text/plain'); - final text = data?.text; - if (text != null) { - terminal.paste(text); + Widget build(BuildContext context) => TerminalView( + terminal, + textStyle: kDefaultTerminalStyle, + controller: terminalController, + autofocus: true, + backgroundOpacity: 0.9, + onSecondaryTapDown: (details, offset) async { + final selection = terminalController.selection; + if (selection != null) { + final text = terminal.buffer.getText(selection); + terminalController.clearSelection(); + await Clipboard.setData(ClipboardData(text: text)); + } else { + final data = await Clipboard.getData('text/plain'); + final text = data?.text; + if (text != null) { + terminal.paste(text); + } } - } - }, - ); - } + }, + ); } diff --git a/veilid-flutter/example/pubspec.lock b/veilid-flutter/example/pubspec.lock index 097383ef..55ec6509 100644 --- a/veilid-flutter/example/pubspec.lock +++ b/veilid-flutter/example/pubspec.lock @@ -17,6 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.11.0" + async_tools: + dependency: transitive + description: + name: async_tools + sha256: "972f68ab663724d86260a31e363c1355ff493308441b872bf4e7b8adc67c832c" + url: "https://pub.dev" + source: hosted + version: "0.1.0" boolean_selector: dependency: transitive description: @@ -139,14 +147,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 - url: "https://pub.dev" - source: hosted - version: "3.0.1" flutter_test: dependency: "direct dev" description: flutter @@ -215,14 +215,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.1" - lints: - dependency: transitive + lint_hard: + dependency: "direct dev" description: - name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + name: lint_hard + sha256: "44d15ec309b1a8e1aff99069df9dcb1597f49d5f588f32811ca28fb7b38c32fe" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" loggy: dependency: "direct main" description: @@ -263,14 +263,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.11.0" - mutex: - dependency: "direct dev" - description: - name: mutex - sha256: "8827da25de792088eb33e572115a5eb0d61d61a3c01acbc8bcbe76ed78f1a1f2" - url: "https://pub.dev" - source: hosted - version: "3.1.0" path: dependency: "direct main" description: @@ -459,6 +451,13 @@ packages: relative: true source: path version: "0.3.1" + veilid_test: + dependency: "direct dev" + description: + path: "../packages/veilid_test" + relative: true + source: path + version: "0.1.0" vm_service: dependency: transitive description: @@ -508,5 +507,5 @@ packages: source: hosted version: "0.0.6" sdks: - dart: ">=3.3.0 <4.0.0" + dart: ">=3.3.4 <4.0.0" flutter: ">=3.19.1" diff --git a/veilid-flutter/example/pubspec.yaml b/veilid-flutter/example/pubspec.yaml index 9493cdc7..38a9b52d 100644 --- a/veilid-flutter/example/pubspec.yaml +++ b/veilid-flutter/example/pubspec.yaml @@ -44,8 +44,10 @@ dev_dependencies: sdk: flutter integration_test: sdk: flutter - flutter_lints: ^3.0.1 - mutex: ^3.1.0 + lint_hard: ^4.0.0 + veilid_test: + path: ../packages/veilid_test + # The following section is specific to Flutter. flutter: diff --git a/veilid-flutter/packages/veilid_test/.gitignore b/veilid-flutter/packages/veilid_test/.gitignore new file mode 100644 index 00000000..3cceda55 --- /dev/null +++ b/veilid-flutter/packages/veilid_test/.gitignore @@ -0,0 +1,7 @@ +# https://dart.dev/guides/libraries/private-files +# Created by `dart pub` +.dart_tool/ + +# Avoid committing pubspec.lock for library packages; see +# https://dart.dev/guides/libraries/private-files#pubspeclock. +pubspec.lock diff --git a/veilid-flutter/packages/veilid_test/CHANGELOG.md b/veilid-flutter/packages/veilid_test/CHANGELOG.md new file mode 100644 index 00000000..effe43c8 --- /dev/null +++ b/veilid-flutter/packages/veilid_test/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/veilid-flutter/packages/veilid_test/README.md b/veilid-flutter/packages/veilid_test/README.md new file mode 100644 index 00000000..8b55e735 --- /dev/null +++ b/veilid-flutter/packages/veilid_test/README.md @@ -0,0 +1,39 @@ + + +TODO: Put a short description of the package here that helps potential users +know whether this package might be useful for them. + +## Features + +TODO: List what your package can do. Maybe include images, gifs, or videos. + +## Getting started + +TODO: List prerequisites and provide or point to information on how to +start using the package. + +## Usage + +TODO: Include short and useful examples for package users. Add longer examples +to `/example` folder. + +```dart +const like = 'sample'; +``` + +## Additional information + +TODO: Tell users more about the package: where to find more information, how to +contribute to the package, how to file issues, what response they can expect +from the package authors, and more. diff --git a/veilid-flutter/packages/veilid_test/analysis_options.yaml b/veilid-flutter/packages/veilid_test/analysis_options.yaml new file mode 100644 index 00000000..04953d6b --- /dev/null +++ b/veilid-flutter/packages/veilid_test/analysis_options.yaml @@ -0,0 +1,15 @@ +include: package:lint_hard/all.yaml +analyzer: + errors: + invalid_annotation_target: ignore + exclude: + - '**/*.g.dart' + - '**/*.freezed.dart' + - '**/*.pb.dart' + - '**/*.pbenum.dart' + - '**/*.pbjson.dart' + - '**/*.pbserver.dart' +linter: + rules: + unawaited_futures: true + avoid_positional_boolean_parameters: false diff --git a/veilid-flutter/packages/veilid_test/lib/src/processor_connection_state.dart b/veilid-flutter/packages/veilid_test/lib/src/processor_connection_state.dart new file mode 100644 index 00000000..6272bf07 --- /dev/null +++ b/veilid-flutter/packages/veilid_test/lib/src/processor_connection_state.dart @@ -0,0 +1,21 @@ +import 'package:veilid/veilid.dart'; + +class ProcessorConnectionState { + ProcessorConnectionState(); + + VeilidStateAttachment attachment = const VeilidStateAttachment( + localNetworkReady: false, + publicInternetReady: false, + state: AttachmentState.detached); + VeilidStateNetwork network = VeilidStateNetwork( + bpsDown: BigInt.from(0), + bpsUp: BigInt.from(0), + started: false, + peers: []); + + bool get isAttached => !(attachment.state == AttachmentState.detached || + attachment.state == AttachmentState.detaching || + attachment.state == AttachmentState.attaching); + + bool get isPublicInternetReady => attachment.publicInternetReady; +} diff --git a/veilid-flutter/packages/veilid_test/lib/src/ticker_fixture.dart b/veilid-flutter/packages/veilid_test/lib/src/ticker_fixture.dart new file mode 100644 index 00000000..62f4675b --- /dev/null +++ b/veilid-flutter/packages/veilid_test/lib/src/ticker_fixture.dart @@ -0,0 +1,47 @@ +import 'dart:async'; + +import 'package:async_tools/async_tools.dart'; + +import 'update_processor_fixture.dart'; + +abstract class TickerFixtureTickable { + Future onTick(); +} + +class TickerFixture { + TickerFixture({required this.updateProcessorFixture}); + + static final _fixtureMutex = Mutex(); + + UpdateProcessorFixture updateProcessorFixture; + Timer? _tickTimer; + final List _tickables = []; + + Future setUp() async { + await _fixtureMutex.acquire(); + _tickTimer = Timer.periodic(const Duration(seconds: 1), (timer) { + singleFuture(this, _onTick); + }); + } + + Future tearDown() async { + assert(_fixtureMutex.isLocked, 'should not tearDown without setUp'); + final tickTimer = _tickTimer; + if (tickTimer != null) { + tickTimer.cancel(); + } + _fixtureMutex.release(); + } + + void register(TickerFixtureTickable tickable) { + _tickables.add(tickable); + } + + void unregister(TickerFixtureTickable tickable) { + _tickables.remove(tickable); + } + + Future _onTick() async { + await _tickables.map((t) => t.onTick()).wait; + } +} diff --git a/veilid-flutter/packages/veilid_test/lib/src/update_processor_fixture.dart b/veilid-flutter/packages/veilid_test/lib/src/update_processor_fixture.dart new file mode 100644 index 00000000..9227497d --- /dev/null +++ b/veilid-flutter/packages/veilid_test/lib/src/update_processor_fixture.dart @@ -0,0 +1,42 @@ +import 'dart:async'; + +import 'package:async_tools/async_tools.dart'; +import 'package:veilid/veilid.dart'; + +import 'processor_connection_state.dart'; +import 'veilid_fixture.dart'; + +class UpdateProcessorFixture { + UpdateProcessorFixture({required this.veilidFixture}); + + static final _fixtureMutex = Mutex(); + VeilidFixture veilidFixture; + + ProcessorConnectionState processorConnectionState = + ProcessorConnectionState(); + + Future setUp() async { + await _fixtureMutex.acquire(); + veilidFixture.updateStream.listen((update) { + if (update is VeilidUpdateNetwork) { + processorConnectionState.network = processorConnectionState.network = + VeilidStateNetwork( + started: update.started, + bpsDown: update.bpsDown, + bpsUp: update.bpsUp, + peers: update.peers); + } else if (update is VeilidUpdateAttachment) { + processorConnectionState.attachment = VeilidStateAttachment( + state: update.state, + publicInternetReady: update.publicInternetReady, + localNetworkReady: update.localNetworkReady); + } + }); + } + + Future tearDown() async { + assert(_fixtureMutex.isLocked, 'should not tearDown without setUp'); + + _fixtureMutex.release(); + } +} diff --git a/veilid-flutter/example/integration_test/fixtures.dart b/veilid-flutter/packages/veilid_test/lib/src/veilid_fixture.dart similarity index 84% rename from veilid-flutter/example/integration_test/fixtures.dart rename to veilid-flutter/packages/veilid_test/lib/src/veilid_fixture.dart index ef69e819..42be5154 100644 --- a/veilid-flutter/example/integration_test/fixtures.dart +++ b/veilid-flutter/packages/veilid_test/lib/src/veilid_fixture.dart @@ -1,11 +1,20 @@ import 'dart:async'; -import 'package:flutter/foundation.dart'; -import 'package:mutex/mutex.dart'; +import 'package:async_tools/async_tools.dart'; import 'package:veilid/veilid.dart'; -class DefaultFixture { - DefaultFixture(); +bool kIsWeb = bool.fromEnvironment('dart.library.js_util'); + +abstract class VeilidFixture { + Future setUp(); + Future tearDown(); + Future attach(); + Future detach(); + Stream get updateStream; +} + +class DefaultVeilidFixture implements VeilidFixture { + DefaultVeilidFixture({required this.programName}); StreamSubscription? _veilidUpdateSubscription; Stream? _veilidUpdateStream; @@ -13,7 +22,9 @@ class DefaultFixture { StreamController.broadcast(); static final _fixtureMutex = Mutex(); + final String programName; + @override Future setUp() async { await _fixtureMutex.acquire(); @@ -70,7 +81,7 @@ class DefaultFixture { var config = await getDefaultVeilidConfig( isWeb: kIsWeb, - programName: 'Veilid Tests', + programName: programName, // ignore: avoid_redundant_argument_values, do_not_use_environment bootstrap: const String.fromEnvironment('BOOTSTRAP'), // ignore: avoid_redundant_argument_values, do_not_use_environment @@ -104,8 +115,10 @@ class DefaultFixture { }); } + @override Stream get updateStream => _updateStreamController.stream; + @override Future attach() async { await Veilid.instance.attach(); @@ -121,7 +134,11 @@ class DefaultFixture { break; case AttachmentState.detaching: break; - default: + case AttachmentState.attachedGood: + case AttachmentState.attachedStrong: + case AttachmentState.attachedWeak: + case AttachmentState.overAttached: + case AttachmentState.fullyAttached: done = true; break; } @@ -129,16 +146,18 @@ class DefaultFixture { if (done) { break; } - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(seconds: 1)); } } + @override Future detach() async { await Veilid.instance.detach(); } + @override Future tearDown() async { - assert(_veilidUpdateStream != null, 'should not tearDown without setUp'); + assert(_fixtureMutex.isLocked, 'should not tearDown without setUp'); final cancelFut = _veilidUpdateSubscription?.cancel(); await Veilid.instance.shutdownVeilidCore(); diff --git a/veilid-flutter/packages/veilid_test/lib/veilid_test.dart b/veilid-flutter/packages/veilid_test/lib/veilid_test.dart new file mode 100644 index 00000000..66d53378 --- /dev/null +++ b/veilid-flutter/packages/veilid_test/lib/veilid_test.dart @@ -0,0 +1,7 @@ +/// Support testing Veilid applications +library; + +export 'src/processor_connection_state.dart'; +export 'src/ticker_fixture.dart'; +export 'src/update_processor_fixture.dart'; +export 'src/veilid_fixture.dart'; diff --git a/veilid-flutter/packages/veilid_test/pubspec.yaml b/veilid-flutter/packages/veilid_test/pubspec.yaml new file mode 100644 index 00000000..daea7828 --- /dev/null +++ b/veilid-flutter/packages/veilid_test/pubspec.yaml @@ -0,0 +1,18 @@ +name: veilid_test +description: A library for testing Veilid applications +version: 0.1.0 +publish_to: none +# repository: https://gitlab.com/veilid/dart_veilid_test + +environment: + sdk: ^3.3.4 + +# Add regular dependencies here. +dependencies: + async_tools: ^0.1.0 + veilid: + path: ../.. + +dev_dependencies: + lint_hard: ^4.0.0 + test: ^1.24.0 diff --git a/veilid-tools/src/tests/android/veilid_tools_android_tests/gradle/wrapper/gradle-wrapper.properties b/veilid-tools/src/tests/android/veilid_tools_android_tests/gradle/wrapper/gradle-wrapper.properties index 0f75328c..0f25c15d 100644 --- a/veilid-tools/src/tests/android/veilid_tools_android_tests/gradle/wrapper/gradle-wrapper.properties +++ b/veilid-tools/src/tests/android/veilid_tools_android_tests/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Mon Nov 28 22:38:53 EST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME