Ejemplo n.º 1
0
 def generate_schema(cls, context, *args, **kwargs):
     session = execution_session.ExecutionSession()
     session.token = context['token']
     session.project_id = context['project_id']
     with package_loader.CombinedPackageLoader(session) as pkg_loader:
         return schema_generator.generate_schema(
             pkg_loader, ContextManager(), *args, **kwargs)
Ejemplo n.º 2
0
    def execute(self):
        try:
            self._create_trust()
        except Exception as e:
            return self.exception_result(e, None, '<system>')

        with package_loader.CombinedPackageLoader(self._session) as pkg_loader:
            pkg_loader.import_fixation_table(
                self._session.system_attributes.get('Packages', {}))
            result = self._execute(pkg_loader)
            self._session.system_attributes[
                'Packages'] = pkg_loader.export_fixation_table()
        self._model['SystemData'] = self._session.system_attributes
        self._model['project_id'] = self._session.environment_owner_project_id
        self._model['user_id'] = self._session.environment_owner_user_id
        result['model'] = self._model

        if (not self._model.get('Objects')
                and not self._model.get('ObjectsCopy')):
            try:
                self._delete_trust()
            except Exception:
                LOG.warning('Cannot delete trust', exc_info=True)

        return result
Ejemplo n.º 3
0
 def execute(self):
     with package_loader.CombinedPackageLoader(self._session) as pkg_loader:
         get_plugin_loader().register_in_loader(pkg_loader)
         executor = dsl_executor.MuranoDslExecutor(pkg_loader,
                                                   ContextManager())
         action_result = self._invoke(executor)
         action_result = serializer.serialize(action_result, executor)
         return action_result
Ejemplo n.º 4
0
def run_tests(args):
    provided_pkg_name = args.package
    load_packages_from = args.load_packages_from
    tests_to_run = args.tests

    if not provided_pkg_name:
        msg = _('Package name is required parameter.')
        sys.stderr.write("ERROR: {msg}".format(msg=msg))
        sys.exit(1)

    ks_opts = _validate_keystone_opts(args)

    client = ks_client.Client(**ks_opts)
    test_env = environment.Environment()
    test_env.token = client.auth_token
    test_env.tenant_id = client.auth_tenant_id
    test_env.clients = client_manager.ClientManager(test_env)

    murano_client_factory = lambda: \
        test_env.clients.get_murano_client(test_env)

    # Replace location of loading packages with provided from command line.
    if load_packages_from:
        cfg.CONF.engine.load_packages_from = load_packages_from
    with package_loader.CombinedPackageLoader(murano_client_factory,
                                              client.tenant_id) as pkg_loader:
        engine.get_plugin_loader().register_in_loader(pkg_loader)
        exc = executor.MuranoDslExecutor(pkg_loader, engine.ContextManager(),
                                         test_env)

        package = _load_package(pkg_loader, provided_pkg_name)
        class_to_methods, class_to_obj = _get_all_test_methods(exc, package)

        run_set = _get_methods_to_run(package, tests_to_run, class_to_methods)
        if run_set:
            LOG.debug('Starting test execution.')
        else:
            msg = _('No tests found for execution.')
            LOG.error(msg)
            sys.stderr.write("ERROR: {msg}".format(msg=msg))
            sys.exit(1)

        for pkg_class, methods in run_set.iteritems():
            obj = class_to_obj[pkg_class]
            for m in methods:
                _call_service_method('setUp', exc, obj)
                obj.type.methods[m].usage = 'Action'

                test_env.start()
                try:
                    obj.type.invoke(m, exc, obj, (), {})
                    LOG.debug('\n.....{0}.{1}.....OK'.format(obj.type.name, m))
                    _call_service_method('tearDown', exc, obj)
                except Exception:
                    LOG.exception('\n.....{0}.{1}.....FAILURE\n'
                                  ''.format(obj.type.name, m))
                finally:
                    test_env.finish()
