threads / patch / 37968

v4Allow TTY tests to run under recent Mac OS

Subject: [PATCH v4] Allow TTY tests to run under recent Mac OS

## tl;dr

5 messages between Nov 14, 2014 and Nov 15, 2014. Diffs are folded; open one to read it.

replies: 4people: 4as markdown or json

Mike Blume· Nov 14, 2014, 20:13 UTC · lore

TTY tests were previously skipped on all Mac OS systems because of a bug where reading from pty master occasionally hung. This bug has since been found not to be reproducible under Mac OS 10.9 and 10.10.1.

Therefore, run TTY tests under Mac OS 10.9 (Mavericks) and higher.
Signed-off-by: Mike Blume <blume.mike@gmail.com>
Improved-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Improved-by: John Szakmeister <john@szakmeister.net>
Improved-by: Johannes Sixt <j6t@kdbg.org>
Improved-by: Jeff King <peff@peff.net>
---
 t/lib-terminal.sh | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
Show changes to t/lib-terminal.sh +6 −1
diff --git a/t/lib-terminal.sh b/t/lib-terminal.sh
index 5184549..275fb09 100644
--- a/t/lib-terminal.sh
+++ b/t/lib-terminal.sh
@@ -29,7 +29,12 @@ test_lazy_prereq TTY '
 	# After 2000 iterations or so it hangs.
 	# https://rt.cpan.org/Ticket/Display.html?id=65692
 	#
-	test "$(uname -s)" != Darwin &&
+	# Under Mac OS X 10.9, this problem appears to be gone.
+	#
+	{
+		test "$(uname -s)" != Darwin ||
+		test "$(uname -r | cut -d. -f1)" -ge 13
+	} &&
 
 	perl "$TEST_DIRECTORY"/test-terminal.perl \
 		sh -c "test -t 1 && test -t 2"
-- 
2.2.0.rc1.197.g60bf093
Junio C Hamano· Nov 14, 2014, 20:20 UTC · re: Mike Blume · lore

Re: [PATCH v4] Allow TTY tests to run under recent Mac OS

Mike Blume <blume.mike@gmail.com> writes:
Show 13 quoted lines
> TTY tests were previously skipped on all Mac OS systems because of a
> bug where reading from pty master occasionally hung. This bug has since
> been found not to be reproducible under Mac OS 10.9 and 10.10.1.
>
> Therefore, run TTY tests under Mac OS 10.9 (Mavericks) and higher.
>
> Signed-off-by: Mike Blume <blume.mike@gmail.com>
> Improved-by: Junio C Hamano <gitster@pobox.com>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> Improved-by: John Szakmeister <john@szakmeister.net>
> Improved-by: Johannes Sixt <j6t@kdbg.org>
> Improved-by: Jeff King <peff@peff.net>
> ---
The patch in this round looks good.  Will queue.
Thanks all who helped.
Show 21 quoted lines
>  t/lib-terminal.sh | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/t/lib-terminal.sh b/t/lib-terminal.sh
> index 5184549..275fb09 100644
> --- a/t/lib-terminal.sh
> +++ b/t/lib-terminal.sh
> @@ -29,7 +29,12 @@ test_lazy_prereq TTY '
>  	# After 2000 iterations or so it hangs.
>  	# https://rt.cpan.org/Ticket/Display.html?id=65692
>  	#
> -	test "$(uname -s)" != Darwin &&
> +	# Under Mac OS X 10.9, this problem appears to be gone.
> +	#
> +	{
> +		test "$(uname -s)" != Darwin ||
> +		test "$(uname -r | cut -d. -f1)" -ge 13
> +	} &&
>  
>  	perl "$TEST_DIRECTORY"/test-terminal.perl \
>  		sh -c "test -t 1 && test -t 2"
Jonathan Nieder· Nov 14, 2014, 23:21 UTC · re: Mike Blume · lore

Re: [PATCH v4] Allow TTY tests to run under recent Mac OS

