I really hate Expect....    It is NOT behaving predictably.   I added
straces to the first 2 uses, and then just had the 3rd and 4th tests
suddently work.... and then they both fail again the next time!!   I *am*
getting predictable results for the first pair, but I can't explain them.

The one that succeeds shows:

sendto(4, "<30>Jun  7 23:21:39 efsclient[13461]: Calling read_password\n",
60, MSG_NOSIGNAL, NULL, 0) = 60
close(4)                                = 0
stat("/dev/tty", {st_mode=S_IFCHR|0666, st_rdev=makedev(5, 0), ...}) = 0
open("/dev/tty", O_RDWR)                = 4
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...})
= 0
lseek(4, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
fstat(4, {st_mode=S_IFCHR|0666, st_rdev=makedev(5, 0), ...}) = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
open("/dev/tty", O_WRONLY|O_CREAT|O_APPEND, 0666) = 5
lseek(5, 0, SEEK_END)                   = -1 ESPIPE (Illegal seek)
ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...})
= 0
lseek(5, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
fstat(5, {st_mode=S_IFCHR|0666, st_rdev=makedev(5, 0), ...}) = 0
fcntl(5, F_SETFD, FD_CLOEXEC)           = 0
write(5, "Password for efstest: ", 22)  = 22
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...})
= 0
ioctl(4, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost -isig -icanon -echo
...}) = 0
read(4, "efstest\n", 99)                = 8
write(5, "\n", 1)                       = 1
ioctl(4, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost isig icanon echo
...}) = 0
close(4)                                = 0
close(5)                                = 0

The one that fails shows:

sendto(4, "<30>Jun  7 23:21:43 efsclient[13478]: Calling read_password\n",
60, MSG_NOSIGNAL, NULL, 0) = 60
close(4)                                = 0
stat("/dev/tty", {st_mode=S_IFCHR|0666, st_rdev=makedev(5, 0), ...}) = 0
open("/dev/tty", O_RDWR)                = 4
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...})
= 0
lseek(4, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
fstat(4, {st_mode=S_IFCHR|0666, st_rdev=makedev(5, 0), ...}) = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
open("/dev/tty", O_WRONLY|O_CREAT|O_APPEND, 0666) = 5
lseek(5, 0, SEEK_END)                   = -1 ESPIPE (Illegal seek)
ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...})
= 0
lseek(5, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
fstat(5, {st_mode=S_IFCHR|0666, st_rdev=makedev(5, 0), ...}) = 0
fcntl(5, F_SETFD, FD_CLOEXEC)           = 0
write(5, "Password for efstest: ", 22)  = 22
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...})
= 0
ioctl(4, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost -isig -icanon -echo
...}) = 0
read(4, "", 99)                         = 0
--- SIGHUP (Hangup) @ 0 (0) ---

Both uses of expect are nearly IDENTICAL code, as far as talking to the
process is concerned.



On Mon, Jun 7, 2010 at 11:09 PM, Phillip Moore <[email protected]>wrote:

> The 15_security/20_cli.y test has been broken for quite sometime, and I
> finally got around to fixing it, since I NEED to test the CLI logic, after
> totally reworking the code.   I addresses the obvious issue (we always
> skipped the last 4 tests), and now I've got a VERY strange problem that has
> me stumped (been awhile...)
>
> There are four tests that use expect, and they are almost identical.  The
> first one works fine, the second fails, and after tossing syslog calls into
> the code, I have tracked the problem to here: in EFS/CLI.pm, in
> query_password, I have:
>
>     EFS::Syslog->message( q{info}, q{Calling read_password} );
>     my $authpass = q{};
>     eval { $authpass = read_password($args{prompt}) };
>     EFS::Syslog->message( q{info}, q{Eval is done} );
>     my $eval_error = $EVAL_ERROR;
>     if ( $eval_error ) {
>         EFS::Syslog->message( q{err}, q{Failed to read password:
> $eval_error} );
>     }
>     elsif ( not $authpass ) {
>         EFS::Syslog->message( q{info}, q{Null password} );
>     }
>     else {
>         EFS::Syslog->message( q{info}, q{Successfully read password} );
>     }
>
> The "Eval is done" message NEVER shows up, and the process is dying at that
> point.  I am about to resort to stracing the process, but under what
> situation does eval NOT trap an exception?
>
> Suggestions?
>
_______________________________________________
EFS-dev mailing list
[email protected]
http://mailman.openefs.org/mailman/listinfo/efs-dev

Reply via email to