/**
* 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/>.
*/
/*
* Cr�� le 6 sept. 05, par M400832.
*/
package org.squale.squalix.tools.clearcase;
import java.io.File;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.squale.jraf.commons.exception.JrafDaoException;
import org.squale.jraf.commons.exception.JrafPersistenceException;
import org.squale.squalecommon.SqualeTestCase;
import org.squale.squalecommon.daolayer.component.ProjectDAOImpl;
import org.squale.squalecommon.daolayer.component.ProjectParameterDAOImpl;
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.component.parameters.ListParameterBO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.MapParameterBO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.ParametersConstants;
import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.StringParameterBO;
import org.squale.squalecommon.enterpriselayer.businessobject.rule.QualityGridBO;
import org.squale.squalix.core.TaskData;
import org.squale.squalix.tools.clearcase.task.ClearCaseTask;
/**
* Cette classe teste le montage de vues ClearCase.
*/
// UNIT_PENDING : montage de la vue au niveau windows --> configuration xml � changer
// Les test � �t� mis � jour pour les initialisations mais il faut se pencher sur le fonctionnel
// au niveau Windows.
public class ClearCaseTaskTest
extends SqualeTestCase
{
/**
* Nom de la branche.
*/
private static final String BRANCH_NAME = "squale_v0_0_act";
/**
* Nom de l'application au sens clearcase.
*/
private static final String APPLI_NAME = "squale";
/**
* Nom de la vob.
*/
private static final String VOB_NAME = "/vobs/squale/squaleCommon";
/**
* Nom du view path
*/
private static final String VIEW_PATH = "data/viewPath";
/** pour le view_path */
private TaskData mDatas;
/**
* Audit.
*/
private AuditBO mAudit;
/**
* Projet
*/
private ProjectBO mProject;
/**
* Application.
*/
private ApplicationBO mApplication;
/**
* HashMap de param�tres du projet.
*/
private MapParameterBO mHashMap;
/**
* T�che ClearCase.
*/
private ClearCaseTask mCct;
/**
* LOGGER.
*/
private static final Log LOGGER = LogFactory.getLog( ClearCaseTaskTest.class );
/**
* Constructeur.
*
* @param pArgs param�tre.
*/
public ClearCaseTaskTest( String pArgs )
{
super( pArgs );
}
/**
* Set-up.
*
* @throws Exception en cas de probl�me lors de la r�initialisation
*/
protected void setUp()
throws Exception
{
super.setUp();
getSession().beginTransaction();
/* D�finitions des param�tres communs */
// L'application
mApplication = getComponentFactory().createApplication( getSession() );
// Le projet avec sa grille associ�e
QualityGridBO grid = getComponentFactory().createGrid( getSession() );
mProject = getComponentFactory().createProject( getSession(), mApplication, grid );
initProject();
// L'audit
mAudit = getComponentFactory().createAudit( getSession(), mProject );
// Les param�tres temporaires
mDatas = new TaskData();
mDatas.putData( TaskData.VIEW_PATH, VIEW_PATH );
getSession().commitTransactionWithoutClose();
}
/**
* Montage d'un audit de suivi sur l'application SQUALE.
*
* @see #doNormalTest(String, String)
*/
public void testMountSqualeNormal()
throws JrafPersistenceException
{
/* lancement de la t�che */
launchTask();
/* test de pr�sence de la vue */
assertTrue( viewIsMounted() );
/* d�montage de la vue */
umountView();
}
/**
* Montage d'un audit de jalon.
*
* @see #doMilestoneTest(String, String)
*/
public void testSqualeMilestone()
throws JrafPersistenceException
{
// Audit de jalon
mAudit.setType( AuditBO.MILESTONE );
mAudit.setName( "SQUALE_V0_0_ACT" );
testMountSqualeNormal();
}
/**
* Initialise le projet
*
* @throws JrafDaoException si exception
*/
private void initProject()
throws JrafDaoException
{
mHashMap = new MapParameterBO();
MapParameterBO clearcaseMap = new MapParameterBO();
StringParameterBO branchBO = new StringParameterBO();
StringParameterBO appliBO = new StringParameterBO();
ListParameterBO vobsBO = new ListParameterBO();
StringParameterBO vobBO = new StringParameterBO();
branchBO.setValue( BRANCH_NAME );
appliBO.setValue( APPLI_NAME );
vobBO.setValue( VOB_NAME );
vobsBO.getParameters().add( vobBO );
clearcaseMap.getParameters().put( ParametersConstants.BRANCH, branchBO );
clearcaseMap.getParameters().put( ParametersConstants.APPLI, appliBO );
clearcaseMap.getParameters().put( ParametersConstants.VOBS, vobsBO );
mHashMap.getParameters().put( ParametersConstants.CLEARCASE, clearcaseMap );
ProjectParameterDAOImpl.getInstance().save( getSession(), mHashMap );
mProject.setParameters( mHashMap );
ProjectDAOImpl.getInstance().save( getSession(), mProject );
}
/**
* Lance la t�che de montage.
*/
private void launchTask()
{
mCct = new ClearCaseTask();
mCct.setApplicationId( new Long( mApplication.getId() ) );
mCct.setProjectId( new Long( mProject.getId() ) );
mCct.setAuditId( new Long( mAudit.getId() ) );
mCct.setData( mDatas );
mCct.run();
}
/**
* Retourne <code>true</code> si la vue a �t� correctement mont�e, <code>false</code> sinon.
*
* @return <code>true</code> en cas de succ�s, <code>
* false</code> sinon.
*/
private boolean viewIsMounted()
{
boolean success = false;
File dir = new File( VIEW_PATH );
/*
* on v�rifie que le r�pertoire contenant les fichiers de la vue existe.
*/
if ( dir.isDirectory() )
{
/*
* si le r�pertoire existe, on v�rifie qu'il a bien �t� cr�� par mkview.
*/
success = checkViewExistence();
}
return success;
}
/**
* V�rifie si la vue a bien �t� mont�e, i.e. si le fichier <code>.vws</code> existe.
*
* @return <code>true</code> en cas de succ�s, <code>
* false</code> sinon.
*/
private boolean checkViewExistence()
{
boolean alreadyMounted = false;
try
{
/* initialisation du runtime. */
Runtime runtime = Runtime.getRuntime();
Process processViewExist = runtime.exec( mCct.getConfiguration().getVerifyViewExistenceCommand() );
/* si la commande est ex�cut�e avec succ�s. */
if ( 0 == processViewExist.waitFor() )
{
alreadyMounted = true;
}
processViewExist = null;
runtime = null;
}
catch ( Exception e )
{
LOGGER.error( e, e );
alreadyMounted = false;
}
return alreadyMounted;
}
/**
* Supprime / d�monte la vue ClearCase.
*/
protected void umountView()
{
try
{
Runtime runtime = Runtime.getRuntime();
Process processCleanView = runtime.exec( mCct.getConfiguration().getUmountViewCommand() );
/* le processus se termine correctement */
processCleanView.waitFor();
processCleanView = null;
runtime = null;
}
catch ( Exception e )
{
LOGGER.error( e, e );
}
}
}