GP-0 corrected GhidraURL related test failures

This commit is contained in:
ghidra1 2023-10-04 12:12:45 -04:00
parent 41076f3af0
commit 34b08077dd
2 changed files with 12 additions and 9 deletions

View file

@ -56,7 +56,7 @@ public abstract class GhidraProtocolConnector {
checkProtocol(); checkProtocol();
checkUserInfo(); checkUserInfo();
checkHostInfo(); checkHostInfo();
this.repositoryName = GhidraURL.isServerRepositoryURL(url) ? parseRepositoryName() : null; this.repositoryName = parseRepositoryName();
this.itemPath = parseItemPath(); this.itemPath = parseItemPath();
} }
@ -185,6 +185,9 @@ public abstract class GhidraProtocolConnector {
String path = url.getPath(); String path = url.getPath();
if (repositoryName == null) { if (repositoryName == null) {
if (!StringUtils.isEmpty(path) && !"/".equals(path)) {
throw new MalformedURLException();
}
return null; // presumed server-only URL return null; // presumed server-only URL
} }
@ -206,7 +209,8 @@ public abstract class GhidraProtocolConnector {
} }
/** /**
* Gets the repository name associated with the URL. * Gets the repository name associated with the URL. If a local URL is used this will
* correspond to the project name.
* @return the repository name or null if URL does not identify a specific repository * @return the repository name or null if URL does not identify a specific repository
*/ */
public String getRepositoryName() { public String getRepositoryName() {

View file

@ -35,38 +35,37 @@ public class DefaultLocalGhidraProtocolConnectorParseTest extends AbstractGeneri
DefaultLocalGhidraProtocolConnector pp = DefaultLocalGhidraProtocolConnector pp =
new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/C:/x/y/proj")); new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/C:/x/y/proj"));
assertNull(pp.getRepositoryName()); assertEquals("proj", pp.getRepositoryName());
assertEquals("/", pp.getFolderPath()); assertEquals("/", pp.getFolderPath());
assertNull(pp.getFolderItemName()); assertNull(pp.getFolderItemName());
assertEquals("/", getInstanceField("itemPath", pp)); assertEquals("/", getInstanceField("itemPath", pp));
pp = new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/x/y/proj")); pp = new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/x/y/proj"));
assertNull(pp.getRepositoryName()); assertEquals("proj", pp.getRepositoryName());
assertEquals("/", pp.getFolderPath()); assertEquals("/", pp.getFolderPath());
assertNull(pp.getFolderItemName()); assertNull(pp.getFolderItemName());
assertEquals("/", getInstanceField("itemPath", pp)); assertEquals("/", getInstanceField("itemPath", pp));
pp = new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/x/y/proj?/")); pp = new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/x/y/proj?/"));
assertNull(pp.getRepositoryName()); assertEquals("proj", pp.getRepositoryName());
assertEquals("/", pp.getFolderPath()); assertEquals("/", pp.getFolderPath());
assertNull(pp.getFolderItemName()); assertNull(pp.getFolderItemName());
assertEquals("/", getInstanceField("itemPath", pp)); assertEquals("/", getInstanceField("itemPath", pp));
pp = new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/x/y/proj?/a")); pp = new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/x/y/proj?/a"));
assertNull(pp.getRepositoryName()); assertEquals("proj", pp.getRepositoryName());
assertEquals("/", pp.getFolderPath()); assertEquals("/", pp.getFolderPath());
assertEquals("a", pp.getFolderItemName()); assertEquals("a", pp.getFolderItemName());
assertEquals("/a", getInstanceField("itemPath", pp)); assertEquals("/a", getInstanceField("itemPath", pp));
pp = new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/x/y/proj?/a/b#ref")); pp = new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/x/y/proj?/a/b#ref"));
assertNull(pp.getRepositoryName()); assertEquals("proj", pp.getRepositoryName());
assertEquals("/a", pp.getFolderPath()); assertEquals("/a", pp.getFolderPath());
assertEquals("b", pp.getFolderItemName()); assertEquals("b", pp.getFolderItemName());
assertEquals("/a/b", getInstanceField("itemPath", pp)); assertEquals("/a/b", getInstanceField("itemPath", pp));
try { try {
pp = pp = new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/x/y/proj?//"));
new DefaultLocalGhidraProtocolConnector(new URL("ghidra:/x/y/proj?//"));
fail(); fail();
} }
catch (MalformedURLException e) { catch (MalformedURLException e) {