List:Commits« Previous MessageNext Message »
From:eherman Date:April 26 2006 2:20am
Subject:Connector/MXJ commit: r35 - in trunk/connector-mxj: . src src/com/mysql/management src/com/mysql/management/driverlaunched src/com/mysql/management/jm...
View as plain text  
Modified:
   trunk/connector-mxj/CHANGES
   trunk/connector-mxj/src/ConnectorMXJUrlTestExample.java
   trunk/connector-mxj/src/com/mysql/management/AcceptanceTest.java
   trunk/connector-mxj/src/com/mysql/management/AllTestsSuite.java
   trunk/connector-mxj/src/com/mysql/management/MysqldResource.java
   trunk/connector-mxj/src/com/mysql/management/MysqldResourceTest.java
   trunk/connector-mxj/src/com/mysql/management/MysqldResourceTestImpl.java
   trunk/connector-mxj/src/com/mysql/management/driverlaunched/AcceptanceTest.java
   trunk/connector-mxj/src/com/mysql/management/driverlaunched/MysqldFactory.java
  
trunk/connector-mxj/src/com/mysql/management/driverlaunched/ServerLauncherSocketFactory.java
  
trunk/connector-mxj/src/com/mysql/management/driverlaunched/ServerLauncherSocketFactoryTest.java
   trunk/connector-mxj/src/com/mysql/management/jmx/MysqldDynamicMBeanTest.java
   trunk/connector-mxj/src/com/mysql/management/jmx/SimpleMysqldDynamicMBeanTest.java
   trunk/connector-mxj/src/com/mysql/management/jmx/jboss/JBossMysqldDynamicMBeanTest.java
   trunk/connector-mxj/src/com/mysql/management/util/CommandLineOptionsParser.java
   trunk/connector-mxj/src/com/mysql/management/util/Files.java
   trunk/connector-mxj/src/com/mysql/management/util/FilesTest.java
   trunk/connector-mxj/src/com/mysql/management/util/Str.java
Log:
MysqldResource now tied to dataDir as well as basedir (API CHANGE); moved PID file into
datadir; ServerLauncherSocketFactory.shutdown API change: now takes 2 File: parameters
(basedir, datadir);  insulated users from problems with "." in basedir.


Modified: trunk/connector-mxj/CHANGES
===================================================================
--- trunk/connector-mxj/CHANGES	2006-04-22 17:00:51 UTC (rev 34)
+++ trunk/connector-mxj/CHANGES	2006-04-26 00:20:19 UTC (rev 35)
@@ -1,6 +1,12 @@
 # Changelog
 # $Id: CHANGES,v 1.14 2005/10/25 19:11:16 eherman Exp $
 
+2006-04-25 - MysqldResource now tied to dataDir as well as basedir (API CHANGE)
+           - moved PID file into datadir
+           - ServerLauncherSocketFactory.shutdown API change: now takes 2 File
+             parameters (basedir, datadir)
+           - insulated users from problems with "." in basedir
+
 2006-04-18 - Made tests more robust be deleting the /tmp/test-c.mxj directory
              before running tests.
            - socket is now "mysql.sock" in datadir

Modified: trunk/connector-mxj/src/ConnectorMXJUrlTestExample.java
===================================================================
--- trunk/connector-mxj/src/ConnectorMXJUrlTestExample.java	2006-04-22 17:00:51 UTC (rev
34)
+++ trunk/connector-mxj/src/ConnectorMXJUrlTestExample.java	2006-04-26 00:20:19 UTC (rev
35)
@@ -37,7 +37,7 @@
                 e.printStackTrace();
             }
 
-            ServerLauncherSocketFactory.shutdown(databaseDir);
+            ServerLauncherSocketFactory.shutdown(databaseDir, null);
         }
     }
 

Modified: trunk/connector-mxj/src/com/mysql/management/AcceptanceTest.java
===================================================================
--- trunk/connector-mxj/src/com/mysql/management/AcceptanceTest.java	2006-04-22 17:00:51
UTC (rev 34)
+++ trunk/connector-mxj/src/com/mysql/management/AcceptanceTest.java	2006-04-26 00:20:19
UTC (rev 35)
@@ -102,6 +102,8 @@
         String[] stopArgs1 = new String[] {
                 "--" + MysqldResourceI.BASEDIR + "=" + baseDir1, "--shutdown" };
 
+        MysqldResource.main(startArgs1);
+
         int port2 = port1 + 1000;
         String url2 = "jdbc:mysql://127.0.0.1:" + port2 + "/test";
         File baseDir2 = new File(tmpDir, "cmxj-dir.2");
@@ -111,8 +113,8 @@
         String[] stopArgs2 = new String[] {
                 "--" + MysqldResourceI.BASEDIR + "=" + baseDir2, "--shutdown" };
 
