Beispiel #1
0
def test_userinfo_in_conn():
    user1 = properties.UserInfo(password='******',
                                expected_prompt=r'{username}@.+?:~\$ ',
                                username='******')
    DEF_CONN_DICT = dict(proto='ssh',
                         port=922,
                         expected_prompt=r'{username}@.+?:~\$ ',
                         user=user1)
    user2 = properties.UserInfo(password='******', expected_prompt='\$ ')
    d = DeviceBase('localhost',
                   connections=dict(ssh=DEF_CONN_DICT),
                   users=dict(mysshuser=user2))
    with d.conn.open() as user1_conn:
        assert user1_conn.check_output('whoami') == 'learner'
Beispiel #2
0
def test_multiple_users_no_expected_prompt():
    DEF_CONN_DICT = dict(proto='ssh',
                         port=922,
                         expected_prompt=r'{username}@.+?:~\$ ')
    user1 = properties.UserInfo(password='******', expected_prompt=None)
    user2 = properties.UserInfo(password='******', expected_prompt=None)
    d = DeviceBase('localhost',
                   connections=dict(ssh=DEF_CONN_DICT),
                   users=dict(learner=user1, mysshuser=user2))
    d.users.set_default('learner')
    with d.conn.open(user='******') as user1_conn:
        assert user1_conn.check_output('whoami') == 'learner'

    with d.conn.open(user='******') as user1_conn:
        assert user1_conn.check_output('whoami') == 'mysshuser'
