/** * Abiquo community edition * cloud management application for hybrid clouds * Copyright (C) 2008-2010 - Abiquo Holdings S.L. * * This application 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 under * version 3 of the License * * This software 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 * LESSER GENERAL PUBLIC LICENSE v.3 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ package com.abiquo.testng; import static com.abiquo.testng.TestConfig.getParameter; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import org.mortbay.jetty.Handler; import org.mortbay.jetty.Server; import org.mortbay.jetty.handler.DefaultHandler; import org.mortbay.jetty.handler.HandlerList; import org.mortbay.jetty.handler.ResourceHandler; import org.mortbay.jetty.nio.SelectChannelConnector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.ISuite; import org.testng.ISuiteListener; /** * Set up a remote repository to act as an HTTP server for content in resouces/testovf folder. */ public class OVFRemoteRepositoryListener implements ISuiteListener { protected static final Logger LOGGER = LoggerFactory .getLogger(OVFRemoteRepositoryListener.class); /** ##### ##### ##### ##### ##### */ public static final int RS_FILE_SERVER_PORT = 7979; public final static String ovfId = String.format("http://localhost:%d/testovf/description.ovf", RS_FILE_SERVER_PORT); // ERRORS public final static String ovf_invalidUrl = ovfId + "NOT-FOUND-OVF"; public final static String ovf_notFound = String.format( "http://localhost:%d/testovf/errors/ovfId_notFound.ovf", RS_FILE_SERVER_PORT); public final static String ovf_fileNotAllowed = String.format( "http://localhost:%d/testovf/errors/fileNotAllowed.ovf", RS_FILE_SERVER_PORT); public final static String ovf_fileNotFound = String.format( "http://localhost:%d/testovf/errors/fileNotFound.ovf", RS_FILE_SERVER_PORT); public final static String ovf_invalidDiskFormat = String.format( "http://localhost:%d/testovf/errors/invalidDiskFormat.ovf", RS_FILE_SERVER_PORT); public final static String ovf_malformed = String.format( "http://localhost:%d/testovf/errors/malformed.ovf", RS_FILE_SERVER_PORT); public final static String ovf_multiDisk = String.format( "http://localhost:%d/testovf/errors/multiDisk.ovf", RS_FILE_SERVER_PORT); /** ##### ##### ##### ##### ##### */ /** remote repository file server configuration */ protected Server rsServer; private final static String fileServerPath = getParameter("rs.basedir") + "/src/test/resources/"; private final static String diskFilePath = getParameter("rs.basedir") + "/src/test/resources/testovf/diskFile.vmdk"; /** Should be the same of on the References size on the ''src/test/resources/description.ovf'' */ private final static Long diskFileSize = 1024 * 1024 * 10l; @Override public void onStart(final ISuite suite) { try { startRemoteServiceServer(); LOGGER.info("Test server for ovfindex started."); createDiskFile(); } catch (Exception ex) { throw new RuntimeException("Could not start test server for ovfindex", ex); } } private void startRemoteServiceServer() throws Exception { rsServer = new Server(); SelectChannelConnector connector = new SelectChannelConnector(); connector.setPort(RS_FILE_SERVER_PORT); rsServer.addConnector(connector); ResourceHandler resource_handler = new ResourceHandler(); resource_handler.setResourceBase(fileServerPath); HandlerList handlers = new HandlerList(); handlers.setHandlers(new Handler[] {resource_handler, new DefaultHandler()}); rsServer.setHandler(handlers); rsServer.start(); } @Override public void onFinish(final ISuite suite) { LOGGER.info("Stopping test server for ovfindex..."); try { if (rsServer != null) { rsServer.stop(); } LOGGER.info("Test server for ovfindex stoped."); deleteDiskFile(); } catch (Exception ex) { throw new RuntimeException("Could not stop test server for ovfindex", ex); } } /** * creates the referenced file in testovf/description.ovf */ private void createDiskFile() throws IOException { File diskFile = new File(diskFilePath); RandomAccessFile f = new RandomAccessFile(diskFile, "rw"); f.setLength(diskFileSize); diskFile.deleteOnExit(); } private void deleteDiskFile() throws Exception { File diskFile = new File(diskFilePath); final String errorCause = String.format("Can not delete the disk file at [%s]", diskFilePath); if (diskFile.exists()) { if (!diskFile.delete()) { throw new Exception(errorCause); } } else { throw new Exception(errorCause); } } }