import ftplib

import pytest

from tests.live.conftest import assert_rfc5424


@pytest.mark.live
class TestFTPLive:
    def test_banner_received(self, live_service):
        port, drain = live_service("ftp")
        ftp = ftplib.FTP()
        ftp.connect("127.0.0.1", port, timeout=5)
        welcome = ftp.getwelcome()
        ftp.close()
        assert "220" in welcome or "vsFTPd" in welcome or len(welcome) > 0

    def test_login_logged(self, live_service):
        port, drain = live_service("ftp")
        ftp = ftplib.FTP()
        ftp.connect("127.0.0.1", port, timeout=5)
        try:
            ftp.login("admin", "hunter2")
        except ftplib.all_errors:
            pass
        finally:
            ftp.close()
        lines = drain()
        assert_rfc5424(lines, service="ftp")

    def test_connect_logged(self, live_service):
        port, drain = live_service("ftp")
        ftp = ftplib.FTP()
        ftp.connect("127.0.0.1", port, timeout=5)
        ftp.close()
        lines = drain()
        # At least one RFC 5424 line from the ftp service
        rfc_lines = [line for line in lines if "<" in line and ">1 " in line and "ftp" in line]
        assert rfc_lines, "No ftp RFC 5424 lines found. stdout:\n" + "\n".join(lines[:15])
