Esempio n. 1
0
 def setUp(self):
     self._key = paramiko.RSAKey(
         data=base64.b64decode(TEST_SSH_KEY_FOR_NO_USER))
     self._server = SSHServer()
Esempio n. 2
0
 def setUp(self):
     self._key = paramiko.RSAKey(
         data=base64.b64decode(TEST_SSH_KEY_FOR_NO_USER))
     self._server = SSHServer()
Esempio n. 3
0
class SSHUnitTests(TestCase):
    def setUp(self):
        self._key = paramiko.RSAKey(
            data=base64.b64decode(TEST_SSH_KEY_FOR_NO_USER))
        self._server = SSHServer()

    def test_ssh_handler_decorator_works(self):
        @ssh_handler
        def test(key):
            pass

        self.assertEqual(settings.SSH_HANDLERS.get('test'), test)

    def test_noarg_handler_works(self):
        @ssh_handler
        def noarg(key):
            return 'yay'

        self.assertEqual(self._server.check_auth_publickey('noarg', self._key),
                         paramiko.AUTH_SUCCESSFUL)

    def test_failure_is_propagated_properly(self):
        @ssh_handler
        def failing(key):
            return None

        self.assertEqual(
            self._server.check_auth_publickey('failing', self._key),
            paramiko.AUTH_FAILED)

    def test_argument_splitting_works(self):
        @ssh_handler
        def twoarg(a, b, key):
            if a == '1' and b == '2':
                return 'yay'
            else:
                return None

        self.assertEqual(
            self._server.check_auth_publickey('twoarg+1+2', self._key),
            paramiko.AUTH_SUCCESSFUL)

    def test_default_arguments_work(self):
        @ssh_handler
        def oneortwoarg(a, b='3', key=None):
            if not key:
                raise ValueError('key must not be None')
            if a == '1' and b == '3':
                return 'yay'
            else:
                return None

        self.assertEqual(
            self._server.check_auth_publickey('oneortwoarg+1', self._key),
            paramiko.AUTH_SUCCESSFUL)

    def test_wrong_command_returns_failure(self):
        @ssh_handler
        def somehandler(key):
            return 'er?'

        self.assertEqual(
            self._server.check_auth_publickey('otherhandler', self._key),
            paramiko.AUTH_FAILED)

    def test_missing_arguments_return_failure(self):
        @ssh_handler
        def onearg(arg, key):
            return 'er?'

        self.assertEqual(
            self._server.check_auth_publickey('onearg', self._key),
            paramiko.AUTH_FAILED)

    def test_too_many_arguments_return_failure(self):
        @ssh_handler
        def onearg(arg, key):
            return 'er?'

        self.assertEqual(
            self._server.check_auth_publickey('onearg+1+2', self._key),
            paramiko.AUTH_FAILED)

    def test_typeerror_is_propagated_properly(self):
        @ssh_handler
        def onearg(key):
            raise TypeError

        self.assertRaises(TypeError, self._server.check_auth_publickey,
                          'onearg', self._key)

    def test_result_caching_works(self):
        class Cache(object):
            def __init__(self):
                self.first = True

            def __call__(self, key):
                if self.first:
                    self.first = False
                    return 'yay'
                else:
                    return None

        cache = Cache()

        @ssh_handler
        def cached(key):
            return cache(key)

        if (self._server.check_auth_publickey('cached', self._key) !=
                paramiko.AUTH_SUCCESSFUL):
            raise OkupyError('Test prerequisite failed')
        self.assertEqual(
            self._server.check_auth_publickey('cached', self._key),
            paramiko.AUTH_SUCCESSFUL)

    def test_message_is_printed_to_exec_request(self):
        @ssh_handler
        def noarg(key):
            return 'test-message'

        if (self._server.check_auth_publickey('noarg', self._key) !=
                paramiko.AUTH_SUCCESSFUL):
            raise OkupyError('Test prerequisite failed')

        s1, s2 = socket.socketpair()
        self.assertTrue(self._server.check_channel_exec_request(s1, ':'))
        self.assertEqual(s2.makefile().read().rstrip(), 'test-message')

    def test_message_is_printed_to_shell_request(self):
        @ssh_handler
        def noarg(key):
            return 'test-message'

        if (self._server.check_auth_publickey('noarg', self._key) !=
                paramiko.AUTH_SUCCESSFUL):
            raise OkupyError('Test prerequisite failed')

        s1, s2 = socket.socketpair()
        self.assertTrue(self._server.check_channel_shell_request(s1))
        self.assertEqual(s2.makefile().read().rstrip(), 'test-message')

    def test_cache_is_invalidated_after_channel_request(self):
        class Cache(object):
            def __init__(self):
                self.first = True

            def __call__(self, key):
                if self.first:
                    self.first = False
                    return 'test-message'
                else:
                    return None

        cache = Cache()

        @ssh_handler
        def cached(key):
            return cache(key)

        if (self._server.check_auth_publickey('cached', self._key) !=
                paramiko.AUTH_SUCCESSFUL):
            raise OkupyError('Test prerequisite failed')

        s1, s2 = socket.socketpair()
        if not self._server.check_channel_shell_request(s1):
            raise OkupyError('Test prerequisite failed')
        if s2.makefile().read().rstrip() != 'test-message':
            raise OkupyError('Test prerequisite failed')

        self.assertEqual(
            self._server.check_auth_publickey('cached', self._key),
            paramiko.AUTH_FAILED)
