From: <tr...@hy...> - 2010-03-31 21:15:22
|
Author: trader Date: 2010-03-31 14:15:12 -0700 (Wed, 31 Mar 2010) New Revision: 14455 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=14455 Added: trunk/unittest/src/org/hyperic/hq/product/ServerDetector_test.java Modified: trunk/src/org/hyperic/hq/product/ServerDetector.java Log: HHQ-3852: Sendmail not discovered, NPE during auto-discovery Modified: trunk/src/org/hyperic/hq/product/ServerDetector.java =================================================================== --- trunk/src/org/hyperic/hq/product/ServerDetector.java 2010-03-31 20:53:17 UTC (rev 14454) +++ trunk/src/org/hyperic/hq/product/ServerDetector.java 2010-03-31 21:15:12 UTC (rev 14455) @@ -84,9 +84,9 @@ private static final String SERVER_SIGS = "etc/hq-server-sigs.properties"; - private static final String VERSION_FILE = "VERSION_FILE"; - private static final String INSTALLPATH_MATCH = "INSTALLPATH_MATCH"; - private static final String INSTALLPATH_NOMATCH = "INSTALLPATH_NOMATCH"; + protected static final String VERSION_FILE = "VERSION_FILE"; + protected static final String INSTALLPATH_MATCH = "INSTALLPATH_MATCH"; + protected static final String INSTALLPATH_NOMATCH = "INSTALLPATH_NOMATCH"; protected static final String INSTALLPATH = "INSTALLPATH"; protected static final String INVENTORY_ID = "INVENTORY_ID"; protected static final String AUTOINVENTORY_NAME = "AUTOINVENTORY_NAME"; @@ -479,28 +479,31 @@ String installPathMatch = getTypeProperty(INSTALLPATH_MATCH); String installPathNoMatch = getTypeProperty(INSTALLPATH_NOMATCH); - if(versionFile.startsWith("**/")){ // recursive & regexpr - versionFile=versionFile.substring(3); - File f=findVersionFile(new File(installpath),versionFile); - if(f==null) - return false; - getLog().debug(VERSION_FILE + "=" + versionFile + " matches -> " + f); - Matcher m = Pattern.compile(versionFile).matcher(f.getAbsolutePath()); - m.find(); - if(m.groupCount()!=0){ // have version group - if(!getTypeInfo().getVersion().equals(m.group(1))){ - getLog().debug(installpath + " not a match for version " + getTypeInfo().getVersion() + ", skipping"); + if (versionFile != null) { + if (versionFile.startsWith("**/")) { // recursive & regexpr + versionFile=versionFile.substring(3); + File f=findVersionFile(new File(installpath),versionFile); + if (f==null) { return false; } - } - }else{ - if (versionFile != null) { + + getLog().debug(VERSION_FILE + "=" + versionFile + " matches -> " + f); + Matcher m = Pattern.compile(versionFile).matcher(f.getAbsolutePath()); + m.find(); + if(m.groupCount()!=0){ // have version group + if(!getTypeInfo().getVersion().equals(m.group(1))){ + getLog().debug(installpath + " not a match for version " + getTypeInfo().getVersion() + ", skipping"); + return false; + } + } + } else { File instPath = new File(installpath); if (instPath.isFile() && !instPath.isDirectory()) { instPath = instPath.getParentFile(); } - File file = (instPath != null) ? new File(instPath, versionFile) : - new File(installpath, versionFile); + File file = (instPath != null) ? + new File(instPath, versionFile) : + new File(versionFile); if (!file.exists()) { String[] expanded = PluginLoader.expand(file); if ((expanded == null) || (expanded.length == 0)) { Added: trunk/unittest/src/org/hyperic/hq/product/ServerDetector_test.java =================================================================== --- trunk/unittest/src/org/hyperic/hq/product/ServerDetector_test.java (rev 0) +++ trunk/unittest/src/org/hyperic/hq/product/ServerDetector_test.java 2010-03-31 21:15:12 UTC (rev 14455) @@ -0,0 +1,192 @@ +package org.hyperic.hq.product; + +import java.io.File; +import java.util.Properties; + +import junit.framework.TestCase; + +public class ServerDetector_test + extends TestCase +{ + private File tmpDir; + private File simpleFile; + private File deepFile; + + protected void setUp() throws Exception { + String tmpDirStr = System.getProperty("java.io.tmpdir"); + if (tmpDirStr != null) { + try { + tmpDir = new File(tmpDirStr); + simpleFile = new File(tmpDir, "installFile"); + simpleFile.createNewFile(); + File d = new File(tmpDir, "deep/dir/structure"); + d.mkdirs(); + deepFile = new File(d, "otherInstallFile"); + deepFile.createNewFile(); + } catch (Exception e) { + tmpDir = null; + simpleFile = null; + deepFile = null; + } + } else { + tmpDir = null; + simpleFile = null; + deepFile = null; + } + } + + public void testDefault() throws Exception { + assertNotNull(tmpDir); + assertNotNull(simpleFile); + + Properties props = new Properties(); + props.setProperty(TestServerDetector.getVersionFile(), simpleFile.getName()); + TestServerDetector tsd = new TestServerDetector(props); + + assertTrue(tsd.isInstallTypeVersion(simpleFile.getParent())); + } + + public void testMatch() throws Exception { + assertNotNull(tmpDir); + assertNotNull(simpleFile); + + // substring match + Properties props = new Properties(); + props.setProperty(TestServerDetector.getVersionFile(), simpleFile.getName()); + String installPath = simpleFile.getParent(); + TestServerDetector tsd; + if (installPath != null && installPath.length() > 2) { + String substringMatch = installPath.substring(1, installPath.length() - 2); + props.setProperty(TestServerDetector.getInstallPathMatch(), substringMatch); + tsd = new TestServerDetector(props); + + assertTrue(tsd.isInstallTypeVersion(simpleFile.getParent())); + } + + // full match + props.setProperty(TestServerDetector.getInstallPathMatch(), installPath); + tsd = new TestServerDetector(props); + + assertTrue(tsd.isInstallTypeVersion(installPath)); + } + + public void testNoMatch() throws Exception { + assertNotNull(tmpDir); + assertNotNull(simpleFile); + + // substring match + Properties props = new Properties(); + props.setProperty(TestServerDetector.getVersionFile(), simpleFile.getName()); + String installPath = simpleFile.getParent(); + TestServerDetector tsd; + if (installPath != null && installPath.length() > 2) { + String substringMatch = installPath.substring(1, installPath.length() - 2); + props.setProperty(TestServerDetector.getInstallPathNoMatch(), substringMatch); + tsd = new TestServerDetector(props); + + assertFalse(tsd.isInstallTypeVersion(installPath)); + } + + // full match + props.setProperty(TestServerDetector.getInstallPathNoMatch(), installPath); + tsd = new TestServerDetector(props); + + assertFalse(tsd.isInstallTypeVersion(installPath)); + } + + public void testMatchAndNoMatchOnSameString() throws Exception { + assertNotNull(tmpDir); + assertNotNull(simpleFile); + + // substring match + Properties props = new Properties(); + props.setProperty(TestServerDetector.getVersionFile(), simpleFile.getName()); + String installPath = simpleFile.getParent(); + TestServerDetector tsd; + + // full match and no match -- logical contradiction, should fail + props.setProperty(TestServerDetector.getInstallPathMatch(), installPath); + props.setProperty(TestServerDetector.getInstallPathNoMatch(), installPath); + tsd = new TestServerDetector(props); + + assertFalse(tsd.isInstallTypeVersion(installPath)); + } + + public void testMatchAndNoMatchOnDifferentStrings() throws Exception { + assertNotNull(tmpDir); + assertNotNull(simpleFile); + + // substring match + Properties props = new Properties(); + props.setProperty(TestServerDetector.getVersionFile(), simpleFile.getName()); + String installPath = simpleFile.getParent(); + String badPath = "gibberish"; + TestServerDetector tsd; + + props.setProperty(TestServerDetector.getInstallPathMatch(), installPath); + props.setProperty(TestServerDetector.getInstallPathNoMatch(), badPath); + tsd = new TestServerDetector(props); + + assertTrue(tsd.isInstallTypeVersion(installPath)); + } + + public void testRecursiveMatch() throws Exception { + assertNotNull(tmpDir); + assertNotNull(deepFile); + + // substring match + Properties props = new Properties(); + props.setProperty(TestServerDetector.getVersionFile(), "**/" + deepFile.getName()); + String installPath = simpleFile.getParent(); + TestServerDetector tsd; + + // full match and no match -- logical contradiction, should fail + props.setProperty(TestServerDetector.getInstallPathMatch(), installPath); + tsd = new TestServerDetector(props); + + assertTrue(tsd.isInstallTypeVersion(installPath)); + } + + public void testRecursiveNoMatch() throws Exception { + assertNotNull(tmpDir); + assertNotNull(deepFile); + + // substring match + Properties props = new Properties(); + props.setProperty(TestServerDetector.getVersionFile(), "**/" + deepFile.getName()); + String installPath = simpleFile.getParent(); + TestServerDetector tsd; + + // full match and no match -- logical contradiction, should fail + props.setProperty(TestServerDetector.getInstallPathNoMatch(), "gobbledygook"); + tsd = new TestServerDetector(props); + + assertTrue(tsd.isInstallTypeVersion(installPath)); + } + + private static class TestServerDetector extends ServerDetector { + + private Properties props; + + public TestServerDetector(Properties props) { + this.props = props; + } + + public String getTypeProperty(String key) { + return props.getProperty(key); + } + + // Expose some protected constants + public static String getVersionFile() { + return VERSION_FILE; + } + + public static String getInstallPathMatch() { + return INSTALLPATH_MATCH; + } + + public static String getInstallPathNoMatch() { + return INSTALLPATH_NOMATCH; + } + } +} |