# 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.
import platform
import pytest

testinfra_hosts = ['bridge.openstack.org']


def test_zuul_data(host, zuul_data):
    # Test the zuul_data fixture that picks up things set by Zuul
    assert 'inventory' in zuul_data
    assert 'extra' in zuul_data
    assert 'zuul' in zuul_data['extra']


def test_clouds_yaml(host):
    clouds_yaml = host.file('/etc/openstack/clouds.yaml')
    assert clouds_yaml.exists

    assert b'password' in clouds_yaml.content


def test_openstacksdk_config(host):
    f = host.file('/etc/openstack')
    assert f.exists
    assert f.is_directory
    assert f.user == 'root'
    assert f.group == 'root'
    assert f.mode == 0o750
    del f

    f = host.file('/etc/openstack/limestone_cacert.pem')
    assert f.exists
    assert f.is_file
    assert f.user == 'root'
    assert f.group == 'root'
    assert f.mode == 0o640


def test_root_authorized_keys(host):
    authorized_keys = host.file('/root/.ssh/authorized_keys')
    assert authorized_keys.exists

    content = authorized_keys.content.decode('utf8')
    lines = content.split('\n')
    assert len(lines) >= 2


def test_ara(host):
    ara = host.run('ara-manage migrate')
    assert ara.rc == 0
    database = host.file('/root/.ara/server/ansible.sqlite')
    assert database.exists


def test_kube_config(host):
    if platform.machine() != 'x86_64':
        pytest.skip()
    kubeconfig = host.file('/root/.kube/config')
    assert kubeconfig.exists

    assert b'Z2l0ZWFfazhzX2tleQ==' in kubeconfig.content


def test_kubectl(host):
    if platform.machine() != 'x86_64':
        pytest.skip()
    kube = host.run('kubectl help')
    assert kube.rc == 0


def test_zuul_authorized_keys(host):
    authorized_keys = host.file('/home/zuul/.ssh/authorized_keys')
    assert authorized_keys.exists

    content = authorized_keys.content.decode('utf8')
    lines = content.split('\n')
    # Remove empty lines
    keys = list(filter(None, lines))
    assert len(keys) >= 2
    for key in keys:
        assert 'ssh-rsa' in key


def test_rax_dns_backup(host):
    config_file = host.file('/etc/rax-dns-auth.conf')
    assert config_file.exists

    tool_file = host.file('/usr/local/bin/rax-dns-backup')
    assert tool_file.exists

    output_dir = host.file('/var/lib/rax-dns-backup')
    assert output_dir.exists