Hi,
Mike Blume wrote:
Show 5 quoted lines
> TTY tests were previously skipped on all Mac OS systems because of a
> bug where reading from pty master occasionally hung. This bug has since
> been found not to be reproducible under Mac OS 10.9 and 10.10.1.
>
> Therefore, run TTY tests under Mac OS 10.9 (Mavericks) and higher.
*puzzled* Testing on Yosemite with the following script[1]
	perl -MIO::Pty -MFile::Copy -e '
	       for (my $i = 0;; $i++) {
		       my $master = new IO::Pty;
		       my $slave = $master->slave;
		       if (fork == 0) {
			       close $master or die "close: $!";
			       open STDOUT, ">&", $slave or die "dup2: $!";
			       close $slave or die "close: $!";
			       exec("echo", "hi", $i) or die "exec: $!";
		       }
		       close $slave or die "close: $!";
		       copy($master, \*STDOUT) or die "copy: $!";
		       close $master or die "close: $!";
		       wait;
	       }
	'

still seems to hang eventually (after 61 iterations when my officemate tried it), reproducing the bug.

Do you get a different result?

The bug was originally found in an autobuilder that would run the test suite when new versions were pushed to check for regressions. Even if the hang only happened 0.1% of the time, that would get the autobuilder stuck after a while, which was how the problem got noticed.

Thanks, Jonathan

[1] https://rt.cpan.org/Public/Bug/Display.html?id=65692
Junio C Hamano· Nov 14, 2014, 23:29 UTC · re: Jonathan Nieder · lore

Re: [PATCH v4] Allow TTY tests to run under recent Mac OS

Jonathan Nieder <jrnieder@gmail.com> writes:
> *puzzled* Testing on Yosemite with the following script[1]
> ...
> still seems to hang eventually (after 61 iterations when my officemate
> tried it), reproducing the bug.

Thanks. I've merged it to 'next' and pushed out the result already, but we may probably have to drop it.

John Szakmeister· Nov 15, 2014, 00:14 UTC · re: Jonathan Nieder · lore

Re: [PATCH v4] Allow TTY tests to run under recent Mac OS

On Fri, Nov 14, 2014 at 6:21 PM, Jonathan Nieder <jrnieder@gmail.com> wrote:
Show 33 quoted lines
> Hi,
>
> Mike Blume wrote:
>
>> TTY tests were previously skipped on all Mac OS systems because of a
>> bug where reading from pty master occasionally hung. This bug has since
>> been found not to be reproducible under Mac OS 10.9 and 10.10.1.
>>
>> Therefore, run TTY tests under Mac OS 10.9 (Mavericks) and higher.
>
> *puzzled* Testing on Yosemite with the following script[1]
>
>         perl -MIO::Pty -MFile::Copy -e '
>                for (my $i = 0;; $i++) {
>                        my $master = new IO::Pty;
>                        my $slave = $master->slave;
>                        if (fork == 0) {
>                                close $master or die "close: $!";
>                                open STDOUT, ">&", $slave or die "dup2: $!";
>                                close $slave or die "close: $!";
>                                exec("echo", "hi", $i) or die "exec: $!";
>                        }
>                        close $slave or die "close: $!";
>                        copy($master, \*STDOUT) or die "copy: $!";
>                        close $master or die "close: $!";
>                        wait;
>                }
>         '
>
> still seems to hang eventually (after 61 iterations when my officemate
> tried it), reproducing the bug.
>
> Do you get a different result?

Interesting. It took quite a while, but it did finally fail on my Mavericks box on the 115,140th iteration.

Show 5 quoted lines
> The bug was originally found in an autobuilder that would run the test
> suite when new versions were pushed to check for regressions.  Even if
> the hang only happened 0.1% of the time, that would get the
> autobuilder stuck after a while, which was how the problem got
> noticed.
Eek... that's nasty.
-John

← back to recent threads