/* * Copyright (c) 2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.util; import static org.easymock.EasyMock.createMock; import java.util.HashMap; import java.util.Map; import org.easymock.EasyMock; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import com.emc.storageos.coordinator.client.service.CoordinatorClient; import com.emc.storageos.db.client.model.DiscoveredDataObject; import com.emc.storageos.model.property.PropertyInfo; import com.emc.storageos.volumecontroller.impl.ControllerUtils; public class VersionCheckerTest { @BeforeClass public static void setup() { CoordinatorClient coordinator = createMock(CoordinatorClient.class); Map<String, String> properties = new HashMap<String, String>(); properties.put("controller_brocade_firmware_version", "11.2.1"); properties.put("controller_mds_firmware_version", "5.0(1a)"); properties.put("controller_rp_firmware_version", "4.1"); properties.put("controller_vmax_firmware_version", "5876.221"); properties.put("controller_vnxblock_firmware_version", "05.32"); properties.put("controller_vnxfile_firmware_version", "7.1.71"); properties.put("controller_isilon_firmware_version", "7.0.2.0"); properties.put("controller_netapp_firmware_version", "8.1.1"); properties.put("controller_vplex_firmware_version", "5.2"); properties.put("controller_smis_provider_version", "4.6.1.1"); properties.put("compute_windows_version", "6.0.6002"); properties.put("compute_suse_linux_version", "11"); properties.put("compute_redhat_linux_version", "5.9"); properties.put("compute_hpux_version", "11.31"); PropertyInfo propertyInfo = new PropertyInfo(properties); EasyMock.expect(coordinator.getPropertyInfo()).andReturn(propertyInfo).anyTimes(); EasyMock.replay(coordinator); new VersionChecker().setCoordinator(coordinator); } private void exceptionHelper(DiscoveredDataObject.Type systemType, String version) { String minimumSupportedVersion = VersionChecker.getMinimumSupportedVersion(systemType); if (VersionChecker.verifyVersionDetails(minimumSupportedVersion, version) >= 0) { Assert.fail("This should have failed but did not. Min version supported: " + minimumSupportedVersion + "; Version checked: " + version); } } private void noExceptionHelper(DiscoveredDataObject.Type systemType, String version) { String minimumSupportedVersion = VersionChecker.getMinimumSupportedVersion(systemType); if (VersionChecker.verifyVersionDetails(minimumSupportedVersion, version) < 0) { Assert.fail("This should have passed but did not. Min version supported: " + minimumSupportedVersion + "; Version checked: " + version); } } private void exceptionHelper(String minimumSupportedVersionKey, String version) { String minimumSupportedVersion = ControllerUtils .getPropertyValueFromCoordinator(new VersionChecker().getCoordinator(), minimumSupportedVersionKey); if (VersionChecker.verifyVersionDetails(minimumSupportedVersion, version) >= 0) { Assert.fail("This should have failed but did not. Min version supported: " + minimumSupportedVersion + "; Version checked: " + version); } } private void noExceptionHelper(String minimumSupportedVersionKey, String version) { String minimumSupportedVersion = ControllerUtils .getPropertyValueFromCoordinator(new VersionChecker().getCoordinator(), minimumSupportedVersionKey); if (VersionChecker.verifyVersionDetails(minimumSupportedVersion, version) < 0) { Assert.fail("This should have passed but did not. Min version supported: " + minimumSupportedVersion + "; Version checked: " + version); } } @Test public void testGenericVersions() { /* These versions are all equal */ Assert.assertTrue(VersionChecker.verifyVersionDetails("1.0", "1.0") == 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("0.1", "0.1") == 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("1.2.3.4", "1.2.3.4") == 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("1.0a", "1.0a") == 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("5.0(1a)", "5.0(1a)") == 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("3.5.SP2", "3.5.SP2") == 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("05.32", "05.32") == 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("1", "1") == 0); /* The second version is higher than the first version */ Assert.assertTrue(VersionChecker.verifyVersionDetails("1.0", "1.0.1") > 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("1.0", "1.0(4a)") > 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("1.2.3", "1.2.3.1") > 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("10.4", "10.5") > 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("22.4(2b)", "22.13(2b)") > 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("3.5.SP2", "3.5.SP12") > 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("05.32", "05.40") > 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("5.0(1a)", "5.0(7)") > 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("1", "2") > 0); /* The second version is lower than the first version */ Assert.assertTrue(VersionChecker.verifyVersionDetails("1.0", "0.9") < 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("1.0(2a)", "1.0(1a)") < 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("1.2.3", "1.2") < 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("22.4(2b)", "22.4(2a)") < 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("10.4", "10.3") < 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("3.5.SP12", "3.5.SP2") < 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("05.32", "05.31") < 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("5.0(7)", "5.0(6b)") < 0); Assert.assertTrue(VersionChecker.verifyVersionDetails("2", "1") < 0); } @Test public void testBrocade() throws Exception { noExceptionHelper(DiscoveredDataObject.Type.brocade, "11.2.1 build 165"); noExceptionHelper(DiscoveredDataObject.Type.brocade, "11.2.1"); exceptionHelper(DiscoveredDataObject.Type.brocade, "11.2.0"); exceptionHelper(DiscoveredDataObject.Type.brocade, "8.5"); } @Test public void testCisco() throws Exception { noExceptionHelper(DiscoveredDataObject.Type.mds, "5.0(4b)"); noExceptionHelper(DiscoveredDataObject.Type.mds, "5.0(1a)"); noExceptionHelper(DiscoveredDataObject.Type.mds, "5.0(7)"); exceptionHelper(DiscoveredDataObject.Type.mds, "5.0"); exceptionHelper(DiscoveredDataObject.Type.mds, "4.9(5b)"); } @Test public void testRp() throws Exception { noExceptionHelper(DiscoveredDataObject.Type.rp, "4.1"); noExceptionHelper(DiscoveredDataObject.Type.rp, "4.2"); noExceptionHelper(DiscoveredDataObject.Type.rp, "4.1.1"); noExceptionHelper(DiscoveredDataObject.Type.rp, "5.0"); exceptionHelper(DiscoveredDataObject.Type.rp, "3.6"); exceptionHelper(DiscoveredDataObject.Type.rp, "3.7.P2(n.128)"); exceptionHelper(DiscoveredDataObject.Type.rp, "3.5.P1"); exceptionHelper(DiscoveredDataObject.Type.rp, "3.4.SP2(p.74)"); exceptionHelper(DiscoveredDataObject.Type.rp, "3.0"); exceptionHelper(DiscoveredDataObject.Type.rp, "4.0"); exceptionHelper(DiscoveredDataObject.Type.rp, "4.0.1"); } @Test public void testVmax() throws Exception { noExceptionHelper(DiscoveredDataObject.Type.vmax, "5876.222"); noExceptionHelper(DiscoveredDataObject.Type.vmax, "5876.231"); exceptionHelper(DiscoveredDataObject.Type.vmax, "5876.211"); exceptionHelper(DiscoveredDataObject.Type.vmax, "5876.22"); } @Test public void testVnxBlock() throws Exception { noExceptionHelper(DiscoveredDataObject.Type.vnxblock, "05.33"); noExceptionHelper(DiscoveredDataObject.Type.vnxblock, "05.42"); exceptionHelper(DiscoveredDataObject.Type.vnxblock, "05.31"); exceptionHelper(DiscoveredDataObject.Type.vnxblock, "5.22"); } @Test public void testVnxFile() throws Exception { noExceptionHelper(DiscoveredDataObject.Type.vnxfile, "7.1.72"); noExceptionHelper(DiscoveredDataObject.Type.vnxfile, "7.2.71"); exceptionHelper(DiscoveredDataObject.Type.vnxfile, "7.1.70"); exceptionHelper(DiscoveredDataObject.Type.vnxfile, "7.0.71"); } @Test public void testIsilon() throws Exception { noExceptionHelper(DiscoveredDataObject.Type.isilon, "7.0.2.1"); noExceptionHelper(DiscoveredDataObject.Type.isilon, "7.0.3.0"); exceptionHelper(DiscoveredDataObject.Type.isilon, "7.0.1.0"); exceptionHelper(DiscoveredDataObject.Type.isilon, "7.0.1.9"); } @Test public void testNetApp() throws Exception { noExceptionHelper(DiscoveredDataObject.Type.netapp, "8.2.1"); noExceptionHelper(DiscoveredDataObject.Type.netapp, "8.1.2"); exceptionHelper(DiscoveredDataObject.Type.netapp, "8.1"); exceptionHelper(DiscoveredDataObject.Type.netapp, "8.0.1"); } @Test public void testVplex() throws Exception { noExceptionHelper(DiscoveredDataObject.Type.vplex, "5.13"); noExceptionHelper(DiscoveredDataObject.Type.vplex, "5.2"); noExceptionHelper(DiscoveredDataObject.Type.vplex, "5.5"); exceptionHelper(DiscoveredDataObject.Type.vplex, "5.0"); exceptionHelper(DiscoveredDataObject.Type.vplex, "5.1"); } @Test public void testSMISProvider() throws Exception { noExceptionHelper("controller_smis_provider_version", "4.6.1.12"); noExceptionHelper("controller_smis_provider_version", "4.6.2.0"); exceptionHelper("controller_smis_provider_version", "4.6.1.0"); exceptionHelper("controller_smis_provider_version", "4.6.0.2"); } @Test public void testWindowsHost() throws Exception { noExceptionHelper("compute_windows_version", "6.0.6002"); noExceptionHelper("compute_windows_version", "6.0.7002"); exceptionHelper("compute_windows_version", "6.0.6001"); exceptionHelper("compute_windows_version", "6.0.7"); } @Test public void testSuseLinuxHost() throws Exception { noExceptionHelper("compute_suse_linux_version", "11"); noExceptionHelper("compute_suse_linux_version", "12"); exceptionHelper("compute_suse_linux_version", "10"); exceptionHelper("compute_suse_linux_version", "10.9"); } @Test public void testRedhatLinuxHost() throws Exception { noExceptionHelper("compute_redhat_linux_version", "5.9"); noExceptionHelper("compute_redhat_linux_version", "6"); exceptionHelper("compute_redhat_linux_version", "5"); exceptionHelper("compute_redhat_linux_version", "4.9"); } @Test public void testHpuxHost() throws Exception { noExceptionHelper("compute_hpux_version", "11.31"); exceptionHelper("compute_hpux_version", "11.30"); exceptionHelper("compute_hpux_version", "10"); exceptionHelper("compute_hpux_version", "10.31"); } }