/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or any later version. * * Squale 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. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ package org.squale.squalecommon.daolayer.component; import java.util.Collection; import java.util.List; import org.squale.jraf.commons.exception.JrafDaoException; import org.squale.jraf.spi.persistence.ISession; import org.squale.squalecommon.SqualeTestCase; import org.squale.squalecommon.enterpriselayer.businessobject.component.ApplicationBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.AuditBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.ProjectBO; import org.squale.squalecommon.enterpriselayer.businessobject.config.ServeurBO; /** * @author M400843 */ public class ApplicationDAOImplTest extends SqualeTestCase { /** * test la suppression d'une application * * @throws JrafDaoException en cas d'�chec */ public void testRemove() throws JrafDaoException { ApplicationDAOImpl applicationDAO = ApplicationDAOImpl.getInstance(); ISession session = getSession(); // on utilise une transaction pour cr�er l'application session.beginTransaction(); ApplicationBO application = getComponentFactory().createApplication( session ); assertEquals( ApplicationBO.IN_CREATION, application.getStatus() ); String name = application.getName(); session.commitTransactionWithoutClose(); // on v�rifie qu'on peut bien charger l'application qu'on vient de cr�er session.beginTransaction(); assertNotNull( applicationDAO.loadByName( session, name ) ); session.commitTransactionWithoutClose(); // et une autre pour tester la supression session.beginTransaction(); applicationDAO.remove( session, application ); session.commitTransactionWithoutClose(); // une derni�re pour v�rifier que l'application a bien �t� supprim�e session.beginTransaction(); application = applicationDAO.loadByName( session, name ); assertEquals( ApplicationBO.DELETED, application.getStatus() ); session.commitTransactionWithoutClose(); } /** * Test le comptage d'applications ayant eu des audits (sans status particulier) * * @throws JrafDaoException en cas d'�chec */ public void testCountWhereHaveAudit() throws JrafDaoException { // la date n'a pas d'importance, car on ne peut pas tester sur la date, to_date est r�serv� � Oracle ApplicationDAOImpl appliDao = ApplicationDAOImpl.getInstance(); AuditDAOImpl auditDao = AuditDAOImpl.getInstance(); // on cr�e les diff�rents �l�ments // On cr�e les serveurs ServeurBO qvg = getComponentFactory().createServer( getSession(), "qvg" ); ServeurBO tls = getComponentFactory().createServer( getSession(), "tls" ); ApplicationBO appli = getComponentFactory().createApplicationWithSite( getSession(), "qvi" ); ProjectBO proj = getComponentFactory().createProject( getSession(), appli, null ); AuditBO audit = getComponentFactory().createAudit( getSession(), proj ); // l'audit est cr�e pour un projet, il faut rajouter l'audit � l'application m�re appli.addAudit( audit ); // enregistre explicitement en base car ce n'est pas une m�thode de la factory getSession().beginTransaction(); appliDao.save( getSession(), appli ); getSession().commitTransactionWithoutClose(); // V�rifie que l'audit a bien �t� enregistr� getSession().beginTransaction(); AuditBO auditResult = (AuditBO) auditDao.findAll( getSession() ).get( 0 ); getSession().commitTransactionWithoutClose(); // l'audit qu'on r�cup�re doit etre le meme que celui cr�e assertEquals( auditResult, audit ); // une seule application a �t� cr�e, sur QVI int nbAppliQVI = appliDao.countWhereHaveAuditByStatus( getSession(), appli.getServeurBO().getServeurId(), new Integer( AuditBO.ALL_STATUS ), null ); assertTrue( nbAppliQVI == 1 ); int nbAppliQVG = appliDao.countWhereHaveAuditByStatus( getSession(), qvg.getServeurId(), new Integer( AuditBO.ALL_STATUS ), null ); assertTrue( nbAppliQVG == 0 ); int nbAppliTLS = appliDao.countWhereHaveAuditByStatus( getSession(), tls.getServeurId(), new Integer( AuditBO.ALL_STATUS ), null ); assertTrue( nbAppliTLS == 0 ); } /** * Test le comptage d'applications valid�es ayant eu aucun audit ex�cut� * * @throws JrafDaoException en cas d'�chec */ public void testCountWhereHaveNoAudit() throws JrafDaoException { ApplicationDAOImpl appliDao = ApplicationDAOImpl.getInstance(); AuditDAOImpl auditDao = AuditDAOImpl.getInstance(); // on cr�e les diff�rents �l�ments ApplicationBO appli = getComponentFactory().createApplicationWithSite( getSession(), "qvi" ); appli.setStatus( ApplicationBO.VALIDATED ); ProjectBO proj = getComponentFactory().createProject( getSession(), appli, null ); AuditBO audit = getComponentFactory().createAudit( getSession(), proj ); // en attente // l'audit est cr�e pour un projet, il faut rajouter l'audit � l'application m�re appli.addAudit( audit ); // enregistre explicitement en base car ce n'est pas une m�thode de la factory getSession().beginTransaction(); appliDao.save( getSession(), appli ); getSession().commitTransactionWithoutClose(); // V�rifie que l'audit a bien �t� enregistr� getSession().beginTransaction(); AuditBO auditResult = (AuditBO) auditDao.findAll( getSession() ).get( 0 ); getSession().commitTransactionWithoutClose(); // l'audit qu'on r�cup�re doit etre le meme que celui cr�e assertEquals( auditResult, audit ); // une seule application a �t� cr�e, sur QVI int nbAppliQVI = appliDao.countWhereHaveNoAudits( getSession(), appli.getServeurBO().getServeurId() ); assertTrue( nbAppliQVI == 1 ); // On ajoute un audit ex�cut� AuditBO executedAudit = getComponentFactory().createAuditWithStatus( getSession(), proj, new Integer( AuditBO.TERMINATED ) ); // termin� // l'audit est cr�e pour un projet, il faut rajouter l'audit � l'application m�re appli.addAudit( executedAudit ); // enregistre explicitement en base car ce n'est pas une m�thode de la factory getSession().beginTransaction(); appliDao.save( getSession(), appli ); getSession().commitTransactionWithoutClose(); // V�rifie que l'audit a bien �t� enregistr� getSession().beginTransaction(); // L'application a maintenant un audit �x�cut� nbAppliQVI = appliDao.countWhereHaveNoAudits( getSession(), appli.getServeurBO().getServeurId() ); assertEquals( 0, nbAppliQVI ); } /** * Test le comptage d'applications ayant eu des audits (avec un status donn�) * * @throws JrafDaoException en cas d'�chec */ public void testCountWhereHaveAuditTerminated() throws JrafDaoException { // la date n'a pas d'importance, car on ne peut pas tester sur la date, to_date est r�serv� � Oracle ApplicationDAOImpl appliDao = ApplicationDAOImpl.getInstance(); AuditDAOImpl auditDao = AuditDAOImpl.getInstance(); // on cr�e les diff�rents �l�ments getSession().beginTransaction(); ApplicationBO appli1 = getComponentFactory().createApplicationWithSite( getSession(), "qvi" ); appli1.setStatus( ApplicationBO.VALIDATED ); getSession().commitTransactionWithoutClose(); getSession().beginTransaction(); ApplicationBO appli2 = getComponentFactory().createApplicationWithSite( getSession(), "qvg" ); appli2.setStatus( ApplicationBO.VALIDATED ); getSession().commitTransactionWithoutClose(); getSession().beginTransaction(); ApplicationBO appli3 = getComponentFactory().createApplicationWithSite( getSession(), "tls" ); appli3.setStatus( ApplicationBO.VALIDATED ); getSession().commitTransactionWithoutClose(); getSession().beginTransaction(); Collection applis = appliDao.findAll( getSession() ); getSession().commitTransactionWithoutClose(); assertTrue( applis.size() == 3 ); ProjectBO proj1QviAppli1 = getComponentFactory().createProject( getSession(), appli1, null ); ProjectBO proj1QvgAppli2 = getComponentFactory().createProject( getSession(), appli2, null ); ProjectBO proj1TlsAppli3 = getComponentFactory().createProject( getSession(), appli3, null ); // les audits rattach�s � des applis de qvi AuditBO auditTerminated1 = getComponentFactory().createAuditWithStatus( getSession(), proj1QviAppli1, new Integer( AuditBO.TERMINATED ) ); // les audits rattach�s � des applis de tls AuditBO auditFailed2 = getComponentFactory().createAuditWithStatus( getSession(), proj1QvgAppli2, new Integer( AuditBO.FAILED ) ); // les audits rattach�s � des applis de qvg AuditBO auditNotAttempted2 = getComponentFactory().createAuditWithStatus( getSession(), proj1TlsAppli3, new Integer( AuditBO.NOT_ATTEMPTED ) ); // l'audit est cr�e pour un projet, il faut rajouter l'audit � l'application m�re // Il y a 1 application sur qvi, avec un audit r�ussi // une application sur tls, avec un audit failed // une sur qvg, avec un audit programm� appli1.addAudit( auditTerminated1 ); appli2.addAudit( auditFailed2 ); appli3.addAudit( auditNotAttempted2 ); // enregistre explicitement en base car ce n'est pas une m�thode de la factory getSession().beginTransaction(); appliDao.save( getSession(), appli1 ); getSession().commitTransactionWithoutClose(); // V�rifie que l'audit a bien �t� enregistr� getSession().beginTransaction(); AuditBO auditResult = (AuditBO) auditDao.findAll( getSession() ).get( 0 ); getSession().commitTransactionWithoutClose(); // une seule application avec un audit r�ussi a �t� cr�e, sur QVI int nbAppliQVITerm = appliDao.countWhereHaveAuditByStatus( getSession(), appli1.getServeurBO().getServeurId(), new Integer( AuditBO.TERMINATED ), null ); assertTrue( nbAppliQVITerm == 1 ); int nbAppliQVGTerm = appliDao.countWhereHaveAuditByStatus( getSession(), appli2.getServeurBO().getServeurId(), new Integer( AuditBO.TERMINATED ), null ); assertTrue( nbAppliQVGTerm == 0 ); int nbAppliTLSTerm = appliDao.countWhereHaveAuditByStatus( getSession(), appli3.getServeurBO().getServeurId(), new Integer( AuditBO.TERMINATED ), null ); assertTrue( nbAppliTLSTerm == 0 ); int nbAppliQVI = appliDao.countWhereHaveOnlyFailedAudit( getSession(), appli1.getServeurBO().getServeurId() ); assertTrue( nbAppliQVI == 0 ); int nbAppliQVG = appliDao.countWhereHaveOnlyFailedAudit( getSession(), appli2.getServeurBO().getServeurId() ); assertTrue( nbAppliQVG == 1 ); int nbAppliTLS = appliDao.countWhereHaveOnlyFailedAudit( getSession(), appli3.getServeurBO().getServeurId() ); assertTrue( nbAppliTLS == 0 ); Collection applisQvi = appliDao.findWhereHaveNotAttemptedAuditBySite( getSession(), appli1.getServeurBO().getServeurId() ); assertEquals( 0, applisQvi.size() ); } /** * Test la r�cup�ration des applications avec un audits de suivi en attente * * @throws JrafDaoException si erreur */ public void testFindWhereHaveNotAttemptedAuditBySite() throws JrafDaoException { // Initialisation DAO ApplicationDAOImpl appliDao = ApplicationDAOImpl.getInstance(); // Cr�ationa appli sur toulouse avec un audit en attente ApplicationBO appliTls = getComponentFactory().createApplicationWithSite( getSession(), "tls" ); appliTls.setStatus( ApplicationBO.VALIDATED ); appliTls.setAuditFrequency( 2 ); ProjectBO projTls = getComponentFactory().createProject( getSession(), appliTls, null ); AuditBO auditNotAttempted = getComponentFactory().createAuditWithStatus( getSession(), projTls, new Integer( AuditBO.NOT_ATTEMPTED ) ); appliTls.addAudit( auditNotAttempted ); // Cr�ation appli sur vilg�nis avec un audit en �chec ApplicationBO appliQvg = getComponentFactory().createApplicationWithSite( getSession(), "qvg" ); appliQvg.setStatus( ApplicationBO.VALIDATED ); ProjectBO projQvg = getComponentFactory().createProject( getSession(), appliQvg, null ); AuditBO auditFailed = getComponentFactory().createAuditWithStatus( getSession(), projQvg, new Integer( AuditBO.FAILED ) ); appliQvg.addAudit( auditFailed ); // enregistre en base getSession().beginTransaction(); appliDao.save( getSession(), appliTls ); getSession().commitTransactionWithoutClose(); // 1 appli pour toulouse, 0 pour vilg�nis Collection applisTls = appliDao.findWhereHaveNotAttemptedAuditBySite( getSession(), appliTls.getServeurBO().getServeurId() ); assertEquals( 1, applisTls.size() ); Collection applisQvg = appliDao.findWhereHaveNotAttemptedAuditBySite( getSession(), appliQvg.getServeurBO().getServeurId() ); assertEquals( 0, applisQvg.size() ); } /** * @throws JrafDaoException si erreur */ public void testFindWhereStatus() throws JrafDaoException { ApplicationDAOImpl appliDao = ApplicationDAOImpl.getInstance(); AuditDAOImpl auditDao = AuditDAOImpl.getInstance(); // on cr�e les diff�rents �l�ments getSession().beginTransaction(); ApplicationBO appli1 = getComponentFactory().createApplicationWithSite( getSession(), "qvi" ); ApplicationBO appli2 = getComponentFactory().createApplicationWithSite( getSession(), "QVG" ); ApplicationBO appli3 = getComponentFactory().createApplicationWithSite( getSession(), "QVI" ); getSession().commitTransactionWithoutClose(); List applisInCreation = appliDao.findWhereStatus( getSession(), ApplicationBO.IN_CREATION ); final int nbApplis = 3; assertEquals( nbApplis, applisInCreation.size() ); // La premi�re doit �tre applicationqvg assertEquals( "applicationQVG", ( (ApplicationBO) applisInCreation.get( 0 ) ).getName() ); } }