Ejemplo n.º 5
0
    def run_tests(self):
        exit_code = 0
        provided_pkg_name = self.args.package
        load_packages_from = self.args.load_packages_from
        tests_to_run = self.args.tests

        ks_opts = self._validate_keystone_opts(self.args)

        client = ks_client.Client(**ks_opts)
        test_session = execution_session.ExecutionSession()
        test_session.token = client.auth_token
        test_session.project_id = client.project_id

        # Replace location of loading packages with provided from command line.
        if load_packages_from:
            cfg.CONF.packages_opts.load_packages_from = load_packages_from
        with package_loader.CombinedPackageLoader(test_session) as pkg_loader:
            engine.get_plugin_loader().register_in_loader(pkg_loader)

            package = self._load_package(pkg_loader, provided_pkg_name)
            class_to_methods = self._get_test_cases_by_classes(package)
            run_set = self._get_methods_to_run(package, tests_to_run,
                                               class_to_methods)
            if run_set:
                LOG.debug('Starting test execution.')
            else:
                msg = _('No tests found for execution.')
                LOG.error(msg)
                self.error(msg)

            for pkg_class, test_cases in six.iteritems(run_set):
                for m in test_cases:
                    # Create new executor for each test case to provide
                    # pure test environment
                    dsl_executor = executor.MuranoDslExecutor(
                        pkg_loader, mock_context_manager.MockContextManager(),
                        test_session)
                    obj = package.find_class(pkg_class, False).new(
                        None, dsl_executor.object_store, dsl_executor)(None)
                    self._call_service_method('setUp', dsl_executor, obj)
                    obj.type.methods[m].usage = 'Action'

                    test_session.start()
                    try:
                        obj.type.invoke(m, dsl_executor, obj, (), {})
                        LOG.debug('\n.....{0}.{1}.....OK'.format(
                            obj.type.name, m))
                        self._call_service_method('tearDown', dsl_executor,
                                                  obj)
                    except Exception:
                        LOG.exception('\n.....{0}.{1}.....FAILURE\n'
                                      ''.format(obj.type.name, m))
                        exit_code = 1
                    finally:
                        test_session.finish()
        return exit_code
Ejemplo n.º 6
0
    def setUp(self):
        super(TestCombinedPackageLoader, self).setUp()

        location = os.path.dirname(__file__)
        self.override_config('load_packages_from', [location], 'engine')
        self.execution_session = mock.MagicMock()
        self.loader = package_loader.CombinedPackageLoader(
            self.execution_session)
        self._patch_api_loader()

        self.local_pkg_name = 'io.murano.test.MyTest'
        self.api_pkg_name = 'test.mpl.v1.app.Thing'
Ejemplo n.º 7
0
    def execute(self):
        self._create_trust()

        try:
            murano_client_factory = lambda: \
                self._environment.clients.get_murano_client(self._environment)
            with package_loader.CombinedPackageLoader(
                    murano_client_factory,
                    self._environment.tenant_id) as pkg_loader:
                return self._execute(pkg_loader)
        finally:
            if self._model['Objects'] is None:
                self._delete_trust()
Ejemplo n.º 8
0
    def setUpClass(cls):
        super(TestCombinedPackageLoader, cls).setUpClass()

        location = os.path.dirname(__file__)
        CONF.set_override('load_packages_from', [location], 'engine')
        cls.murano_client_factory = mock.MagicMock()
        cls.loader = package_loader.CombinedPackageLoader(
            cls.murano_client_factory, 'test_tenant_id')
        cls.api_loader = mock.MagicMock()
        cls.loader.api_loader = cls.api_loader

        cls.local_pkg_name = 'io.murano.test.MyTest'
        cls.api_pkg_name = 'test.mpl.v1.app.Thing'
    def setUp(cls):
        super(TestCombinedPackageLoader, cls).setUp()

        location = os.path.dirname(__file__)
        CONF.set_override('load_packages_from', [location], 'engine',
                          enforce_type=True)
        cls.execution_session = mock.MagicMock()
        cls.loader = package_loader.CombinedPackageLoader(
            cls.execution_session)
        cls._patch_api_loader()

        cls.local_pkg_name = 'io.murano.test.MyTest'
        cls.api_pkg_name = 'test.mpl.v1.app.Thing'
Ejemplo n.º 10
0
    def execute(self):
        try:
            self._create_trust()
        except Exception as e:
            return self.exception_result(e, None, '<system>')

        with package_loader.CombinedPackageLoader(self._session) as pkg_loader:
            result = self._execute(pkg_loader)
        self._model['SystemData'] = self._session.system_attributes
        result['model'] = self._model

        if (not self._model.get('Objects')
                and not self._model.get('ObjectsCopy')):
            try:
                self._delete_trust()
            except Exception:
                LOG.warning(_LW('Cannot delete trust'), exc_info=True)

        return result
