/* * Copyright (c) 2012-2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.systemservices; import org.junit.Assert; import org.junit.Test; import com.emc.storageos.coordinator.exceptions.InvalidSoftwareVersionException; import com.emc.storageos.coordinator.client.model.SoftwareVersion; public class SoftwareVersionTest { private static String toNoPrefix(String versionStr) { final String[] tokens = versionStr.split("-"); return tokens[tokens.length - 1]; } private void selfTest(String versionStr) throws Exception { System.out.println("selfTest: " + versionStr); final SoftwareVersion version = new SoftwareVersion(versionStr); Assert.assertNotNull(version); Assert.assertTrue(version.equals(new SoftwareVersion(versionStr))); Assert.assertTrue(version.compareTo(new SoftwareVersion(versionStr)) == 0); final String noPrefixVersionStr = toNoPrefix(versionStr); final SoftwareVersion noPrefixVersion = new SoftwareVersion(noPrefixVersionStr); Assert.assertNotNull(noPrefixVersion); Assert.assertTrue(noPrefixVersion.equals(new SoftwareVersion(noPrefixVersionStr))); Assert.assertTrue(noPrefixVersion.compareTo(new SoftwareVersion(noPrefixVersionStr)) == 0); Assert.assertTrue(version.equals(noPrefixVersion)); Assert.assertTrue(version.compareTo(noPrefixVersion) == 0); } // Call with A < B private void pairTest(String versionStrA, String versionStrB) throws Exception { System.out.println("pairTest: " + versionStrA + " : " + versionStrB); final SoftwareVersion versionA = new SoftwareVersion(versionStrA); final SoftwareVersion versionB = new SoftwareVersion(versionStrB); final String noPrefixVersionStrA = toNoPrefix(versionStrA); final SoftwareVersion noPrefixVersionA = new SoftwareVersion(noPrefixVersionStrA); final String noPrefixVersionStrB = toNoPrefix(versionStrB); final SoftwareVersion noPrefixVersionB = new SoftwareVersion(noPrefixVersionStrB); Assert.assertFalse(versionA.equals(versionB)); Assert.assertFalse(versionB.equals(versionA)); Assert.assertTrue(versionA.compareTo(versionB) < 0); Assert.assertTrue(versionB.compareTo(versionA) > 0); Assert.assertFalse(noPrefixVersionA.equals(noPrefixVersionB)); Assert.assertFalse(noPrefixVersionB.equals(noPrefixVersionA)); Assert.assertTrue(noPrefixVersionA.compareTo(noPrefixVersionB) < 0); Assert.assertTrue(noPrefixVersionB.compareTo(noPrefixVersionA) > 0); Assert.assertFalse(versionA.equals(noPrefixVersionB)); Assert.assertFalse(noPrefixVersionB.equals(versionA)); Assert.assertTrue(versionA.compareTo(noPrefixVersionB) < 0); Assert.assertTrue(noPrefixVersionB.compareTo(versionA) > 0); Assert.assertFalse(noPrefixVersionA.equals(versionB)); Assert.assertFalse(versionB.equals(noPrefixVersionA)); Assert.assertTrue(noPrefixVersionA.compareTo(versionB) < 0); Assert.assertTrue(versionB.compareTo(noPrefixVersionA) > 0); } private boolean isUp(String versionStrA, String versionStrB) throws Exception { System.out.println("isUp: " + versionStrA + " : " + versionStrB); return new SoftwareVersion(versionStrA).isSwitchableTo(new SoftwareVersion(versionStrB)); } // Suppress Sonar warning that created objects are never used. The TestProductName constructor is called to set static fields. The // SoftwareVersion constructor is called to validate the version string. @SuppressWarnings("squid:S1848") @Test public void testSoftwareVersion() throws Exception { new TestProductName(); // Positive tests selfTest("vipr-1.0.0.0.r500"); selfTest("vipr-1.0.0.0.500"); selfTest("vipr-1.0.0.33.r500"); selfTest("vipr-1.0.0.33.500"); pairTest("vipr-1.0.0.0.r500", "vipr-1.0.0.0.r501"); pairTest("vipr-1.0.0.0.r500", "vipr-1.0.0.0.500"); pairTest("vipr-1.0.0.0.r499", "vipr-1.0.0.0.500"); pairTest("vipr-1.0.0.0.r501", "vipr-1.0.0.0.500"); pairTest("vipr-1.0.0.0.500", "vipr-1.0.0.0.501"); pairTest("vipr-1.0.0.0.500", "vipr-1.0.0.1.400"); pairTest("vipr-1.0.0.0.500", "vipr-1.0.0.33.400"); pairTest("vipr-1.0.0.0.500", "vipr-1.1.0.0.400"); pairTest("vipr-1.0.0.0.500", "vipr-1.33.0.0.400"); pairTest("vipr-1.0.0.0.5", "vipr-1.0.0.0.400"); Assert.assertTrue(isUp("vipr-1.0.0.0.r500", "vipr-1.0.0.0.r555")); Assert.assertTrue(isUp("vipr-1.0.0.0.r500", "vipr-1.0.0.0.555")); Assert.assertTrue(isUp("vipr-1.0.0.0.r555", "vipr-1.0.0.0.r500")); Assert.assertTrue(isUp("vipr-1.0.0.0.555", "vipr-1.0.0.0.r500")); Assert.assertTrue(isUp("vipr-1.0.0.0.500", "vipr-1.0.0.0.555")); Assert.assertTrue(isUp("vipr-1.0.0.0.555", "vipr-1.0.0.0.500")); Assert.assertTrue(isUp("vipr-1.0.0.4.r500", "vipr-1.0.0.5.r555")); Assert.assertTrue(isUp("vipr-1.0.0.4.r500", "vipr-1.0.0.5.555")); Assert.assertTrue(isUp("vipr-1.0.0.4.r555", "vipr-1.0.0.5.r500")); Assert.assertTrue(isUp("vipr-1.0.0.4.555", "vipr-1.0.0.5.r500")); Assert.assertTrue(isUp("vipr-1.0.0.4.500", "vipr-1.0.0.5.555")); Assert.assertTrue(isUp("vipr-1.0.0.4.555", "vipr-1.0.0.5.500")); // Negative format tests try { new SoftwareVersion("vipr-1.00.1.3.r500"); Assert.assertNotNull("Invalid format accepted"); } catch (InvalidSoftwareVersionException e) { Assert.assertNotNull(e); } try { new SoftwareVersion("vipr-1.00.1.3.500"); Assert.assertNotNull("Invalid format accepted"); } catch (InvalidSoftwareVersionException e) { Assert.assertNotNull(e); } try { new SoftwareVersion("vipr-1.0.01.3.r500"); Assert.assertNotNull("Invalid format accepted"); } catch (InvalidSoftwareVersionException e) { Assert.assertNotNull(e); } try { new SoftwareVersion("vipr-1.0.01.3.500"); Assert.assertNotNull("Invalid format accepted"); } catch (InvalidSoftwareVersionException e) { Assert.assertNotNull(e); } try { new SoftwareVersion("1-0.0.0.r500"); Assert.assertNotNull("Invalid format accepted"); } catch (InvalidSoftwareVersionException e) { Assert.assertNotNull(e); } try { new SoftwareVersion("vipr-1.0.0.r500"); Assert.assertNotNull("Invalid format accepted"); } catch (InvalidSoftwareVersionException e) { Assert.assertNotNull(e); } try { new SoftwareVersion("vipr-1.0.0.0."); Assert.assertNotNull("Invalid format accepted"); } catch (InvalidSoftwareVersionException e) { Assert.assertNotNull(e); } } }