Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
9decc0dc
Commit
9decc0dc
authored
Mar 07, 2007
by
Georg Brandl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Patch #1675471: convert test_pty to unittest.
parent
05c075d6
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
123 additions
and
116 deletions
+123
-116
Lib/test/output/test_pty
Lib/test/output/test_pty
+0
-3
Lib/test/test_pty.py
Lib/test/test_pty.py
+123
-113
No files found.
Lib/test/output/test_pty
deleted
100644 → 0
View file @
05c075d6
test_pty
I wish to buy a fish license.
For my pet fish, Eric.
Lib/test/test_pty.py
View file @
9decc0dc
import
pty
,
os
,
sys
,
signal
import
pty
from
test.test_support
import
verbose
,
TestFailed
,
TestSkipped
import
os
import
signal
from
test.test_support
import
verbose
,
TestSkipped
,
run_unittest
import
unittest
TEST_STRING_1
=
"I wish to buy a fish license.
\
n
"
TEST_STRING_1
=
"I wish to buy a fish license.
\
n
"
TEST_STRING_2
=
"For my pet fish, Eric.
\
n
"
TEST_STRING_2
=
"For my pet fish, Eric.
\
n
"
...
@@ -11,6 +14,7 @@ else:
...
@@ -11,6 +14,7 @@ else:
def
debug
(
msg
):
def
debug
(
msg
):
pass
pass
def
normalize_output
(
data
):
def
normalize_output
(
data
):
# Some operating systems do conversions on newline. We could possibly
# Some operating systems do conversions on newline. We could possibly
# fix that by doing the appropriate termios.tcsetattr()s. I couldn't
# fix that by doing the appropriate termios.tcsetattr()s. I couldn't
...
@@ -32,58 +36,59 @@ def normalize_output(data):
...
@@ -32,58 +36,59 @@ def normalize_output(data):
return
data
return
data
# Marginal testing of pty suite. Cannot do extensive 'do or fail' testing
# Marginal testing of pty suite. Cannot do extensive 'do or fail' testing
# because pty code is not too portable.
# because pty code is not too portable.
class
PtyTest
(
unittest
.
TestCase
):
def
setUp
(
self
):
# isatty() and close() can hang on some platforms. Set an alarm
# before running the test to make sure we don't hang forever.
self
.
old_alarm
=
signal
.
signal
(
signal
.
SIGALRM
,
self
.
handle_sig
)
signal
.
alarm
(
10
)
def
tearDown
(
self
):
# remove alarm, restore old alarm handler
signal
.
alarm
(
0
)
signal
.
signal
(
signal
.
SIGALRM
,
self
.
old_alarm
)
def
test_basic_pty
():
def
handle_sig
(
self
,
sig
,
frame
):
self
.
fail
(
"isatty hung"
)
def
test_basic
(
self
):
try
:
try
:
debug
(
"Calling master_open()"
)
debug
(
"Calling master_open()"
)
master_fd
,
slave_name
=
pty
.
master_open
()
master_fd
,
slave_name
=
pty
.
master_open
()
debug
(
"Got master_fd '%d', slave_name '%s'"
%
(
master_fd
,
slave_name
))
debug
(
"Got master_fd '%d', slave_name '%s'"
%
debug
(
"Calling slave_open(%r)"
%
(
slave_name
,))
(
master_fd
,
slave_name
))
debug
(
"Calling slave_open(%r)"
%
(
slave_name
,))
slave_fd
=
pty
.
slave_open
(
slave_name
)
slave_fd
=
pty
.
slave_open
(
slave_name
)
debug
(
"Got slave_fd '%d'"
%
slave_fd
)
debug
(
"Got slave_fd '%d'"
%
slave_fd
)
except
OSError
:
except
OSError
:
# " An optional feature could not be imported " ... ?
# " An optional feature could not be imported " ... ?
raise
TestSkipped
,
"Pseudo-terminals (seemingly) not functional."
raise
TestSkipped
,
"Pseudo-terminals (seemingly) not functional."
if
not
os
.
isatty
(
slave_fd
):
self
.
assertTrue
(
os
.
isatty
(
slave_fd
),
'slave_fd is not a tty'
)
raise
TestFailed
,
"slave_fd is not a tty"
debug
(
"Writing to slave_fd"
)
debug
(
"Writing to slave_fd"
)
os
.
write
(
slave_fd
,
TEST_STRING_1
)
os
.
write
(
slave_fd
,
TEST_STRING_1
)
s1
=
os
.
read
(
master_fd
,
1024
)
s1
=
os
.
read
(
master_fd
,
1024
)
sys
.
stdout
.
write
(
normalize_output
(
s1
))
self
.
assertEquals
(
'I wish to buy a fish license.
\
n
'
,
normalize_output
(
s1
))
debug
(
"Writing chunked output"
)
debug
(
"Writing chunked output"
)
os
.
write
(
slave_fd
,
TEST_STRING_2
[:
5
])
os
.
write
(
slave_fd
,
TEST_STRING_2
[:
5
])
os
.
write
(
slave_fd
,
TEST_STRING_2
[
5
:])
os
.
write
(
slave_fd
,
TEST_STRING_2
[
5
:])
s2
=
os
.
read
(
master_fd
,
1024
)
s2
=
os
.
read
(
master_fd
,
1024
)
sys
.
stdout
.
write
(
normalize_output
(
s2
))
self
.
assertEquals
(
'For my pet fish, Eric.
\
n
'
,
normalize_output
(
s2
))
os
.
close
(
slave_fd
)
os
.
close
(
slave_fd
)
os
.
close
(
master_fd
)
os
.
close
(
master_fd
)
def
handle_sig
(
sig
,
frame
):
raise
TestFailed
,
"isatty hung"
# isatty() and close() can hang on some platforms
# set an alarm before running the test to make sure we don't hang forever
old_alarm
=
signal
.
signal
(
signal
.
SIGALRM
,
handle_sig
)
signal
.
alarm
(
10
)
try
:
test_basic_pty
()
finally
:
# remove alarm, restore old alarm handler
signal
.
alarm
(
0
)
signal
.
signal
(
signal
.
SIGALRM
,
old_alarm
)
# basic pty passed.
def
test_fork
(
self
):
debug
(
"calling pty.fork()"
)
debug
(
"calling pty.fork()"
)
pid
,
master_fd
=
pty
.
fork
()
pid
,
master_fd
=
pty
.
fork
()
if
pid
==
pty
.
CHILD
:
if
pid
==
pty
.
CHILD
:
# stdout should be connected to a tty.
# stdout should be connected to a tty.
if
not
os
.
isatty
(
1
):
if
not
os
.
isatty
(
1
):
debug
(
"Child's fd 1 is not a tty?!"
)
debug
(
"Child's fd 1 is not a tty?!"
)
...
@@ -99,8 +104,8 @@ if pid == pty.CHILD:
...
@@ -99,8 +104,8 @@ if pid == pty.CHILD:
debug
(
"Good: OSError was raised."
)
debug
(
"Good: OSError was raised."
)
pass
pass
except
AttributeError
:
except
AttributeError
:
# Have pty, but not setsid()
?
# Have pty, but not setsid()
?
debug
(
"No setsid() available
?"
)
debug
(
"No setsid() available
?"
)
pass
pass
except
:
except
:
# We don't want this error to propagate, escaping the call to
# We don't want this error to propagate, escaping the call to
...
@@ -113,8 +118,8 @@ if pid == pty.CHILD:
...
@@ -113,8 +118,8 @@ if pid == pty.CHILD:
debug
(
"os.setsid() succeeded! (bad!)"
)
debug
(
"os.setsid() succeeded! (bad!)"
)
os
.
_exit
(
2
)
os
.
_exit
(
2
)
os
.
_exit
(
4
)
os
.
_exit
(
4
)
else
:
else
:
debug
(
"Waiting for child (%d) to finish."
%
pid
)
debug
(
"Waiting for child (%d) to finish."
%
pid
)
##line = os.read(master_fd, 80)
##line = os.read(master_fd, 80)
##lines = line.replace('\r\n', '\n').split('\n')
##lines = line.replace('\r\n', '\n').split('\n')
##if False and lines != ['In child, calling os.setsid()',
##if False and lines != ['In child, calling os.setsid()',
...
@@ -123,15 +128,15 @@ else:
...
@@ -123,15 +128,15 @@ else:
(
pid
,
status
)
=
os
.
waitpid
(
pid
,
0
)
(
pid
,
status
)
=
os
.
waitpid
(
pid
,
0
)
res
=
status
>>
8
res
=
status
>>
8
debug
(
"Child (%d) exited with status %d (%d)."
%
(
pid
,
res
,
status
))
debug
(
"Child (%d) exited with status %d (%d)."
%
(
pid
,
res
,
status
))
if
res
==
1
:
if
res
==
1
:
raise
TestFailed
,
"Child raised an unexpected exception in os.setsid()"
self
.
fail
(
"Child raised an unexpected exception in os.setsid()"
)
elif
res
==
2
:
elif
res
==
2
:
raise
TestFailed
,
"pty.fork() failed to make child a session leader."
self
.
fail
(
"pty.fork() failed to make child a session leader."
)
elif
res
==
3
:
elif
res
==
3
:
raise
TestFailed
,
"Child spawned by pty.fork() did not have a tty as stdout"
self
.
fail
(
"Child spawned by pty.fork() did not have a tty as stdout"
)
elif
res
!=
4
:
elif
res
!=
4
:
raise
TestFailed
,
"pty.fork() failed for unknown reasons."
self
.
fail
(
"pty.fork() failed for unknown reasons."
)
##debug("Reading from master_fd now that the child has exited")
##debug("Reading from master_fd now that the child has exited")
##try:
##try:
...
@@ -141,7 +146,12 @@ else:
...
@@ -141,7 +146,12 @@ else:
##else:
##else:
## raise TestFailed("Read from master_fd did not raise exception")
## raise TestFailed("Read from master_fd did not raise exception")
os
.
close
(
master_fd
)
# pty.fork() passed.
os
.
close
(
master_fd
)
def
test_main
(
verbose
=
None
):
run_unittest
(
PtyTest
)
# pty.fork() passed.
if
__name__
==
"__main__"
:
test_main
()
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