Пример #1
0
def test_deleteKit(dbm):
    with dbm.session() as session:
        with pytest.raises(KitInUse):
            KitsDbHandler().deleteKit(session,
                                      'base',
                                      version='7.0.1',
                                      iteration='0')
Пример #2
0
def test_getKitList(dbm):
    with dbm.session() as session:
        result = KitsDbHandler().getKitList(session)

        assert isinstance(result, list)

        assert len(result)
Пример #3
0
def test_getKit_name_and_version(dbm):
    with dbm.session() as session:
        result = KitsDbHandler().getKit(session, 'centos', '7.4')

        assert isinstance(result, Kit)

        assert result.name == 'centos'

        assert result.isOs
Пример #4
0
def test_getKit_name_only(dbm, name, isOs):
    with dbm.session() as session:
        result = KitsDbHandler().getKit(session, name)

        assert isinstance(result, Kit)

        assert result.name == name

        assert result.isOs == isOs
Пример #5
0
def test_getKitList_os(dbm):
    with dbm.session() as session:
        result = KitsDbHandler().getKitList(session, os_kits_only=True)

        assert isinstance(result, list)

        assert len(result) == 1

        assert result[0].isOs
Пример #6
0
def test_addKit(dbm):
    with dbm.session() as session:
        name = 'testkit'
        version = '0.0.1'
        iteration = '0'

        kitObj = KitTortugaObject(name=name,
                                  version=version,
                                  iteration=iteration)

        # create dummy component
        dummy_component1 = ComponentTortugaObject(name='dummy',
                                                  version='0.0.1')

        kitObj.addComponent(dummy_component1)

        dummy_component2 = ComponentTortugaObject(name='dummy2',
                                                  version='0.0.1')

        kitObj.addComponent(dummy_component2)

        KitsDbHandler().addKit(session, kitObj)

        new_kit = KitsDbHandler().getKit(session, 'testkit')

        assert new_kit.name == 'testkit'

        assert new_kit.components

        with pytest.raises(KitAlreadyExists):
            KitsDbHandler().addKit(session, kitObj)

        KitsDbHandler().deleteKit(session, name, version, iteration)

        with pytest.raises(KitNotFound):
            KitsDbHandler().getKit(session, name)
Пример #7
0
def test_getKit_failed(dbm):
    with dbm.session() as session:
        with pytest.raises(KitNotFound):
            KitsDbHandler().getKit(session, 'XXXXkitXXXX')
Пример #8
0
def test_getKitId(dbm):
    with dbm.session() as session:
        result = KitsDbHandler().getKitById(session, 1)

        assert isinstance(result, Kit)
Пример #9
0
    def __init__(self):
        TortugaDbApi.__init__(self)

        self._kitsDbHandler = KitsDbHandler()
Пример #10
0
class KitDbApi(TortugaDbApi):
    """
    Kit DB API class.
    """

    def __init__(self):
        TortugaDbApi.__init__(self)

        self._kitsDbHandler = KitsDbHandler()

    def getKit(self, session: Session, name, version,
               iteration: Optional[str] = None):
        """
        Get kit from the db.

            Returns:
                kit
            Throws:
                KitNotFound
                DbError
        """

        try:
            dbKit = self._kitsDbHandler.getKit(
                session, name, version, iteration)

            kit = Kit.getFromDbDict(dbKit.__dict__)

            return self.__retrieveAllKitData(dbKit, kit)
        except TortugaException:
            raise
        except Exception as ex:
            self._logger.exception(str(ex))
            raise

    def __retrieveAllKitData(self, dbKit, kit):
        """
        Retrieve full kit data from the db.
        """

        for dbComponent in dbKit.components:
            # Force loading of OS/OS familyinfo
            self.loadRelations(dbComponent, {
                'os_components': True,
                'osfamily_components': True,
            })

            # Convert into component object
            c = Component.getFromDbDict(dbComponent.__dict__)

            # Associate component with kit
            kit.addComponent(c)

        kit.setSources(self.getTortugaObjectList(KitSource, dbKit.sources))

        return kit

    def getKitById(self, session: Session, id_):
        """
        Get kit from the db

            Returns:
                kit
            Throws:
                KitNotFound
                DbError
        """

        try:
            dbKit = self._kitsDbHandler.getKitById(session, id_)
            kit = Kit.getFromDbDict(dbKit.__dict__)
            return self.__retrieveAllKitData(dbKit, kit)
        except TortugaException:
            raise
        except Exception as ex:
            self._logger.exception(str(ex))
            raise

    def getKitList(self, session: Session,
                   os_kits_only: Optional[bool] = False):
        """
        Get list of all available or os kits only from the db
        """

        try:
            kits = []

            for kit in self._kitsDbHandler.getKitList(
                    session, os_kits_only=os_kits_only):
                self.loadRelations(kit, {'components': True})

                kits.append(Kit.getFromDbDict(kit.__dict__))

            return TortugaObjectList(kits)
        except TortugaException:
            raise
        except Exception as ex:
            self._logger.exception(str(ex))
            raise

    def addKit(self, session: Session, kit):
        """
        Insert kit into the db.

        Raises:
            KitAlreadyExists
            DbError
        """

        try:
            dbKit = self._kitsDbHandler.addKit(session, kit)

            session.commit()

            iteration = dbKit.components[0].os_components[0].os.arch \
                if dbKit.isOs else dbKit.iteration

            kit_descr = format_kit_descriptor(
                dbKit.name, dbKit.version, iteration)

            logmsg = 'Installed OS kit [{0}] successfully' \
                if dbKit.isOs else 'Installed kit [{0}] successfully'

            self._logger.info(logmsg.format(kit_descr))
        except TortugaException:
            session.rollback()

            raise
        except Exception as ex:
            session.rollback()

            self._logger.exception(str(ex))

            raise

    def deleteKit(self, session: Session, name, version, iteration, force=False):
        """
        Delete kit from the db.

        Raises:
            KitNotFound
            KitInUse
            DbError
        """

        try:
            self._kitsDbHandler.deleteKit(
                session, name, version, iteration, force=force)

            session.commit()
        except TortugaException:
            session.rollback()

            raise
        except Exception as ex:
            session.rollback()

            self._logger.exception(str(ex))
            raise

    def addComponentsToKit(self, session: Session, kit, compList):
        """
        Add components found in compList to existing kit

            Returns:
                None
            Throws:
                KitNotFound
                KitInUse
                DbError
        """

        try:
            self._kitsDbHandler.addComponentsToKit(session, kit, compList)

            session.commit()
        except TortugaException:
            session.rollback()
            raise
        except Exception as ex:
            session.rollback()
            self._logger.exception(str(ex))
            raise