__init__.py 3.97 KB
Newer Older
André Anjos's avatar
André Anjos committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#!/usr/bin/env python
# vim: set fileencoding=utf-8 :

###############################################################################
#                                                                             #
# Copyright (c) 2016 Idiap Research Institute, http://www.idiap.ch/           #
# Contact: beat.support@idiap.ch                                              #
#                                                                             #
# This file is part of the beat.cmdline module of the BEAT platform.          #
#                                                                             #
# Commercial License Usage                                                    #
# Licensees holding valid commercial BEAT licenses may use this file in       #
# accordance with the terms contained in a written agreement between you      #
# and Idiap. For further information contact tto@idiap.ch                     #
#                                                                             #
# Alternatively, this file may be used under the terms of the GNU Affero      #
# Public License version 3 as published by the Free Software and appearing    #
# in the file LICENSE.AGPL included in the packaging of this file.            #
# The BEAT platform is distributed in the hope that it will be useful, but    #
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY  #
# or FITNESS FOR A PARTICULAR PURPOSE.                                        #
#                                                                             #
# You should have received a copy of the GNU Affero Public License along      #
# with the BEAT platform. If not, see http://www.gnu.org/licenses/.           #
#                                                                             #
###############################################################################

# Basic setup for command test

import os
31 32 33 34 35
import sys
import tempfile
import shutil
import subprocess
import pkg_resources
André Anjos's avatar
André Anjos committed
36
import contextlib
André Anjos's avatar
André Anjos committed
37 38 39

import six.moves.urllib as urllib

40
from beat.core.test import tmp_prefix, teardown_package
André Anjos's avatar
André Anjos committed
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66

platform = os.environ.get('BEAT_CMDLINE_TEST_PLATFORM', '')

disconnected = True
if platform:

  # the special name 'django' makes as believe it is connected
  if platform.startswith('django://'):
    # sets up django infrastructure, preloads test data
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', platform[9:])
    import django
    django.setup()

    # presets django database for tests
    from django.core.management import call_command
    call_command('install', 'test', interactive=False, verbose=1)

    disconnected = False

  else: #test it, actually
    # some patching to prevent common problems
    if not platform.endswith('/'): platform += '/'
    if not platform.startswith('http'): platform = 'http://' + platform
    try:
      code = urllib.request.urlopen(platform).getcode()
      disconnected = code != 200
67
    except (IOError, urllib.URLError):
André Anjos's avatar
André Anjos committed
68 69 70 71 72 73
      disconnected = True
else:
  platform = 'User did not set $BEAT_CMDLINE_TEST_PLATFORM'

user = 'user'
token = '4'
74 75 76


if sys.platform == 'darwin':
77 78 79
    prefix_folder = tempfile.mkdtemp(prefix=__name__,
                                     suffix='.prefix',
                                     dir='/tmp')
80
else:
81 82
    prefix_folder = tempfile.mkdtemp(prefix=__name__,
                                     suffix='.prefix')
83

84
prefix = os.path.join(prefix_folder, 'prefix')
85 86 87


def setup_package():
88 89 90 91
    prefixes = [
      pkg_resources.resource_filename('beat.backend.python.test', 'prefix'),
      pkg_resources.resource_filename('beat.core.test', 'prefix')
    ]
92

93 94
    for path in prefixes:
        subprocess.check_call(['rsync', '-arz', path, prefix_folder])
95 96 97


def teardown_package():
98
    shutil.rmtree(prefix_folder)
André Anjos's avatar
André Anjos committed
99 100 101 102 103 104 105 106 107 108 109


@contextlib.contextmanager
def temp_cwd():
    tempdir = tempfile.mkdtemp(prefix=__name__, suffix='.cwd')
    curdir = os.getcwd()
    os.chdir(tempdir)
    try: yield tempdir
    finally:
      os.chdir(curdir)
      shutil.rmtree(tempdir)