-        MysqldResource.main(startArgs1);
         MysqldResource.main(startArgs2);
+
         testUtil.assertConnectViaJDBC(url1);
         testUtil.assertConnectViaJDBC(url2);
 

Modified: trunk/connector-mxj/src/com/mysql/management/AllTestsSuite.java
===================================================================
--- trunk/connector-mxj/src/com/mysql/management/AllTestsSuite.java	2006-04-22 17:00:51
UTC (rev 34)
+++ trunk/connector-mxj/src/com/mysql/management/AllTestsSuite.java	2006-04-26 00:20:19
UTC (rev 35)
@@ -17,11 +17,11 @@
  */
 package com.mysql.management;
 
-import com.mysql.management.util.Files;
-
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
+import com.mysql.management.util.Files;
+
 /**
  * @author Eric Herman <eric@stripped>
  * @version $Id: AllTestsSuite.java,v 1.6 2005/07/01 02:06:55 eherman Exp $

Modified: trunk/connector-mxj/src/com/mysql/management/MysqldResource.java
===================================================================
--- trunk/connector-mxj/src/com/mysql/management/MysqldResource.java	2006-04-22 17:00:51
UTC (rev 34)
+++ trunk/connector-mxj/src/com/mysql/management/MysqldResource.java	2006-04-26 00:20:19
UTC (rev 35)
@@ -48,6 +48,8 @@
 public final class MysqldResource implements MysqldResourceI {
     public static final String MYSQL_C_MXJ = "mysql-c.mxj";
 
+    public static final String DATA = "data";
+
     private String versionString;
 
     private Map options;
@@ -56,6 +58,8 @@
 
     private File baseDir;
 
+    private File dataDir;
+
     private File pidFile;
 
     private String msgPrefix;
@@ -88,27 +92,36 @@
     }
 
     public MysqldResource(File baseDir) {
-        this(baseDir, MysqldResourceI.DEFAULT_VERSION, System.out, System.err);
+        this(baseDir, new Files().nullFile(), MysqldResourceI.DEFAULT_VERSION,
+                System.out, System.err);
     }
 
-    public MysqldResource(File baseDir, String mysqlVersionString) {
-        this(baseDir, mysqlVersionString, System.out, System.err);
+    public MysqldResource(File baseDir, File dataDir) {
+        this(baseDir, dataDir, MysqldResourceI.DEFAULT_VERSION, System.out,
+                System.err);
     }
 
-    public MysqldResource(File baseDir, String mysqlVersionString,
-            PrintStream out, PrintStream err) {
-        this(baseDir, mysqlVersionString, out, err, new Utils());
+    public MysqldResource(File baseDir, File dataDir, String mysqlVersionString) {
+        this(baseDir, dataDir, mysqlVersionString, System.out, System.err);
     }
 
-    MysqldResource(File baseDir, String mysqlVersionString, PrintStream out,
-            PrintStream err, Utils util) {
+    public MysqldResource(File baseDir, File dataDir,
+            String mysqlVersionString, PrintStream out, PrintStream err) {
+        this(baseDir, dataDir, mysqlVersionString, out, err, new Utils());
+    }
+
+    MysqldResource(File baseDir, File dataDir, String mysqlVersionString,
+            PrintStream out, PrintStream err, Utils util) {
         this.out = out;
         this.err = err;
         this.utils = util;
         this.optionParser = new HelpOptionsParser(err, utils);
-        setVersion(mysqlVersionString);
         this.killDelay = 30000;
-        this.baseDir = validBaseDir(baseDir);
+        this.baseDir = utils.files().validCononicalDir(baseDir,
+                utils.files().tmp(MYSQL_C_MXJ));
+        this.dataDir = utils.files().validCononicalDir(dataDir,
+                new File(this.baseDir, DATA));
+        setVersion(false, mysqlVersionString);
         this.pidFile = null;
         this.msgPrefix = "[" + utils.str().shortClassName(getClass()) + "] ";
         this.options = new HashMap();
@@ -172,19 +185,6 @@
         setReadyForConnection(ready);
     }
 
-    final File validBaseDir(File dir) {
-        if (dir == null || dir.equals(utils.files().nullFile())) {
-            dir = utils.files().tmp(MYSQL_C_MXJ);
-        }
-        if (!dir.exists()) {
-            dir.mkdirs();
-        }
-        if (!dir.isDirectory()) {
-            throw new IllegalArgumentException(dir + " not a directory");
-        }
-        return dir;
-    }
-
     private void setReadyForConnection(boolean ready) {
         readyForConnections = ready;
     }
@@ -347,10 +347,12 @@
         return getVersion().replaceAll("\\.", "-");
     }
 
-    public synchronized void setVersion(String mysqlVersionString) {
-        if (isRunning()) {
+    private synchronized void setVersion(boolean check,
+            String mysqlVersionString) {
+        if (check && isRunning()) {
             throw new IllegalStateException("Already running");
         }
+
         if (mysqlVersionString == null) {
             versionString = DEFAULT_VERSION;
         } else {
@@ -358,6 +360,10 @@
         }
     }
 
+    public synchronized void setVersion(String mysqlVersionString) {
+        setVersion(true, mysqlVersionString);
+    }
+
     private void printMessage(String msg) {
         println(out, msg);
     }
@@ -388,13 +394,14 @@
     /** called from option parser as well */
     synchronized Shell exec(String threadName, Map mysqldArgs,
             PrintStream outStream, PrintStream errStream, boolean withListeners) {
-        mysqldArgs.put(MysqldResourceI.BASEDIR, baseDir.getPath());
-        mysqldArgs.put(MysqldResourceI.PID_FILE, pidFile().getPath());
-        socket(mysqldArgs);
-        File dataDir = dataDir(mysqldArgs);
+        ensureDir(mysqldArgs, baseDir, MysqldResourceI.BASEDIR);
+        ensureDir(mysqldArgs, dataDir, MysqldResourceI.DATADIR);
+        mysqldArgs.put(MysqldResourceI.PID_FILE, utils.files().getPath(
+                pidFile()));
+        ensureSocket(mysqldArgs);
 
         makeMysqld();
-        ensureEssentialFilesExist(dataDir);
+        ensureEssentialFilesExist();
         String[] args = constructArgs(mysqldArgs);
         outStream.println(new ListToString().toString(args));
         Shell launch = utils.shellFactory().newShell(args, threadName,
@@ -444,36 +451,37 @@
         return new File(bin, executableName());
     }
 
-    void ensureEssentialFilesExist(File dataDir) {
+    void ensureEssentialFilesExist() {
         utils.streams().expandResourceJar(dataDir,
                 getVersionDir() + Streams.RESOURCE_SEPARATOR + "data_dir.jar");
         utils.streams().expandResourceJar(baseDir,
                 getVersionDir() + Streams.RESOURCE_SEPARATOR + shareJar());
     }
 
-    void socket(Map mysqldArgs) {
+    void ensureSocket(Map mysqldArgs) {
         String socketString = (String) mysqldArgs.get(MysqldResourceI.SOCKET);
         if (socketString != null) {
             return;
         }
-
         mysqldArgs.put(MysqldResourceI.SOCKET, "mysql.sock");
     }
 
-    File dataDir(Map mysqldArgs) {
-        String dataDirString = (String) mysqldArgs.get(MysqldResourceI.DATADIR);
-        if (dataDirString != null) {
-            return new File(dataDirString);
+    private void ensureDir(Map mysqldArgs, File expected, String key) {
+        String dirString = (String) mysqldArgs.get(key);
+        if (dirString != null) {
+            File asConnonical = utils.files().validCononicalDir(
+                    new File(dirString));
+            if (!expected.equals(asConnonical)) {
+                String msg = dirString + " not equal to " + expected;
+                throw new IllegalArgumentException(msg);
+            }
         }
-
-        File dataDir = new File(baseDir, "data");
-        mysqldArgs.put(MysqldResourceI.DATADIR, dataDir.toString());
-        return dataDir;
+        mysqldArgs.put(key, utils.files().getPath(expected));
     }
 
     String[] constructArgs(Map mysqldArgs) {
         List strs = new ArrayList();
-        strs.add(getMysqldFilePointer().getPath());
+        strs.add(utils.files().getPath(getMysqldFilePointer()));
 
         strs.add("--no-defaults");
         if (isWindows()) {
@@ -497,11 +505,11 @@
     }
 
     protected void finalize() throws Throwable {
-        super.finalize();
         if (getShell() != null) {
             printWarning("resource released without closure.");
             trace.printStackTrace(err);
         }
+        super.finalize();
     }
 
     String shareJar() {
@@ -524,6 +532,10 @@
         return baseDir;
     }
 
+    public File getDataDir() {
+        return dataDir;
+    }
+
     public synchronized void setKillDelay(int millis) {
         this.killDelay = millis;
     }
@@ -554,7 +566,7 @@
     synchronized private File pidFile() {
         if (pidFile == null) {
             String className = utils.str().shortClassName(getClass());
-            pidFile = new File(this.baseDir, className + ".pid");
+            pidFile = new File(this.dataDir, className + ".pid");
         }
         return pidFile;
     }
@@ -602,7 +614,7 @@
         }
 
         MysqldResource mysqld = new MysqldResource(clop.getBaseDir(), clop
-                .getVersion(), out, err);
+                .getDataDir(), clop.getVersion(), out, err);
         if (clop.isShutdown()) {
             mysqld.shutdown();
             return;

Modified: trunk/connector-mxj/src/com/mysql/management/MysqldResourceTest.java
===================================================================
--- trunk/connector-mxj/src/com/mysql/management/MysqldResourceTest.java	2006-04-22
17:00:51 UTC (rev 34)
+++ trunk/connector-mxj/src/com/mysql/management/MysqldResourceTest.java	2006-04-26
00:20:19 UTC (rev 35)
@@ -19,7 +19,6 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.PrintStream;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -54,6 +53,8 @@
 
     private File baseDir;
 
+    private File dataDir;
+
     protected void setUp() {
         super.setUp();
         testUtil = new TestUtil();
@@ -62,12 +63,13 @@
                 new Threads(), new Str());
 
         baseDir = new File(fileUtil.testDir(), "MRTest");
+        dataDir = new File(baseDir, "data");
         fileUtil.deleteTree(baseDir);
         if (baseDir.exists()) {
             warn("residual files");
         }
 
-        mysqldResource = new MysqldResource(baseDir,
+        mysqldResource = new MysqldResource(baseDir, dataDir,
                 MysqldResourceI.DEFAULT_VERSION, System.out, System.err, utils);
         mysqldResource.setKillDelay(10000);
     }
@@ -213,19 +215,16 @@
     }
 
     public void testCreateDbFiles() {
-        File dataDir = new File(mysqldResource.getBaseDir(), "test-data");
+        File dataDir = mysqldResource.getDataDir();
+        new Files().deleteTree(dataDir);
+
         File dbDataDir = new File(dataDir, "mysql");
         File host_frm = new File(dbDataDir, "host.frm");
         assertEquals(false, host_frm.exists());
         assertEquals(false, dataDir.exists());
 
-        Map args = new HashMap();
-        args.put("datadir", dataDir.getPath());
+        mysqldResource.ensureEssentialFilesExist();
 
-        File data = mysqldResource.dataDir(args);
-        mysqldResource.ensureEssentialFilesExist(data);
-        assertEquals(dataDir, data);
-
         assertTrue(host_frm.exists());
     }
 
@@ -262,8 +261,8 @@
     public void testTestReporting() {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         PrintStream captured = new PrintStream(baos);
-        mysqldResource = new MysqldResource(baseDir, null, captured, captured,
-                utils);
+        mysqldResource = new MysqldResource(baseDir, dataDir, null, captured,
+                captured, utils);
 
         mysqldResource.reportIfNoPidfile(true);
         captured.flush();
@@ -310,7 +309,7 @@
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         PrintStream captured = new PrintStream(baos);
 
-        mysqldResource = new MysqldResource(fileUtil.testDir(), null, captured,
+        mysqldResource = new MysqldResource(baseDir, dataDir, null, captured,
                 captured, utils);
         mysqldResource.finalize();
         captured.flush();
@@ -349,29 +348,6 @@
         assertEquals("share_dir.jar", mysqldResource.shareJar());
     }
 
-    public void testValidBaseDir() throws Exception {
-        File defaultBaseDir = fileUtil.tmp(MysqldResource.MYSQL_C_MXJ);
-        assertEquals(defaultBaseDir, mysqldResource.validBaseDir(null));
-        assertEquals(defaultBaseDir, mysqldResource.validBaseDir(fileUtil
-                .nullFile()));
-
-        File foo = new File(fileUtil.testDir(), "junkFile.txt");
-        foo.deleteOnExit();
-        FileOutputStream fos = new FileOutputStream(foo);
-        PrintStream ps = new PrintStream(fos);
-        ps.println("junk");
-        ps.close();
-
-        IllegalArgumentException expected = null;
-        try {
-            mysqldResource.validBaseDir(foo);
-        } catch (IllegalArgumentException e) {
-            expected = e;
-        }
-        assertNotNull(expected);
-        testUtil.assertContainsIgnoreCase(expected.getMessage(), "directory");
-    }
-
     // -------------------
     private static class TestFileUtil extends Files {
         private List execFiles = new ArrayList();

Modified: trunk/connector-mxj/src/com/mysql/management/MysqldResourceTestImpl.java
===================================================================
--- trunk/connector-mxj/src/com/mysql/management/MysqldResourceTestImpl.java	2006-04-22
17:00:51 UTC (rev 34)
+++ trunk/connector-mxj/src/com/mysql/management/MysqldResourceTestImpl.java	2006-04-26
00:20:19 UTC (rev 35)
@@ -34,6 +34,8 @@
 public class MysqldResourceTestImpl implements MysqldResourceI {
     public File baseDir;
 
+    public File dataDir;
+
     public Map runningFakeMysqlds;
 
     private String running;
@@ -42,13 +44,19 @@
 
     private List completionListensers;
 
-    public MysqldResourceTestImpl(File baseDir, Map runningFakeMysqlds) {
-        this(baseDir, new HashMap(), runningFakeMysqlds);
+    public MysqldResourceTestImpl(Map runningFakeMysqlds) {
+        this(null, null, new HashMap(), runningFakeMysqlds);
     }
 
-    public MysqldResourceTestImpl(File baseDir, Map options,
+    public MysqldResourceTestImpl(File baseDir, File dataDir,
             Map runningFakeMysqlds) {
+        this(baseDir, dataDir, new HashMap(), runningFakeMysqlds);
+    }
+
+    public MysqldResourceTestImpl(File baseDir, File dataDir, Map options,
+            Map runningFakeMysqlds) {
         this.baseDir = (baseDir == null) ? new Files().nullFile() : baseDir;
+        this.dataDir = dataDir;
         this.running = null;
         this.currentOptions = options;
         this.completionListensers = new ArrayList();

Modified: trunk/connector-mxj/src/com/mysql/management/driverlaunched/AcceptanceTest.java
===================================================================
---
trunk/connector-mxj/src/com/mysql/management/driverlaunched/AcceptanceTest.java	2006-04-22
17:00:51 UTC (rev 34)
+++
trunk/connector-mxj/src/com/mysql/management/driverlaunched/AcceptanceTest.java	2006-04-26
00:20:19 UTC (rev 35)
@@ -51,7 +51,7 @@
         super.tearDown();
         try {
             File defaultBaseDir = new Files().tmp(MysqldResource.MYSQL_C_MXJ);
-            ServerLauncherSocketFactory.shutdown(defaultBaseDir);
+            ServerLauncherSocketFactory.shutdown(defaultBaseDir, null);
         } catch (MysqldResourceNotFoundException e) {
             warn(e);
         } finally {

Modified: trunk/connector-mxj/src/com/mysql/management/driverlaunched/MysqldFactory.java
===================================================================
---
trunk/connector-mxj/src/com/mysql/management/driverlaunched/MysqldFactory.java	2006-04-22
17:00:51 UTC (rev 34)
+++
trunk/connector-mxj/src/com/mysql/management/driverlaunched/MysqldFactory.java	2006-04-26
00:20:19 UTC (rev 35)
@@ -23,11 +23,11 @@
 import com.mysql.management.MysqldResourceI;
 
 public interface MysqldFactory {
-    MysqldResourceI newMysqldResource(File baseDir);
+    MysqldResourceI newMysqldResource(File baseDir, File dataDir);
 
     public static final class Default implements MysqldFactory {
-        public MysqldResourceI newMysqldResource(File baseDir) {
-            return new MysqldResource(baseDir);
+        public MysqldResourceI newMysqldResource(File baseDir, File dataDir) {
+            return new MysqldResource(baseDir, dataDir);
         }
     }
 }
\ No newline at end of file

Modified:
trunk/connector-mxj/src/com/mysql/management/driverlaunched/ServerLauncherSocketFactory.java
===================================================================
---
trunk/connector-mxj/src/com/mysql/management/driverlaunched/ServerLauncherSocketFactory.java	2006-04-22
17:00:51 UTC (rev 34)
+++
trunk/connector-mxj/src/com/mysql/management/driverlaunched/ServerLauncherSocketFactory.java	2006-04-26
00:20:19 UTC (rev 35)
@@ -70,21 +70,29 @@
             }
         }
         serverOpts.put(MysqldResourceI.PORT, Integer.toString(port));
-        File baseDir = new Files().newFile(serverOpts
-                .get(MysqldResourceI.BASEDIR));
+        Object baseDirStr = serverOpts.get(MysqldResourceI.BASEDIR);
+        File baseDir = new Files().newFile(baseDirStr);
 
-        MysqldResourceI mysqld = resourceFactory.newMysqldResource(baseDir);
+        String dataDirString = (String) serverOpts.get(MysqldResourceI.DATADIR);
 
+        File dataDir = null;
+        if (dataDirString != null) {
+            File ddir = new File(dataDirString);
+            dataDir = new Files().validCononicalDir(ddir);
+        }
+
+        MysqldResourceI mysqld = resourceFactory.newMysqldResource(baseDir,
+                dataDir);
+
         if (mysqld.isRunning()) {
             Object runningPort = mysqld.getServerOptions().get(
                     MysqldResourceI.PORT);
-            if (runningPort.equals(Integer.toString(port))) {
-                return;
+            if (!runningPort.equals(Integer.toString(port))) {
+                String msg = "Mysqld at " + mysqld.getBaseDir()
+                        + " is running on port " + runningPort + " not " + port;
+                throw new RuntimeException(msg);
             }
-            String msg = "Mysqld at " + mysqld.getBaseDir()
-                    + " is running on port " + runningPort + " not " + port;
-            throw new RuntimeException(msg);
-
+            return;
         }
 
         mysqld.setVersion((String) serverOpts
@@ -120,8 +128,8 @@
     }
 
     // -------------------------------------------------------------
-    public synchronized static boolean shutdown(File baseDir) {
-        MysqldResource mysqld = new MysqldResource(baseDir);
+    public synchronized static boolean shutdown(File baseDir, File dataDir) {
+        MysqldResource mysqld = new MysqldResource(baseDir, dataDir);
         mysqld.shutdown();
         return mysqld.isRunning();
     }

Modified:
trunk/connector-mxj/src/com/mysql/management/driverlaunched/ServerLauncherSocketFactoryTest.java
===================================================================
---
trunk/connector-mxj/src/com/mysql/management/driverlaunched/ServerLauncherSocketFactoryTest.java	2006-04-22
17:00:51 UTC (rev 34)
+++
trunk/connector-mxj/src/com/mysql/management/driverlaunched/ServerLauncherSocketFactoryTest.java	2006-04-26
00:20:19 UTC (rev 35)
@@ -19,7 +19,6 @@
 
 import java.io.File;
 import java.net.Socket;
-import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -41,8 +40,8 @@
             this.fakeRunningMysqlds = new HashMap();
         }
 
-        public MysqldResourceI newMysqldResource(File base) {
-            return new MysqldResourceTestImpl(base, fakeRunningMysqlds);
+        public MysqldResourceI newMysqldResource(File base, File data) {
+            return new MysqldResourceTestImpl(base, data, fakeRunningMysqlds);
         }
     }
 

Modified: trunk/connector-mxj/src/com/mysql/management/jmx/MysqldDynamicMBeanTest.java
===================================================================
---
trunk/connector-mxj/src/com/mysql/management/jmx/MysqldDynamicMBeanTest.java	2006-04-22
17:00:51 UTC (rev 34)
+++
trunk/connector-mxj/src/com/mysql/management/jmx/MysqldDynamicMBeanTest.java	2006-04-26
00:20:19 UTC (rev 35)
@@ -33,7 +33,8 @@
  */
 public class MysqldDynamicMBeanTest extends TestCase {
     public void testAutoStart() throws Exception {
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                new HashMap());
         MysqldDynamicMBean myBean = new MysqldDynamicMBean(mysqld);
         assertFalse(mysqld.isRunning());
         String autostart = SimpleMysqldDynamicMBean.AUTOSTART_ATTR;

Modified:
trunk/connector-mxj/src/com/mysql/management/jmx/SimpleMysqldDynamicMBeanTest.java
===================================================================
---
trunk/connector-mxj/src/com/mysql/management/jmx/SimpleMysqldDynamicMBeanTest.java	2006-04-22
17:00:51 UTC (rev 34)
+++
trunk/connector-mxj/src/com/mysql/management/jmx/SimpleMysqldDynamicMBeanTest.java	2006-04-26
00:20:19 UTC (rev 35)
@@ -47,8 +47,8 @@
     public void testGetMBeanInfo() throws Exception {
         Map options = new HashMap();
         options.put("foo", "bar");
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, options,
-                new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                options, new HashMap());
 
         SimpleMysqldDynamicMBean myBean = new SimpleMysqldDynamicMBean(mysqld);
 
@@ -110,8 +110,8 @@
     public void testGetAttribute() throws Exception {
         Map options = new HashMap();
         options.put("foo", "bar");
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, options,
-                new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                options, new HashMap());
 
         SimpleMysqldDynamicMBean myBean = new SimpleMysqldDynamicMBean(mysqld);
         assertEquals("bar", myBean.getAttribute("foo"));
@@ -128,8 +128,8 @@
         options.put("foo", "bar");
         options.put("baz", "wiz");
         options.put("datadir", "/bogus/dir");
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, options,
-                new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                options, new HashMap());
 
         SimpleMysqldDynamicMBean myBean = new SimpleMysqldDynamicMBean(mysqld);
         AttributeList attributeList = myBean.getAttributes(new String[] {
@@ -143,8 +143,8 @@
     public void testGetAgentVersion() throws Exception {
         Map options = new HashMap();
         options.put("foo", "bar");
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, options,
-                new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                options, new HashMap());
 
         SimpleMysqldDynamicMBean myBean = new SimpleMysqldDynamicMBean(mysqld);
         String verAttName = myBean.versionAttributeName();
@@ -173,8 +173,8 @@
         options.put("foo", "bar");
         options.put("baz", "wiz");
         options.put("datadir", "/bogus/dir");
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, options,
-                new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                options, new HashMap());
 
         SimpleMysqldDynamicMBean myBean = new SimpleMysqldDynamicMBean(mysqld);
 
@@ -191,8 +191,8 @@
     public void testSetAttribute() throws Exception {
         Map options = new HashMap();
         options.put("foo", "bar");
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, options,
-                new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                options, new HashMap());
         SimpleMysqldDynamicMBean myBean = new SimpleMysqldDynamicMBean(mysqld);
         try {
             myBean.setAttribute(new Attribute("bogus", "werid"));
@@ -203,7 +203,8 @@
     }
 
     public void testAutoStart() throws Exception {
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                new HashMap());
         SimpleMysqldDynamicMBean myBean = new SimpleMysqldDynamicMBean(mysqld);
         assertFalse(mysqld.isRunning());
         String autostart = SimpleMysqldDynamicMBean.AUTOSTART_ATTR;
@@ -214,7 +215,8 @@
     }
 
     public void testInvoke() throws Exception {
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                new HashMap());
         SimpleMysqldDynamicMBean myBean = new SimpleMysqldDynamicMBean(mysqld);
         assertEquals(false, mysqld.isRunning());
         myBean.invoke(SimpleMysqldDynamicMBean.START_METHOD, null, null);
@@ -236,8 +238,8 @@
         options.put("baz", "wiz");
         options.put("datadir", "/bogus/dir");
         options.put("help", "");
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, options,
-                new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                options, new HashMap());
         SimpleMysqldDynamicMBean myBean = new SimpleMysqldDynamicMBean(mysqld);
         myBean.setAttribute(new Attribute("foo", "changed"));
         assertTrue(myBean.attributesToOpionMap().containsKey("foo"));
@@ -249,8 +251,8 @@
     public void testFreezeAttributes() {
         Map options = new HashMap();
         options.put("foo", "bar");
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, options,
-                new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                options, new HashMap());
         SimpleMysqldDynamicMBean myBean = new SimpleMysqldDynamicMBean(mysqld);
 
         MBeanInfo info = myBean.getMBeanInfo();
@@ -266,8 +268,8 @@
     public void testAttributesFrozenWhenRunning() throws ReflectionException {
         Map options = new HashMap();
         options.put("foo", "bar");
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, options,
-                new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null,
+                options, new HashMap());
         SimpleMysqldDynamicMBean myBean = new SimpleMysqldDynamicMBean(mysqld);
 
         MBeanInfo info = myBean.getMBeanInfo();

Modified:
trunk/connector-mxj/src/com/mysql/management/jmx/jboss/JBossMysqldDynamicMBeanTest.java
===================================================================
---
trunk/connector-mxj/src/com/mysql/management/jmx/jboss/JBossMysqldDynamicMBeanTest.java	2006-04-22
17:00:51 UTC (rev 34)
+++
trunk/connector-mxj/src/com/mysql/management/jmx/jboss/JBossMysqldDynamicMBeanTest.java	2006-04-26
00:20:19 UTC (rev 35)
@@ -49,7 +49,7 @@
     }
 
     public void testNoAutoStart() throws Exception {
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(new HashMap());
         JBossMysqldDynamicMBean myBean = new JBossMysqldDynamicMBean(mysqld);
         assertFalse(mysqld.isRunning());
         myBean.create();
@@ -57,7 +57,7 @@
     }
 
     public void testAutoStart() throws Exception {
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, new HashMap());
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(new HashMap());
         JBossMysqldDynamicMBean myBean = new JBossMysqldDynamicMBean(mysqld);
         assertFalse(mysqld.isRunning());
 
@@ -74,7 +74,7 @@
         Map atts = new HashMap();
         atts.put(SimpleMysqldDynamicMBean.AUTOSTART_ATTR, Boolean.TRUE
                 .toString());
-        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, atts,
+        MysqldResourceI mysqld = new MysqldResourceTestImpl(null, null, atts,
                 new HashMap());
         JBossMysqldDynamicMBean myBean = new JBossMysqldDynamicMBean(mysqld);
         assertFalse(mysqld.isRunning());

Modified: trunk/connector-mxj/src/com/mysql/management/util/CommandLineOptionsParser.java
===================================================================
---
trunk/connector-mxj/src/com/mysql/management/util/CommandLineOptionsParser.java	2006-04-22
17:00:51 UTC (rev 34)
+++
trunk/connector-mxj/src/com/mysql/management/util/CommandLineOptionsParser.java	2006-04-26
00:20:19 UTC (rev 35)
@@ -79,9 +79,19 @@
     }
 
     public File getBaseDir() {
-        return fileUtil.newFile(params.get(MysqldResourceI.BASEDIR));
+        return newFile(MysqldResourceI.BASEDIR);
     }
 
+    public File getDataDir() {
+        return newFile(MysqldResourceI.DATADIR);
+    }
+
+    private File newFile(String key) {
+        if (!params.containsKey(key))
+            return fileUtil.nullFile();
+        return fileUtil.newFile(params.get(key));
+    }
+
     public String getVersion() {
         return (String) params.get(MysqldResourceI.MYSQLD_VERSION);
     }

Modified: trunk/connector-mxj/src/com/mysql/management/util/Files.java
===================================================================
--- trunk/connector-mxj/src/com/mysql/management/util/Files.java	2006-04-22 17:00:51 UTC
(rev 34)
+++ trunk/connector-mxj/src/com/mysql/management/util/Files.java	2006-04-26 00:20:19 UTC
(rev 35)
@@ -53,7 +53,7 @@
     }
 
     public File tmp() {
-        return new File(System.getProperty(JAVA_IO_TMPDIR));
+        return cononical(new File(System.getProperty(JAVA_IO_TMPDIR)));
     }
 
     public File tmp(String subdir) {
@@ -120,10 +120,49 @@
         if (fileName == null) {
             return nullFile();
         }
-        return new File(fileName.toString());
+        return cononical(new File(fileName.toString()));
     }
 
+    public File cononical(final File file) {
+        if (file == null) {
+            throw new IllegalArgumentException("File may not be null");
+        }
+
+        return (File) new Exceptions.Block() {
+            protected Object inner() throws Exception {
+                return file.getCanonicalFile();
+            }
+        }.exec();
+    }
+
+    public String getPath(final File file) {
+        return (String) new Exceptions.Block() {
+            protected Object inner() throws Exception {
+                return file.getCanonicalPath();
+            }
+        }.exec();
+    }
+
     public boolean cleanTestDir() {
         return deleteTree(testDir());
     }
+
+    public File validCononicalDir(File dir, File defaultDir) {
+        if (dir == null || dir.equals(nullFile())) {
+            dir = defaultDir;
+        }
+        return validCononicalDir(dir);
+    }
+
+    public File validCononicalDir(final File dir) {
+        File cononical = cononical(dir);
+
+        if (!cononical.exists()) {
+            cononical.mkdirs();
+        }
+        if (!cononical.isDirectory()) {
+            throw new IllegalArgumentException(cononical + " not a directory");
+        }
+        return cononical;
+    }
 }

Modified: trunk/connector-mxj/src/com/mysql/management/util/FilesTest.java
===================================================================
--- trunk/connector-mxj/src/com/mysql/management/util/FilesTest.java	2006-04-22 17:00:51
UTC (rev 34)
+++ trunk/connector-mxj/src/com/mysql/management/util/FilesTest.java	2006-04-26 00:20:19
UTC (rev 35)
@@ -98,4 +98,46 @@
         assertEquals("+x", shell.args[1]);
         assertTrue(shell.args[2].indexOf("bogus") >= 0);
     }
+
+    public void testValidCononicalDir() throws Exception {
+        File foo = fileUtil.tmp("foo");
+        File cononicalFoo = foo.getCanonicalFile();
+        File defaultDir = fileUtil.tmp("defaultDir");
+
+        File valid = fileUtil.validCononicalDir(foo);
+        assertEquals(cononicalFoo, valid);
+
+        valid = fileUtil.validCononicalDir(foo, defaultDir);
+        assertEquals(cononicalFoo, valid);
+
+        valid = fileUtil.validCononicalDir(null, defaultDir);
+        assertEquals(defaultDir, valid);
+
+        File bar = new File(fileUtil.testDir(), "junkFile.txt");
+        bar.deleteOnExit();
+        FileOutputStream fos = new FileOutputStream(bar);
+        PrintStream ps = new PrintStream(fos);
+        ps.println("junk");
+        ps.close();
+        TestUtil testUtil = new TestUtil();
+
+        Exception expected = null;
+        try {
+            fileUtil.validCononicalDir(bar);
+        } catch (IllegalArgumentException e) {
+            expected = e;
+        }
+        assertNotNull(expected);
+        testUtil.assertContainsIgnoreCase(expected.getMessage(), "directory");
+
+        expected = null;
+        try {
+            fileUtil.validCononicalDir(null);
+        } catch (IllegalArgumentException e) {
+            expected = e;
+        }
+        assertNotNull(expected);
+        testUtil.assertContainsIgnoreCase(expected.getMessage(), "null");
+    }
+
 }

Modified: trunk/connector-mxj/src/com/mysql/management/util/Str.java
===================================================================
--- trunk/connector-mxj/src/com/mysql/management/util/Str.java	2006-04-22 17:00:51 UTC
(rev 34)
+++ trunk/connector-mxj/src/com/mysql/management/util/Str.java	2006-04-26 00:20:19 UTC
(rev 35)
@@ -41,6 +41,7 @@
     public Str() {
         newLine = System.getProperty("line.separator");
     }
+
     public boolean containsIgnoreCase(String searchIn, String searchFor) {
 
         return searchIn.toLowerCase().indexOf(searchFor.toLowerCase()) != -1;

Thread
Connector/MXJ commit: r35 - in trunk/connector-mxj: . src src/com/mysql/management src/com/mysql/management/driverlaunched src/com/mysql/management/jm...eherman26 Apr