/** * 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.appliancemanager; import static com.abiquo.testng.AMRepositoryListener.REPO_PATH; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; import java.util.Random; import junit.framework.Assert; import org.apache.commons.io.FilenameUtils; import com.abiquo.am.services.EnterpriseRepositoryService; import com.abiquo.am.services.ErepoFactory; import com.abiquo.am.services.TemplateConventions; import com.abiquo.appliancemanager.client.AMClient; import com.abiquo.appliancemanager.client.AMClientException; import com.abiquo.appliancemanager.transport.MemorySizeUnit; import com.abiquo.appliancemanager.transport.TemplateDto; import com.abiquo.appliancemanager.transport.TemplateStateDto; import com.abiquo.appliancemanager.transport.TemplateStatusEnumType; import com.abiquo.appliancemanager.transport.TemplatesStateDto; import com.abiquo.model.enumerator.DiskFormatType; import com.abiquo.testng.TestServerListener; public class ApplianceManagerAsserts { private final AMClient stub; protected final static Integer idEnterprise = ApplianceManagerIT.idEnterprise; protected final static String baseUrl = TestServerListener.BASE_URI; protected final static Long downloadProgressInterval = 5 * 1000l; private final static Long UPLOAD_FILE_SIZE_BYTES = (1024 * 1024) * 1l; public ApplianceManagerAsserts(final AMClient stub) { this.stub = stub; } public void ovfStatus(final String ovfId, final TemplateStatusEnumType expectedStatus) throws AMClientException { TemplateStateDto prevStatus = stub.getTemplateStatus(idEnterprise, ovfId); Assert.assertEquals(expectedStatus, prevStatus.getStatus()); Assert.assertEquals(ovfId, prevStatus.getOvfId()); if (expectedStatus == TemplateStatusEnumType.ERROR) { Assert.assertNotNull(prevStatus.getErrorCause()); } else { Assert.assertNull(prevStatus.getErrorCause()); } } /** * @return the number of ovf availables * @throws AMClientException */ public Integer ovfAvailable(final String ovfId, final Boolean isContained) throws AMClientException { TemplatesStateDto prevList = stub.getTemplatesState(idEnterprise, TemplateStatusEnumType.DOWNLOAD); Assert.assertEquals(isContained, isContained(prevList, ovfId)); return prevList.getCollection().size(); } public void installOvf(final String ovfId) throws AMClientException { // TODO OVFPackageInstanceStatusDto statusInstall = stub.installTemplateDefinition(idEnterprise, ovfId); // Assert.assertNull(statusInstall.getErrorCause()); // Assert.assertEquals(statusInstall.getOvfId(), ovfId); // TODO download or downloading // Assert.assertEquals(statusInstall.getOvfPackageStatus(), // OVFPackageInstanceStatusType.DOWNLOADING); } public void installOvfAndWaitCompletion(final String ovfId) throws Exception { installOvf(ovfId); waitUnitlExpected(ovfId, TemplateStatusEnumType.DOWNLOAD); } /** * Status DOWNLOAD, in the available list and the disk file in the repository fs. * * @throws AMClientException */ public void ovfInstanceExist(final String ovfId) throws AMClientException { ovfStatus(ovfId, TemplateStatusEnumType.DOWNLOAD); ovfAvailable(ovfId, true); TemplateDto pi = stub.getTemplate(idEnterprise, ovfId); File diskFile = new File(REPO_PATH + pi.getDiskFilePath()); Assert.assertTrue(diskFile.exists()); } /** * Status NOT_DOWNLOAD and not available in the list */ public void ovfInstanceNoExist(final String ovfId) throws AMClientException { // The OVF is NOT_DOWNLOAD ovfStatus(ovfId, TemplateStatusEnumType.NOT_DOWNLOAD); // The OVF is not on the available list ovfAvailable(ovfId, false); } public void clean(final String ovfId) throws AMClientException { // deletes the ovfs stub.deleteTemplate(idEnterprise, ovfId); ovfAvailable(ovfId, false); } /** * * * */ protected static void createBundleDiskFile(final String ovfId, final String snapshot) throws Exception { EnterpriseRepositoryService er = ErepoFactory.getRepo(String.valueOf(idEnterprise)); final String ovfpath = TemplateConventions.getRelativePackagePath(ovfId); final String diskFilePathRel = er.getDiskFilePath(ovfId); // final String diskFilePathRel = diskFilePath.substring(diskFilePath.lastIndexOf('/')); final String path = FilenameUtils.concat(FilenameUtils.concat(er.path(), ovfpath), (snapshot + "-snapshot-" + diskFilePathRel)); // "/opt/testvmrepo/1/rs.bcn.abiquo.com/m0n0wall/000snap000-snapshot-m0n0wall-1.3b18-i386-flat.vmdk" File f = new File(path); f.createNewFile(); f.deleteOnExit(); FileWriter fileWriter = new FileWriter(f); for (int i = 0; i < 1000; i++) { fileWriter.write(i % 1); } fileWriter.close(); } protected static File createUploadTempFile() throws IOException { Random rnd = new Random(System.currentTimeMillis()); final String fileName = String.valueOf(rnd.nextLong()); File file = File.createTempFile(fileName, ".uploadTest"); RandomAccessFile f = new RandomAccessFile(file, "rw"); f.setLength(UPLOAD_FILE_SIZE_BYTES); file.deleteOnExit(); return file; } protected static TemplateDto createTestDiskInfoBundle(final String ovfId, final String snapshot) { final String name = ovfId.substring(ovfId.lastIndexOf('/') + 1); final String url = ovfId.substring(0, ovfId.lastIndexOf('/') + 1); final String bundleOVFid = url + snapshot + "-snapshot-" + name; // final String bundleOVFid = // ovfId.substring(0, ovfId.lastIndexOf('.')) + "-snapshot-" + snapshot + ".ovf"; EnterpriseRepositoryService er = ErepoFactory.getRepo(String.valueOf(idEnterprise)); final String diskFilePathRel = er.getDiskFilePath(ovfId); final String diskPath = ("-snapshot-" + diskFilePathRel); TemplateDto di = new TemplateDto(); di.setName("theBundleDiskName"); di.setDescription("theBundleDiskDescription"); di.setCpu(1); di.setHd(Long.valueOf(1024 * 1024 * 10)); di.setRam(Long.valueOf(512)); di.setHdSizeUnit(MemorySizeUnit.BYTE); di.setRamSizeUnit(MemorySizeUnit.BYTE); di.setIconPath("thiIconPath"); di.setDiskFileFormat(DiskFormatType.VMDK_FLAT); // di.setImageSize(121212); // XXX not use di.setDiskFilePath(diskPath); di.setUrl(bundleOVFid); di.setEnterpriseRepositoryId(Integer.valueOf(idEnterprise)); di.setCategoryName("Test others"); return di; } protected static TemplateDto createTestDiskInfoUpload(final String ovfid) { TemplateDto di = new TemplateDto(); di.setName("theDiskName"); di.setDescription("theDiskDescription"); di.setCpu(1); di.setHd(Long.valueOf(1024 * 1024 * 10)); di.setRam(Long.valueOf(512)); di.setHdSizeUnit(MemorySizeUnit.BYTE); di.setRamSizeUnit(MemorySizeUnit.BYTE); di.setIconPath("thiIconPath"); di.setDiskFileFormat(DiskFormatType.VHD_FLAT); // di.setImageSize(121212); // XXX not use di.setDiskFilePath("XXXXXXXXX do not used XXXXXXXXXXX"); // XXX not use di.setUrl(ovfid); di.setEnterpriseRepositoryId(Integer.valueOf(idEnterprise)); di.setCategoryName("Test others"); return di; } protected static Boolean isContained(final TemplatesStateDto list, final String ovfId) { for (TemplateStateDto status : list.getCollection()) { if (ovfId.equalsIgnoreCase(status.getOvfId())) { return true; } } return false; } /** * TODO test timeout */ public void waitUnitlExpected(final String ovfId, final TemplateStatusEnumType expected) throws Exception { Thread.sleep(downloadProgressInterval); // FIXME TemplateStateDto status = stub.getTemplateStatus(idEnterprise, ovfId); if (status.getStatus() == expected) { return; } else if (status.getStatus() == TemplateStatusEnumType.DOWNLOADING) { Thread.sleep(downloadProgressInterval); waitUnitlExpected(ovfId, expected); } else { throw new Exception(String.format("Expected %s get %s", expected.name(), status .getStatus().name())); } } }