From c0764cee86357fc5a4fdefdad24ff7bc9adcde12 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Thu, 27 Jun 2024 13:46:43 -0700 Subject: [PATCH] build_daemon: drop pkg:uuid dev_dep Just inline a simple version from somewhere else --- build_daemon/pubspec.yaml | 1 - build_daemon/test/daemon_test.dart | 32 +++++++++++++------------- build_daemon/test/uuid.dart | 36 ++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 build_daemon/test/uuid.dart diff --git a/build_daemon/pubspec.yaml b/build_daemon/pubspec.yaml index 7bf6df8cd..9fc6ec873 100644 --- a/build_daemon/pubspec.yaml +++ b/build_daemon/pubspec.yaml @@ -29,7 +29,6 @@ dev_dependencies: mockito: ^5.0.0 test: ^1.25.5 test_descriptor: ^2.0.0 - uuid: ^3.0.0 topics: - build-runner diff --git a/build_daemon/test/daemon_test.dart b/build_daemon/test/daemon_test.dart index 3d4acbb99..2f0fb5595 100644 --- a/build_daemon/test/daemon_test.dart +++ b/build_daemon/test/daemon_test.dart @@ -17,13 +17,13 @@ import 'package:build_daemon/src/fakes/fake_builder.dart'; import 'package:build_daemon/src/fakes/fake_change_provider.dart'; import 'package:test/test.dart'; import 'package:test_descriptor/test_descriptor.dart' as d; -import 'package:uuid/uuid.dart'; + +import 'uuid.dart'; final defaultIdleTimeoutSec = defaultIdleTimeout.inSeconds; void main() { var testDaemons = []; var testWorkspaces = []; - var uuid = const Uuid(); group('Daemon', () { setUp(() { testDaemons.clear(); @@ -41,7 +41,7 @@ void main() { } }); test('can be stopped', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); testWorkspaces.add(workspace); var daemon = Daemon(workspace); await daemon.start( @@ -53,20 +53,20 @@ void main() { await daemon.stop(); }); test('can run if no other daemon is running', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); var daemon = await _runDaemon(workspace); testDaemons.add(daemon); expect(await _statusOf(daemon), 'RUNNING'); }); test('shuts down if no client connects', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); var daemon = await _runDaemon(workspace, timeout: 1); testDaemons.add(daemon); expect(await daemon.exitCode, isNotNull); }); test('can not run if another daemon is running in the same workspace', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); testWorkspaces.add(workspace); var daemonOne = await _runDaemon(workspace, timeout: defaultIdleTimeoutSec * 2); @@ -77,8 +77,8 @@ void main() { }, timeout: const Timeout.factor(2)); test('can run if another daemon is running in a different workspace', () async { - var workspace1 = uuid.v1(); - var workspace2 = uuid.v1(); + var workspace1 = generateV4UUID(); + var workspace2 = generateV4UUID(); testWorkspaces.addAll([workspace1, workspace2]); var daemonOne = await _runDaemon(workspace1); expect(await _statusOf(daemonOne), 'RUNNING'); @@ -87,7 +87,7 @@ void main() { expect(await _statusOf(daemonTwo), 'RUNNING'); }, timeout: const Timeout.factor(2)); test('can start two daemons at the same time', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); testWorkspaces.add(workspace); var daemonOne = await _runDaemon(workspace); expect(await _statusOf(daemonOne), 'RUNNING'); @@ -96,7 +96,7 @@ void main() { testDaemons.addAll([daemonOne, daemonTwo]); }, timeout: const Timeout.factor(2)); test('logs the version when running', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); testWorkspaces.add(workspace); var daemon = await _runDaemon(workspace); testDaemons.add(daemon); @@ -104,12 +104,12 @@ void main() { expect(await Daemon(workspace).runningVersion(), currentVersion); }); test('does not set the current version if not running', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); testWorkspaces.add(workspace); expect(await Daemon(workspace).runningVersion(), null); }); test('logs the options when running', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); testWorkspaces.add(workspace); var daemon = await _runDaemon(workspace); testDaemons.add(daemon); @@ -118,12 +118,12 @@ void main() { (await Daemon(workspace).currentOptions()).contains('foo'), isTrue); }); test('does not log the options if not running', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); testWorkspaces.add(workspace); expect((await Daemon(workspace).currentOptions()).isEmpty, isTrue); }); test('cleans up after itself', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); testWorkspaces.add(workspace); var daemon = await _runDaemon(workspace); // Wait for the daemon to be running before checking the workspace exits. @@ -135,7 +135,7 @@ void main() { expect(Directory(daemonWorkspace(workspace)).existsSync(), isFalse); }); test('daemon stops after file changes stream has error', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); testWorkspaces.add(workspace); var daemon = await _runDaemon(workspace, errorChangeProviderAfterNSeconds: 1); @@ -144,7 +144,7 @@ void main() { expect(Directory(daemonWorkspace(workspace)).existsSync(), isFalse); }); test('daemon stops after file changes stream is closed', () async { - var workspace = uuid.v1(); + var workspace = generateV4UUID(); testWorkspaces.add(workspace); var daemon = await _runDaemon(workspace, closeChangeProviderAfterNSeconds: 1); diff --git a/build_daemon/test/uuid.dart b/build_daemon/test/uuid.dart new file mode 100644 index 000000000..2ede0aec0 --- /dev/null +++ b/build_daemon/test/uuid.dart @@ -0,0 +1,36 @@ +// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Copied from https://github.com/dart-lang/sdk/blob/9d28b1eb9f9cfb7331fef25238be5cba593e37ac/pkg/frontend_server/lib/src/uuid.dart + +import 'dart:math' show Random; + +/// A UUID generator. +/// +/// The generated values are 128 bit numbers encoded in a specific string +/// format. +/// +/// Generate a version 4 (random) uuid. This is a uuid scheme that only uses +/// random numbers as the source of the generated uuid. +// TODO: replace with a MUCH more simple, random string that matches +// the use case. +String generateV4UUID() { + var special = 8 + _random.nextInt(4); + + return '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}-' + '${_bitsDigits(16, 4)}-' + '4${_bitsDigits(12, 3)}-' + '${_printDigits(special, 1)}${_bitsDigits(12, 3)}-' + '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}'; +} + +final Random _random = Random(); + +String _bitsDigits(int bitCount, int digitCount) => + _printDigits(_generateBits(bitCount), digitCount); + +int _generateBits(int bitCount) => _random.nextInt(1 << bitCount); + +String _printDigits(int value, int count) => + value.toRadixString(16).padLeft(count, '0');