Ejemplo n.º 11
0
    def execute(self):
        try:
            self._create_trust()
        except Exception as e:
            return self.exception_result(e, None, '<system>')

        murano_client_factory = \
            lambda: self._environment.clients.get_murano_client()
        with package_loader.CombinedPackageLoader(
                murano_client_factory,
                self._environment.tenant_id) as pkg_loader:
            result = self._execute(pkg_loader)
        self._model['SystemData'] = self._environment.system_attributes
        result['model'] = self._model

        if (not self._model.get('Objects')
                and not self._model.get('ObjectsCopy')):
            try:
                self._delete_trust()
            except Exception:
                LOG.warning(_LW('Cannot delete trust'), exc_info=True)

        return result
Ejemplo n.º 12
0
    def run_tests(self):
        exit_code = 0
        provided_pkg_name = self.args.package
        load_packages_from = self.args.load_packages_from
        tests_to_run = self.args.tests

        ks_opts = self._validate_keystone_opts(self.args)

        client = ks_client.Client(**ks_opts)
        test_session = execution_session.ExecutionSession()
        test_session.token = client.auth_token
        test_session.project_id = client.project_id

        # Replace location of loading packages with provided from command line.
        if load_packages_from:
            cfg.CONF.engine.load_packages_from = load_packages_from
        with package_loader.CombinedPackageLoader(test_session) as pkg_loader:
            engine.get_plugin_loader().register_in_loader(pkg_loader)

            package = self._load_package(pkg_loader, provided_pkg_name)
            class_to_methods = self._get_test_cases_by_classes(package)
            run_set = self._get_methods_to_run(package, tests_to_run,
                                               class_to_methods)
            max_length = 0
            num_tests = 0
            for pkg_class, test_cases in six.iteritems(run_set):
                for m in test_cases:
                    max_length = max(max_length, len(pkg_class) + len(m) + 1)
                num_tests += len(test_cases)
            max_length += 3

            if run_set:
                LOG.debug('Starting test execution.')
                self.message('About to execute {0} tests(s)'.format(num_tests))
            else:
                msg = _('No tests found for execution.')
                LOG.error(msg)
                self.error(msg)

            run_count = 0
            error_count = 0
            started = timeutils.utcnow()
            for pkg_class, test_cases in six.iteritems(run_set):
                for m in test_cases:
                    # Create new executor for each test case to provide
                    # pure test environment
                    dsl_executor = executor.MuranoDslExecutor(
                        pkg_loader, mock_context_manager.MockContextManager(),
                        test_session)
                    obj = dsl_executor.object_store.load(
                        {},
                        None,
                        default_type=package.find_class(pkg_class, False))

                    test_name = "{0}.{1}".format(obj.type.name, m)
                    dots_number = max_length - len(test_name)
                    msg = "{0} {1} ".format(test_name, '.' * dots_number)
                    sys.stdout.write(msg)
                    sys.stdout.flush()
                    self._call_service_method('setUp', dsl_executor, obj)
                    obj.type.methods[m].usage = 'Action'
                    test_session.start()
                    try:
                        run_count += 1
                        dsl_executor.run(obj.type, m, obj, (), {})
                        self._call_service_method('tearDown', dsl_executor,
                                                  obj)
                        msg = '{0}{1}{2}\n'.format(OK_COLOR, 'OK', END_COLOR)
                        LOG.debug('Test {0} successful'.format(test_name))
                        sys.stdout.write(msg)
                        sys.stdout.flush()
                    except Exception as e:
                        error_count += 1
                        msg = ''.join((FAIL_COLOR, 'FAIL!', END_COLOR, '\n'))
                        sys.stdout.write(msg)
                        if isinstance(e, dsl_exception.MuranoPlException):
                            tb = e.format()
                        else:
                            tb = traceback.format_exc()

                        sys.stdout.write(''.join(
                            (FAIL_COLOR, tb, END_COLOR, '\n')))
                        sys.stdout.flush()

                        LOG.exception('Test {0} failed'.format(test_name))
                        exit_code = 1
                    finally:
                        test_session.finish()
            completed = timeutils.utcnow()
            self.message('Executed {0} tests in {1} seconds: '
                         '{2} passed, '
                         '{3} failed'.format(
                             run_count,
                             timeutils.delta_seconds(started, completed),
                             run_count - error_count, error_count))
        return exit_code