import base64
import json

from setup import get_config_from_file, persist_origin_cert
from util import start_cloudflared


class TestToken:
    def test_get_token(self, tmp_path, component_tests_config):
        config = component_tests_config()
        tunnel_id = config.get_tunnel_id()

        token_args = ["--origincert", cert_path(), "token", tunnel_id]
        output = start_cloudflared(tmp_path, config, token_args)

        assert parse_token(config.get_token()) == parse_token(output.stdout)

    def test_get_credentials_file(self, tmp_path, component_tests_config):
        config = component_tests_config()
        tunnel_id = config.get_tunnel_id()

        cred_file = tmp_path / "test_get_credentials_file.json"
        token_args = ["--origincert", cert_path(), "token", "--cred-file", cred_file, tunnel_id]
        start_cloudflared(tmp_path, config, token_args)

        with open(cred_file) as json_file:
            assert config.get_credentials_json() == json.load(json_file)


def cert_path():
    return get_config_from_file()["origincert"]


def parse_token(token):
    return json.loads(base64.b64decode(token))