# Copyright 2018 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

from util import take_screenshots

testinfra_hosts = ['gitea99.opendev.org']


def test_gitea_listening(host):
    gitea_https = host.socket("tcp://0.0.0.0:3000")
    assert gitea_https.is_listening
    gitea_http = host.socket("tcp://0.0.0.0:3080")
    assert gitea_http.is_listening
    gitea_ssh = host.socket("tcp://0.0.0.0:222")
    assert gitea_ssh.is_listening
    gitea_proxy = host.socket("tcp://0.0.0.0:3081")
    assert gitea_proxy.is_listening

def test_ulimit(host):
    cmd = host.run("docker exec gitea-docker_gitea-web_1 prlimit")
    expected = ("STACK      max stack size                      "
                "16777216 9223372036854775807 bytes")
    assert expected in cmd.stdout.split('\n')

def test_robots(host):
    cmd = host.run('curl --insecure '
                   '--resolve gitea99.opendev.org:3081:127.0.0.1 '
                   'https://gitea99.opendev.org:3081/robots.txt')
    assert 'Disallow: /' in cmd.stdout

def test_matrix_server(host):
    cmd = host.run('curl --insecure -v '
                   '--resolve gitea99.opendev.org:3081:127.0.0.1 '
                   'https://gitea99.opendev.org:3081/.well-known/matrix/server')
    assert '"m.server": "opendev.ems.host:443"' in cmd.stdout
    assert 'Access-Control-Allow-Origin' not in cmd.stderr

def test_matrix_client(host):
    cmd = host.run('curl --insecure -v '
                   '--resolve gitea99.opendev.org:3081:127.0.0.1 '
                   'https://gitea99.opendev.org:3081/.well-known/matrix/client')
    assert '"base_url": "https://opendev.ems.host"' in cmd.stdout
    assert 'Access-Control-Allow-Origin' in cmd.stderr

def test_proxy(host):
    cmd = host.run('curl --insecure '
                   '--resolve gitea99.opendev.org:3081:127.0.0.1 '
                   'https://gitea99.opendev.org:3081/')
    assert 'Git with a cup of tea' in cmd.stdout

def test_proxy_ua_blacklist(host):
    cmd = host.run('curl --insecure -A '
                   '" Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)" '
                   '--resolve gitea99.opendev.org:3081:127.0.0.1 '
                   'https://gitea99.opendev.org:3081/')
    assert '403 Forbidden' in cmd.stdout

def test_ondisk_logs(host):
    mariadb_log = host.file('/var/log/containers/docker-mariadb.log')
    assert mariadb_log.exists

    gitea_log = host.file('/var/log/containers/docker-gitea.log')
    assert gitea_log.exists

    gitea_ssh_log = host.file('/var/log/containers/docker-gitea-ssh.log')
    assert gitea_ssh_log.exists
    assert gitea_ssh_log.contains("Server listening on :: port 222.")

def test_project_clone(host):
    # Note this tests the result of a project rename in gitea as well.
    cmd = host.run(
        'GIT_SSL_NO_VERIFY=1 '
        'git clone https://localhost:3081/opendev/disk-image-builder '
        '/tmp/disk-image-builder')
    assert "Cloning into '/tmp/disk-image-builder'..." in cmd.stderr
    assert cmd.succeeded
    # Check that our default of master is still honored.
    # Gitea defaults to main as of 1.17.0.
    cmd = host.run(
         'git -C /tmp/disk-image-builder '
         'symbolic-ref refs/remotes/origin/HEAD')
    assert "refs/remotes/origin/master" in cmd.stdout
    assert "refs/remotes/origin/main" not in cmd.stdout
    assert cmd.succeeded

def test_partial_project_clone(host):
    cmd = host.run(
        'GIT_SSL_NO_VERIFY=1 '
        'git clone --filter=blob:none '
        'https://localhost:3081/opendev/system-config '
        '/tmp/test-system-config-clone')
    assert "Cloning into '/tmp/test-system-config-clone'..." in cmd.stderr
    assert cmd.succeeded
    # Check that our default of master is still honored.
    # Gitea defaults to main as of 1.17.0.
    cmd = host.run(
         'git -C /tmp/test-system-config-clone '
         'symbolic-ref refs/remotes/origin/HEAD')
    assert "refs/remotes/origin/master" in cmd.stdout
    assert "refs/remotes/origin/main" not in cmd.stdout
    assert cmd.succeeded

def test_gitea_screenshots(host):

        shots = (
            ('https://localhost:3081', None, 'gitea-main.png'),
            ('https://localhost:3081/opendev/system-config', None,
             'gitea-project-system-config.png'),
            ('https://localhost:3081/opendev/disk-image-builder', None,
             'gitea-project-dib.png'),
            ('https://localhost:3081/opendev/', None,
             'gitea-org-opendev.png'),
            ('https://localhost:3081/explore/organizations', None,
             'gitea-org-expore.png'),
        )

        take_screenshots(host, shots)