Esempio n. 4
0
class SSHUnitTests(TestCase):
    def setUp(self):
        self._key = paramiko.RSAKey(
            data=base64.b64decode(TEST_SSH_KEY_FOR_NO_USER))
        self._server = SSHServer()

    def test_ssh_handler_decorator_works(self):
        @ssh_handler
        def test(key):
            pass

        self.assertEqual(settings.SSH_HANDLERS.get('test'), test)

    def test_noarg_handler_works(self):
        @ssh_handler
        def noarg(key):
            return 'yay'

        self.assertEqual(
            self._server.check_auth_publickey('noarg', self._key),
            paramiko.AUTH_SUCCESSFUL)

    def test_failure_is_propagated_properly(self):
        @ssh_handler
        def failing(key):
            return None

        self.assertEqual(
            self._server.check_auth_publickey('failing', self._key),
            paramiko.AUTH_FAILED)

    def test_argument_splitting_works(self):
        @ssh_handler
        def twoarg(a, b, key):
            if a == '1' and b == '2':
                return 'yay'
            else:
                return None

        self.assertEqual(
            self._server.check_auth_publickey('twoarg+1+2', self._key),
            paramiko.AUTH_SUCCESSFUL)

    def test_default_arguments_work(self):
        @ssh_handler
        def oneortwoarg(a, b='3', key=None):
            if not key:
                raise ValueError('key must not be None')
            if a == '1' and b == '3':
                return 'yay'
            else:
                return None

        self.assertEqual(
            self._server.check_auth_publickey('oneortwoarg+1', self._key),
            paramiko.AUTH_SUCCESSFUL)

    def test_wrong_command_returns_failure(self):
        @ssh_handler
        def somehandler(key):
            return 'er?'

        self.assertEqual(
            self._server.check_auth_publickey('otherhandler', self._key),
            paramiko.AUTH_FAILED)

    def test_missing_arguments_return_failure(self):
        @ssh_handler
        def onearg(arg, key):
            return 'er?'

        self.assertEqual(
            self._server.check_auth_publickey('onearg', self._key),
            paramiko.AUTH_FAILED)

    def test_too_many_arguments_return_failure(self):
        @ssh_handler
        def onearg(arg, key):
            return 'er?'

        self.assertEqual(
            self._server.check_auth_publickey('onearg+1+2', self._key),
            paramiko.AUTH_FAILED)

    def test_typeerror_is_propagated_properly(self):
        @ssh_handler
        def onearg(key):
            raise TypeError

        self.assertRaises(
            TypeError, self._server.check_auth_publickey, 'onearg', self._key)

    def test_result_caching_works(self):
        class Cache(object):
            def __init__(self):
                self.first = True

            def __call__(self, key):
                if self.first:
                    self.first = False
                    return 'yay'
                else:
                    return None

        cache = Cache()

        @ssh_handler
        def cached(key):
            return cache(key)

        if (self._server.check_auth_publickey('cached', self._key)
                != paramiko.AUTH_SUCCESSFUL):
            raise OkupyError('Test prerequisite failed')
        self.assertEqual(
            self._server.check_auth_publickey('cached', self._key),
            paramiko.AUTH_SUCCESSFUL)

    def test_message_is_printed_to_exec_request(self):
        @ssh_handler
        def noarg(key):
            return 'test-message'

        if (self._server.check_auth_publickey('noarg', self._key)
                != paramiko.AUTH_SUCCESSFUL):
            raise OkupyError('Test prerequisite failed')

        s1, s2 = socket.socketpair()
        self.assertTrue(self._server.check_channel_exec_request(s1, ':'))
        self.assertEqual(s2.makefile().read().rstrip(), 'test-message')

    def test_message_is_printed_to_shell_request(self):
        @ssh_handler
        def noarg(key):
            return 'test-message'

        if (self._server.check_auth_publickey('noarg', self._key)
                != paramiko.AUTH_SUCCESSFUL):
            raise OkupyError('Test prerequisite failed')

        s1, s2 = socket.socketpair()
        self.assertTrue(self._server.check_channel_shell_request(s1))
        self.assertEqual(s2.makefile().read().rstrip(), 'test-message')

    def test_cache_is_invalidated_after_channel_request(self):
        class Cache(object):
            def __init__(self):
                self.first = True

            def __call__(self, key):
                if self.first:
                    self.first = False
                    return 'test-message'
                else:
                    return None

        cache = Cache()

        @ssh_handler
        def cached(key):
            return cache(key)

        if (self._server.check_auth_publickey('cached', self._key)
                != paramiko.AUTH_SUCCESSFUL):
            raise OkupyError('Test prerequisite failed')

        s1, s2 = socket.socketpair()
        if not self._server.check_channel_shell_request(s1):
            raise OkupyError('Test prerequisite failed')
        if s2.makefile().read().rstrip() != 'test-message':
            raise OkupyError('Test prerequisite failed')

        self.assertEqual(
            self._server.check_auth_publickey('cached', self._key),
            paramiko.AUTH_FAILED)