/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.systemservices; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.junit.Assert; import org.junit.Test; import com.emc.storageos.coordinator.client.model.SoftwareVersion; import com.emc.storageos.coordinator.client.model.SoftwareVersionMetadata; import com.emc.storageos.coordinator.exceptions.InvalidSoftwareVersionException; import java.io.File; import java.nio.charset.StandardCharsets; import javax.swing.filechooser.FileSystemView; public class SoftwareVersionMetadataTest { static File homeDirectory = FileSystemView.getFileSystemView().getHomeDirectory(); static String template = homeDirectory.getAbsolutePath() + File.separator + "%s"; static Random ran = new Random(); @Test public void testSoftwareVersionMetadata() throws Exception { new TestProductName(); // NOSONAR // ("squid:S1848 Suppress Sonar warning that created objects are never used. The constructor is called to set static fields") SoftwareVersionMetadata.setimageFileTemplate(template); String dataString200 = "upgrade_from:vipr-1.1.0.0.*\ndowngrade_to:vipr-1.1.0.0.*\nversion:vipr-2.0.0.0.200"; String dataString201 = "upgrade_from:vipr-1.1.0.0.*;downgrade_to:vipr-1.1.0.0.*;version:vipr-2.0.0.0.201"; String dataString202 = "upgradefrom:vipr-1.0.0.0.*;vipr-1.1.0.0.*\ndowngradeto:vipr-1.1.0.0.*\nversion:vipr-2.0.0.0.202"; String dataString203 = "upgrade_from:\ndowngrade_to:vipr-1.1.0.0.*\nversion:vipr-2.0.0.0.203"; String dataString204 = "upgrade_from:vipr-1.0.0.0.*,vipr-1.1.0.0.*\ndowngrade_to:vipr-1.1.0.0.*\nversion:vipr-2.0.0.0.204"; // Test on dummy vipr-2.0.0.0.200 image file createTestImageFile(dataString200, "vipr-2.0.0.0.200"); SoftwareVersionMetadata data200 = SoftwareVersionMetadata.getInstance(new SoftwareVersion("vipr-2.0.0.0.200")); System.out.println(data200.version.toString()); System.out.println(data200.upgradeFromVersionsList.toString()); System.out.println(data200.downgradeToVersionsList.toString()); List<SoftwareVersion> tmpUpList200 = new ArrayList<SoftwareVersion>(); tmpUpList200.add(new SoftwareVersion("vipr-1.1.0.0.*")); List<SoftwareVersion> tmpDownList200 = new ArrayList<SoftwareVersion>(); tmpDownList200.add(new SoftwareVersion("vipr-1.1.0.0.*")); Assert.assertTrue(new SoftwareVersion("vipr-2.0.0.0.200").equals(data200.version)); Assert.assertTrue(tmpUpList200.equals(data200.upgradeFromVersionsList)); Assert.assertTrue(tmpDownList200.equals(data200.downgradeToVersionsList)); deleteImageFile("vipr-2.0.0.0.200"); // Test on dummy vipr-2.0.0.0.201 image file createTestImageFile(dataString201, "vipr-2.0.0.0.201"); try { SoftwareVersionMetadata data201 = SoftwareVersionMetadata.getInstance(new SoftwareVersion("vipr-2.0.0.0.201")); } catch (Exception e) { Assert.assertEquals(e.getClass(), InvalidSoftwareVersionException.class); } deleteImageFile("vipr-2.0.0.0.201"); // Test on dummy vipr-2.0.0.0.202 image file createTestImageFile(dataString202, "vipr-2.0.0.0.202"); try { SoftwareVersionMetadata data202 = SoftwareVersionMetadata.getInstance(new SoftwareVersion("vipr-2.0.0.0.202")); } catch (Exception e) { Assert.assertEquals(e.getClass(), InvalidSoftwareVersionException.class); } deleteImageFile("vipr-2.0.0.0.202"); // Test on dummy vipr-2.0.0.0.203 image file createTestImageFile(dataString203, "vipr-2.0.0.0.203"); SoftwareVersionMetadata data203 = SoftwareVersionMetadata.getInstance(new SoftwareVersion("vipr-2.0.0.0.203")); System.out.println(data203.version.toString()); System.out.println(data203.upgradeFromVersionsList.toString()); System.out.println(data203.downgradeToVersionsList.toString()); List<SoftwareVersion> tmpUpList203 = new ArrayList<SoftwareVersion>(); List<SoftwareVersion> tmpDownList203 = new ArrayList<SoftwareVersion>(); tmpDownList203.add(new SoftwareVersion("vipr-1.1.0.0.*")); Assert.assertTrue(new SoftwareVersion("vipr-2.0.0.0.203").equals(data203.version)); Assert.assertTrue(tmpUpList203.equals(data203.upgradeFromVersionsList)); Assert.assertTrue(tmpDownList203.equals(data203.downgradeToVersionsList)); deleteImageFile("vipr-2.0.0.0.203"); // Test on dummy vipr-2.0.0.0.204 image file createTestImageFile(dataString204, "vipr-2.0.0.0.204"); SoftwareVersionMetadata data204 = SoftwareVersionMetadata.getInstance(new SoftwareVersion("vipr-2.0.0.0.204")); System.out.println(data204.version.toString()); System.out.println(data204.upgradeFromVersionsList.toString()); System.out.println(data204.downgradeToVersionsList.toString()); List<SoftwareVersion> tmpUpList204 = new ArrayList<SoftwareVersion>(); tmpUpList204.add(new SoftwareVersion("vipr-1.0.0.0.*")); tmpUpList204.add(new SoftwareVersion("vipr-1.1.0.0.*")); List<SoftwareVersion> tmpDownList204 = new ArrayList<SoftwareVersion>(); tmpDownList204.add(new SoftwareVersion("vipr-1.1.0.0.*")); Assert.assertTrue(new SoftwareVersion("vipr-2.0.0.0.204").equals(data204.version)); Assert.assertTrue(tmpUpList204.equals(data204.upgradeFromVersionsList)); Assert.assertTrue(tmpDownList204.equals(data204.downgradeToVersionsList)); deleteImageFile("vipr-2.0.0.0.204"); } private void createTestImageFile(String metadataString, String versionString) throws FileNotFoundException, IOException { byte[] stringByteArray = metadataString.getBytes(StandardCharsets.UTF_8); int len = stringByteArray.length; int x = ran.nextInt(1001); byte[] targetByteArray = new byte[x + 20516]; for (int i = 0; i < len; i++) { targetByteArray[x + i] = stringByteArray[i]; } String testPath = String.format(template, versionString); FileOutputStream fileOuputStream = new FileOutputStream(testPath); fileOuputStream.write(targetByteArray); fileOuputStream.close(); } private void deleteImageFile(String versionString) { String filePath = String.format(template, versionString); File file = new File(filePath); file.delete(); } }