From d49ab73d81475a28aead948db6538e36cbb520c2 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Tue, 4 Oct 2011 22:36:00 +0100
Subject: [PATCH] Unit tests and bug fixes for removable drive finders.

---
 .../file/LinuxRemovableDriveFinder.java       |  5 ++--
 .../plugins/file/MacRemovableDriveFinder.java |  5 ++--
 test/build.xml                                |  2 ++
 .../file/LinuxRemovableDriveFinderTest.java   | 25 +++++++++++++++++++
 .../file/MacRemovableDriveFinderTest.java     | 23 +++++++++++++++++
 5 files changed, 56 insertions(+), 4 deletions(-)
 create mode 100644 test/net/sf/briar/plugins/file/LinuxRemovableDriveFinderTest.java
 create mode 100644 test/net/sf/briar/plugins/file/MacRemovableDriveFinderTest.java

diff --git a/components/net/sf/briar/plugins/file/LinuxRemovableDriveFinder.java b/components/net/sf/briar/plugins/file/LinuxRemovableDriveFinder.java
index ccdf0bc0e2..4973d52243 100644
--- a/components/net/sf/briar/plugins/file/LinuxRemovableDriveFinder.java
+++ b/components/net/sf/briar/plugins/file/LinuxRemovableDriveFinder.java
@@ -10,8 +10,9 @@ class LinuxRemovableDriveFinder extends UnixRemovableDriveFinder {
 	@Override
 	protected String parseMountPoint(String line) {
 		// The format is "/dev/foo on /bar/baz type bam (opt1,opt2)"
-		line = line.replaceFirst("^/dev/[^ ]+ on ", "");
-		return line.replaceFirst(" type [^ ]+ \\([^)]+\\)$", "");
+		String pattern = "^/dev/[^ ]+ on (.*) type [^ ]+ \\([^)]+\\)$";
+		String path = line.replaceFirst(pattern, "$1");
+		return path.equals(line) ? null : path;
 	}
 
 	@Override
diff --git a/components/net/sf/briar/plugins/file/MacRemovableDriveFinder.java b/components/net/sf/briar/plugins/file/MacRemovableDriveFinder.java
index ec1ae07086..453a3d836b 100644
--- a/components/net/sf/briar/plugins/file/MacRemovableDriveFinder.java
+++ b/components/net/sf/briar/plugins/file/MacRemovableDriveFinder.java
@@ -10,8 +10,9 @@ class MacRemovableDriveFinder extends UnixRemovableDriveFinder {
 	@Override
 	protected String parseMountPoint(String line) {
 		// The format is "/dev/foo on /bar/baz (opt1, opt2)"
-		line = line.replaceFirst("^/dev/[^ ]+ on ", "");
-		return line.replaceFirst(" \\([^)]+\\)$", "");
+		String pattern = "^/dev/[^ ]+ on (.*) \\([^)]+\\)$";
+		String path = line.replaceFirst(pattern, "$1");
+		return path.equals(line) ? null : path;
 	}
 
 	@Override
diff --git a/test/build.xml b/test/build.xml
index 73ecb1176d..bb35591483 100644
--- a/test/build.xml
+++ b/test/build.xml
@@ -25,6 +25,8 @@
 			<test name='net.sf.briar.i18n.FontManagerTest'/>
 			<test name='net.sf.briar.i18n.I18nTest'/>
 			<test name='net.sf.briar.invitation.InvitationWorkerTest'/>
+			<test name='net.sf.briar.plugins.file.LinuxRemovableDriveFinderTest'/>
+			<test name='net.sf.briar.plugins.file.MacRemovableDriveFinderTest'/>
 			<test name='net.sf.briar.plugins.file.RemovableDrivePluginTest'/>
 			<test name='net.sf.briar.protocol.AckReaderTest'/>
 			<test name='net.sf.briar.protocol.BatchReaderTest'/>
diff --git a/test/net/sf/briar/plugins/file/LinuxRemovableDriveFinderTest.java b/test/net/sf/briar/plugins/file/LinuxRemovableDriveFinderTest.java
new file mode 100644
index 0000000000..4a8a85b5d2
--- /dev/null
+++ b/test/net/sf/briar/plugins/file/LinuxRemovableDriveFinderTest.java
@@ -0,0 +1,25 @@
+package net.sf.briar.plugins.file;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+public class LinuxRemovableDriveFinderTest extends TestCase {
+
+	@Test
+	public void testParseMountPoint() {
+		LinuxRemovableDriveFinder f = new LinuxRemovableDriveFinder();
+		String line = "/dev/sda3 on / type ext3"
+			+ " (rw,errors=remount-ro,commit=0)";
+		assertEquals("/", f.parseMountPoint(line));
+		line = "gvfs-fuse-daemon on /home/alice/.gvfs"
+			+ " type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=alice)";
+		assertEquals(null, f.parseMountPoint(line)); // Can't be parsed
+		line = "fusectl on /sys/fs/fuse/connections type fusectl (rw)";
+		assertEquals(null, f.parseMountPoint(line)); // Can't be parsed
+		line = "/dev/sdd1 on /media/HAZ SPACE(!) type vfat"
+			+ " (rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,"
+			+ "shortname=mixed,dmask=0077,utf8=1,showexec,flush)";
+		assertEquals("/media/HAZ SPACE(!)", f.parseMountPoint(line));
+	}
+}
diff --git a/test/net/sf/briar/plugins/file/MacRemovableDriveFinderTest.java b/test/net/sf/briar/plugins/file/MacRemovableDriveFinderTest.java
new file mode 100644
index 0000000000..0b1848033a
--- /dev/null
+++ b/test/net/sf/briar/plugins/file/MacRemovableDriveFinderTest.java
@@ -0,0 +1,23 @@
+package net.sf.briar.plugins.file;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+public class MacRemovableDriveFinderTest extends TestCase {
+
+	@Test
+	public void testParseMountPoint() {
+		MacRemovableDriveFinder f = new MacRemovableDriveFinder();
+		String line = "/dev/disk0s3 on / (local, journaled)";
+		assertEquals("/", f.parseMountPoint(line));
+		line = "devfs on /dev (local)";
+		assertEquals(null, f.parseMountPoint(line)); // Can't be parsed
+		line = "<volfs> on /.vol";
+		assertEquals(null, f.parseMountPoint(line)); // Can't be parsed
+		line = "automount -nsl [117] on /Network (automounted)";
+		assertEquals(null, f.parseMountPoint(line)); // Can't be parsed
+		line = "/dev/disk1s1 on /Volumes/HAZ SPACE(!) (local, nodev, nosuid)";
+		assertEquals("/Volumes/HAZ SPACE(!)", f.parseMountPoint(line));
+	}
+}
-- 
GitLab