11package com .datadog .debugger .symbol ;
22
33import static org .junit .jupiter .api .Assertions .*;
4+ import static org .mockito .Mockito .mock ;
5+ import static org .mockito .Mockito .when ;
46
57import java .net .MalformedURLException ;
68import java .net .URISyntaxException ;
79import java .net .URL ;
810import java .net .URLClassLoader ;
11+ import java .security .CodeSource ;
12+ import java .security .ProtectionDomain ;
13+ import java .security .cert .Certificate ;
914import org .junit .jupiter .api .Test ;
1015
1116class JarScannerTest {
@@ -31,4 +36,15 @@ public void extractJarPathFromFile() throws ClassNotFoundException, URISyntaxExc
3136 Class <?> testClass = urlClassLoader .loadClass (CLASS_NAME );
3237 assertEquals (jarFileUrl .getFile (), JarScanner .extractJarPath (testClass ).toString ());
3338 }
39+
40+ @ Test
41+ public void extractJarPathFromNestedJar () throws URISyntaxException {
42+ URL jarFileUrl = getClass ().getResource ("/debugger-symbol.jar" );
43+ URL mockLocation = mock (URL .class );
44+ when (mockLocation .toString ())
45+ .thenReturn ("jar:nested:" + jarFileUrl .getFile () + "/!BOOT-INF/classes/!" );
46+ CodeSource codeSource = new CodeSource (mockLocation , (Certificate []) null );
47+ ProtectionDomain protectionDomain = new ProtectionDomain (codeSource , null );
48+ assertEquals (jarFileUrl .getFile (), JarScanner .extractJarPath (protectionDomain ).toString ());
49+ }
3450}
0 commit comments