Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
bb4a5fa7
Unverified
Commit
bb4a5fa7
authored
Mar 14, 2022
by
Christopher Fujino
Committed by
GitHub
Mar 14, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[flutter_tools] exec rather than spawn subprocess from bin/internal/shared.sh (#99871)
parent
b33249c3
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
98 additions
and
2 deletions
+98
-2
shared.sh
bin/internal/shared.sh
+2
-2
bash_entrypoint_test.dart
...er_tools/test/integration.shard/bash_entrypoint_test.dart
+71
-0
listen_for_sigterm.dart
.../test/integration.shard/test_data/listen_for_sigterm.dart
+25
-0
No files found.
bin/internal/shared.sh
View file @
bb4a5fa7
...
...
@@ -222,10 +222,10 @@ function shared::execute() {
flutter
*
)
# FLUTTER_TOOL_ARGS aren't quoted below, because it is meant to be
# considered as separate space-separated args.
"
$DART
"
--disable-dart-dev
--packages
=
"
$FLUTTER_TOOLS_DIR
/.packages"
$FLUTTER_TOOL_ARGS
"
$SNAPSHOT_PATH
"
"
$@
"
exec
"
$DART
"
--disable-dart-dev
--packages
=
"
$FLUTTER_TOOLS_DIR
/.packages"
$FLUTTER_TOOL_ARGS
"
$SNAPSHOT_PATH
"
"
$@
"
;;
dart
*
)
"
$DART
"
"
$@
"
exec
"
$DART
"
"
$@
"
;;
*
)
>
&2
echo
"Error! Executable name
$BIN_NAME
not recognized!"
...
...
packages/flutter_tools/test/integration.shard/bash_entrypoint_test.dart
0 → 100644
View file @
bb4a5fa7
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:async'
;
import
'dart:convert'
;
import
'package:file/file.dart'
;
import
'package:flutter_tools/src/base/io.dart'
;
import
'../src/common.dart'
;
import
'test_utils.dart'
;
final
String
flutterRootPath
=
getFlutterRoot
();
final
Directory
flutterRoot
=
fileSystem
.
directory
(
flutterRootPath
);
Future
<
void
>
main
()
async
{
test
(
'verify terminating flutter/bin/dart terminates the underlying dart process'
,
()
async
{
final
Completer
<
void
>
childReadyCompleter
=
Completer
<
void
>();
String
stdout
=
''
;
final
Process
process
=
await
processManager
.
start
(
<
String
>[
dartBash
.
path
,
listenForSigtermScript
.
path
,
],
);
final
Future
<
Object
?>
stdoutFuture
=
process
.
stdout
.
transform
<
String
>(
utf8
.
decoder
)
.
forEach
((
String
str
)
{
stdout
+=
str
;
if
(
stdout
.
contains
(
'Ready to receive signals'
)
&&
!
childReadyCompleter
.
isCompleted
)
{
childReadyCompleter
.
complete
();
}
});
// Ensure that the child app has registered its signal handler
await
childReadyCompleter
.
future
;
final
bool
killSuccess
=
process
.
kill
();
expect
(
killSuccess
,
true
);
// Wait for stdout to complete
await
stdoutFuture
;
// Ensure child exited successfully
expect
(
await
process
.
exitCode
,
0
,
reason:
'child process exited with code
${await process.exitCode}
, and '
'stdout:
\n
$stdout
'
,
);
expect
(
stdout
,
contains
(
'Successfully received SIGTERM!'
));
},
skip:
platform
.
isWindows
);
// [intended] Windows does not use the bash entrypoint
}
// A test Dart app that will run until it receives SIGTERM
File
get
listenForSigtermScript
{
return
flutterRoot
.
childDirectory
(
'packages'
)
.
childDirectory
(
'flutter_tools'
)
.
childDirectory
(
'test'
)
.
childDirectory
(
'integration.shard'
)
.
childDirectory
(
'test_data'
)
.
childFile
(
'listen_for_sigterm.dart'
)
.
absolute
;
}
// The executable bash entrypoint for the Dart binary.
File
get
dartBash
{
return
flutterRoot
.
childDirectory
(
'bin'
)
.
childFile
(
'dart'
)
.
absolute
;
}
packages/flutter_tools/test/integration.shard/test_data/listen_for_sigterm.dart
0 → 100644
View file @
bb4a5fa7
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:async'
;
import
'package:flutter_tools/src/base/io.dart'
;
// This application will log to STDOUT and exit with 0 when it receives the
// SIGTERM signal.
Future
<
void
>
main
()
async
{
final
Stdout
stdout
=
Stdio
().
stdout
;
final
Stream
<
ProcessSignal
>
interruptStream
=
ProcessSignal
.
sigterm
.
watch
();
interruptStream
.
listen
((
_
)
{
// The test should assert that this was logged
stdout
.
writeln
(
'Successfully received SIGTERM!'
);
exit
(
0
);
});
// The test should wait for this message before sending SIGTERM, or else the
// listener may not have been registered.
stdout
.
writeln
(
'Ready to receive signals'
);
await
Future
<
void
>.
delayed
(
const
Duration
(
seconds:
10
));
stdout
.
writeln
(
'Did not receive SIGTERM!'
);
exit
(
1
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment