#!/usr/share/ucs-test/runner python
## -*- coding: utf-8 -*-
## desc: test load and store
## tags: [apptest]
## exposure: dangerous
## packages:
##   - univention-google-apps

import base64
import datetime
import shutil
import atexit

import univention.testing.strings as uts
import univention.testing.utils as utils

from univention.googleapps.auth import GappsAuth, CREDENTIALS_FILE

DATETIME_FORMAT = "%Y-%m-%d_%H:%M:%S"
CREDENTIALS_FILE_BAK = "{}.bak_{}".format(CREDENTIALS_FILE, datetime.datetime.now().strftime(DATETIME_FORMAT.replace(" ", "_")))

try:
	shutil.move(CREDENTIALS_FILE, CREDENTIALS_FILE_BAK)
	has_backup = True
except IOError:
	has_backup = False


@atexit.register
def move_cred_file_bak():
	if has_backup:
		try:
			shutil.move(CREDENTIALS_FILE_BAK, CREDENTIALS_FILE)
		except IOError:
			pass


ga = GappsAuth(None)

email = uts.random_string()
key = uts.random_string()
sub = uts.random_string()
domain = "{}.{}".format(uts.random_string(), uts.random_string())
client_id = uts.random_string()
data = dict(client_email=email, private_key=key, client_id=client_id)

ga.store_credentials(data, impersonate_user=sub, domain=domain)
cred = ga.get_credentials()

if not (
	cred.service_account_name == email and
	cred.private_key == base64.b64encode(key) and
	cred.kwargs["sub"] == sub and
	cred.kwargs["client_id"] == client_id):
		utils.fail("GappsAuth.store_credentials() -> Storage.get() didn't return what was expected.")
