issue #363: add test.

pull/607/head
David Wilson 6 years ago
parent baafc746fe
commit 3a1125a7bd

@ -4,6 +4,16 @@ import json
import os import os
import subprocess import subprocess
import sys import sys
import time
# #363: old input loop would fail to spot auth failure because of scheduling
# vs. su calling write() twice.
if 'DO_SLOW_AUTH_FAILURE' in os.environ:
os.write(2, 'su: ')
time.sleep(0.5)
os.write(2, 'incorrect password\n')
os._exit(1)
os.environ['ORIGINAL_ARGV'] = json.dumps(sys.argv) os.environ['ORIGINAL_ARGV'] = json.dumps(sys.argv)
os.environ['THIS_IS_STUB_SU'] = '1' os.environ['THIS_IS_STUB_SU'] = '1'

@ -11,11 +11,11 @@ import testlib
class ConstructorTest(testlib.RouterMixin, testlib.TestCase): class ConstructorTest(testlib.RouterMixin, testlib.TestCase):
su_path = testlib.data_path('stubs/stub-su.py') stub_su_path = testlib.data_path('stubs/stub-su.py')
def run_su(self, **kwargs): def run_su(self, **kwargs):
context = self.router.su( context = self.router.su(
su_path=self.su_path, su_path=self.stub_su_path,
**kwargs **kwargs
) )
argv = eval(context.call(os.getenv, 'ORIGINAL_ARGV')) argv = eval(context.call(os.getenv, 'ORIGINAL_ARGV'))
@ -28,6 +28,19 @@ class ConstructorTest(testlib.RouterMixin, testlib.TestCase):
class SuTest(testlib.DockerMixin, testlib.TestCase): class SuTest(testlib.DockerMixin, testlib.TestCase):
stub_su_path = testlib.data_path('stubs/stub-su.py')
def test_slow_auth_failure(self):
# #363: old input loop would fail to spot auth failure because of
# scheduling vs. su calling write() twice.
os.environ['DO_SLOW_AUTH_FAILURE'] = '1'
try:
self.assertRaises(mitogen.su.PasswordError,
lambda: self.router.su(su_path=self.stub_su_path)
)
finally:
del os.environ['DO_SLOW_AUTH_FAILURE']
def test_password_required(self): def test_password_required(self):
ssh = self.docker_ssh( ssh = self.docker_ssh(
username='mitogen__has_sudo', username='mitogen__has_sudo',

Loading…
Cancel
Save