Beispiel #3
0
def test_multihop_tunnel_tunnel_by_name():
    user1 = properties.UserInfo(username='******',
                                password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')
    tunnel = dict(hops=[{
        'host': '127.0.0.1',
        'user': user1,
        'port': 922,
        'password': '******'
    }, {
        'host': '127.0.0.1',
        'user': user1,
        'proto': 'telnet'
    }, {
        'host': '127.0.0.1',
        'user': user1
    }])

    d = Device('localhost',
               connections=dict(ssh={}),
               users=dict(learner=user1),
               tunnels=dict(t1=tunnel))
    with d.conn.open(tunnel='t1'):
        try:
            if not d.check_output('whoami') == d.users.default.username:
                raise Exception
            else:
                assert True
        except Exception:
            import pprint
            pprint.pprint(d.conn.get_all_conversations_flat())
            raise
Beispiel #4
0
def test_multihop_mix_proto_tunnel_as_list_of_hops():
    user1 = properties.UserInfo(username='******',
                                password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')
    hops = [{
        'host': '127.0.0.1',
        'user': user1,
        'port': 922,
        'password': '******'
    }, {
        'host': '127.0.0.1',
        'user': user1,
        'proto': 'telnet'
    }, {
        'host': '127.0.0.1',
        'user': user1
    }]

    d = Device('localhost',
               connections=dict(ssh={'tunnel': dict(hops=hops)}),
               users=dict(learner=user1))
    import time
    t0 = time.time()

    with d.conn.open():
        print(time.time() - t0)
        try:
            if not d.check_output('whoami') == d.users.default.username:
                raise Exception
            else:
                assert True
        except Exception:
            import pprint
            pprint.pprint(d.conn.get_all_conversations_flat())
            raise
Beispiel #5
0
def test_saving_restoring_connections_to_db_custom_name():
    class Devices2(TableNamedDevice):
        pass

    update_db_config()

    DEF_CONN_DICT = dict(proto='ssh', port=922)
    user1 = properties.UserInfo(password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')
    d = Devices2('localhost',
                 connections=dict(ssh=DEF_CONN_DICT),
                 users=dict(learner=user1))
    d.os.can_change_prompt = False
    with d.conn.open():
        assert re.search(user1.expected_prompt.format(username='******'),
                         d.conn.prompt.replace('\\', '')) is not None

    try:
        d.save()
    except Exception:
        from fdutils.db import sasessioninit
        #d.dbsession.rollback()
        raise

    d2 = Devices2.get_by_hostname('localhost')
    with d2.conn.open():
        assert re.search(user1.expected_prompt.format(username='******'),
                         d2.conn.prompt_found.replace('\\', '')) is not None
Beispiel #6
0
def test_cmd_connection_no_tunnel():
    user1 = properties.UserInfo(username='******',
                                password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')
    d = Device('localhost',
               connections=dict(
                   t={
                       'proto': 'command',
                       'cmd': 'telnet 127.0.0.1',
                       'user': user1,
                       'can_change_prompt': False
                   }),
               users=dict(learner=user1))
    with pytest.raises(ConnectionError):
        with d.conn.open():
            try:
                if not d.check_output('whoami') == d.users.default.username:
                    raise Exception
                else:
                    assert True
            except Exception:
                import pprint
                pprint.pprint(d.conn.get_all_conversations_flat())

                raise
Beispiel #7
0
def test_device_uses_currently_open_connection_when_using_connection_cmd_directly(
):
    DEF_CONN_DICT = dict(proto='ssh',
                         username='******',
                         port=922,
                         expected_prompt=r'{username}@.+?:~\$ ')
    user1 = properties.UserInfo(password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')
    user2 = properties.UserInfo(password='******', expected_prompt='\$ ')
    d = DeviceBase('localhost',
                   connections=dict(ssh=DEF_CONN_DICT),
                   users=dict(learner=user1,
                              mysshuser=user2,
                              default_name='learner'))
    with d.conn.open(user='******'):
        assert d.check_output('whoami') == 'mysshuser'
Beispiel #8
0
def test_multihop_tunnel_proto_tunnel_as_name():
    user1 = properties.UserInfo(username='******',
                                password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')
    hops = [{
        'host': '127.0.0.1',
        'user': user1,
        'port': 922,
        'password': '******'
    }, {
        'host': '127.0.0.1',
        'user': user1
    }, {
        'host': '127.0.0.1',
        'user': user1
    }]

    d = DeviceBase('localhost',
                   connections=dict(ssh={'tunnel': 'default'}),
                   tunnels=dict(default={'hops': hops}),
                   users=dict(learner=user1))
    with d.conn.open():
        try:
            if not d.check_output('whoami') == d.users.default.username:
                raise Exception
            else:
                assert True
        except Exception:
            import pprint
            pprint.pprint(d.conn.get_all_conversations_flat())
            raise

    print('hello')
Beispiel #9
0
def test_device_add_set_prompt_implicit_by_device_os():
    DEF_CONN_DICT = dict(proto='ssh', port=922)
    user1 = properties.UserInfo(password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')
    d = linux.LinuxDevice('localhost',
                          connections=dict(ssh=DEF_CONN_DICT),
                          users=dict(learner=user1))
    with d.conn.open():
        assert re.search(constants.UNIQUE_PROMPT_RE, d.conn.prompt)
Beispiel #10
0
def test_expected_prompt_from_connection_is_used_when_user_does_nor_provide_it(
):
    DEF_CONN_DICT = dict(proto='ssh',
                         port=922,
                         expected_prompt=r'{username}@.+?:~\$ ')
    user1 = properties.UserInfo(password='******')
    d = DeviceBase('localhost',
                   connections=dict(ssh=DEF_CONN_DICT),
                   users=dict(learner=user1))
    with d.conn.open(user='******') as user1_conn:
        assert user1_conn.check_output('whoami') == 'learner'
Beispiel #11
0
def test_connection_override_device_os_set_prompt():
    DEF_CONN_DICT = dict(proto='ssh', port=922)
    user1 = properties.UserInfo(password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')
    d = linux.LinuxDevice('localhost',
                          connections=dict(ssh=DEF_CONN_DICT),
                          users=dict(learner=user1))
    d.os.can_change_prompt = False
    with d.conn.open():
        assert re.search(user1.expected_prompt.format(username='******'),
                         d.conn.prompt.replace('\\', '')) is not None
Beispiel #12
0
def test_device_add_set_prompt_while_connecting():
    DEF_CONN_DICT = dict(proto='ssh', port=922)
    user1 = properties.UserInfo(password='******',
                                expected_prompt=r'{username}@.+?\:\~\$ ')
    d = DeviceBase('localhost',
                   connections=dict(ssh=DEF_CONN_DICT),
                   users=dict(learner=user1))
    d.os.can_change_prompt = True
    d.os.cmd.set_prompt = lambda prompt: 'export PS1=' + str(prompt)
    with d.conn.open():
        assert re.search(constants.UNIQUE_PROMPT_RE, d.conn.prompt)
Beispiel #13
0
def test_saving_restoring_connections_multihop_to_db():
    update_db_config()

    user1 = properties.UserInfo(username='******',
                                password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')
    jump_boxes = [{
        'host': '127.0.0.1',
        'user': user1,
        'port': 922
    }, {
        'host': '127.0.0.1',
        'user': user1
    }, {
        'host': '127.0.0.1',
        'user': user1
    }]

    d = Device('localhost',
               connections=dict(ssh={'tunnel': dict(hops=jump_boxes)}),
               users=dict(learner=user1),
               encrypt_passwords=True)

    t0 = time.time()
    d.os.can_change_prompt = False
    with d.conn.open():
        print(time.time() - t0)
        assert re.search(user1.expected_prompt.format(username='******'),
                         d.conn.prompt.replace('\\', '')) is not None

    try:
        d.save()
    except Exception:
        from fdutils.db import sasessioninit
        #d.dbsession.rollback()
        raise

    t0 = time.time()
    d2 = Device.get_by_hostname('localhost')
    with d2.conn.open():
        print(time.time() - t0)
        assert re.search(user1.expected_prompt.format(username='******'),
                         d2.conn.prompt_found.replace('\\', '')) is not None
    t0 = time.time()
    with d2.conn.open():
        print(time.time() - t0)
        assert re.search(user1.expected_prompt.format(username='******'),
                         d2.conn.prompt_found.replace('\\', '')) is not None
Beispiel #14
0
def test_saving_restoring_connections_multihop_to_db_reload():
    update_db_config(False, False)

    user1 = properties.UserInfo(username='******',
                                password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')

    t0 = time.time()
    d2 = Device.get_by_host('localhost')
    with d2.conn.open():
        print(time.time() - t0)
        assert re.search(user1.expected_prompt.format(username='******'),
                         d2.conn.prompt_found.replace('\\', '')) is not None
    t0 = time.time()
    with d2.conn.open():
        print(time.time() - t0)
        assert re.search(user1.expected_prompt.format(username='******'),
                         d2.conn.prompt_found.replace('\\', '')) is not None
Beispiel #15
0
def test_remove_user_related_info_from_connection():

    DEF_CONN_DICT = dict(proto='ssh',
                         port=922,
                         username='******',
                         password='******',
                         expected_prompt=r'{username}@.+?:~\$ ')
    user1 = properties.UserInfo(password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')

    d = DeviceBase('localhost',
                   connections=dict(ssh=DEF_CONN_DICT),
                   users=dict(learner=user1))
    d.os.can_change_prompt = False

    for user_attr in ('username', 'password', 'key_filename', 'key_password'):
        with pytest.raises(AttributeError):
            getattr(d.conn.default, user_attr)
Beispiel #16
0
def test_multiple_interfaces():
    DEF_CONN_DICT = dict(proto='ssh',
                         port=922,
                         expected_prompt=r'{username}@.+?:~\$ ')
    user1 = properties.UserInfo(password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')
    d = DeviceBase('localhost',
                   connections=dict(ssh=DEF_CONN_DICT),
                   users=dict(learner=user1),
                   interfaces=dict(default=dict(ip='127.0.0.1'),
                                   second=dict(ip='1.2.3.4'),
                                   default_name='second'))

    with pytest.raises(ConnectionError):
        with d.conn.open() as user1_conn:
            assert user1_conn.check_output('whoami') == 'learner'

    with d.conn.open(interface='default') as user1_conn:
        assert user1_conn.check_output('whoami') == 'learner'
Beispiel #17
0
def test_multihop_hostname_interface():
    user1 = properties.UserInfo(username='******',
                                password='******',
                                expected_prompt=r'{username}@.+?:~\$ ')
    hops = [{
        'host': '127.0.0.1',
        'user': user1,
        'port': 922,
        'password': '******'
    }, {
        'host': '127.0.0.1',
        'user': user1
    }, {
        'user': user1,
        'proto': 'command',
        'cmd': 'telnet 127.0.0.1',
        'can_change_prompt': False
    }]

    d = Device('localhost_name',
               connections=dict(
                   cmd={
                       'tunnel': dict(hops=hops),
                       'proto': 'command',
                       'cmd': 'telnet 127.0.0.1'
                   }),
               interfaces=dict(default={'ip': 'localhost'}),
               users=dict(learner=user1))
    try:
        with d.conn.open():

            if not d.check_output('whoami') == d.users.default.username:
                raise Exception
            else:
                assert True
                print(d.check_output('netstat -ant|grep -v TIME_WAIT'))
    except Exception:
        import pprint
        pprint.pprint(d.conn.get_all_conversations_flat())

        raise