Skip to content

Commit b9a0add

Browse files
committed
Fix infinite recursion in getMimeType(Path) method
Signed-off-by: YunKui Lu <[email protected]>
1 parent 0d8eebd commit b9a0add

File tree

2 files changed

+79
-2
lines changed

2 files changed

+79
-2
lines changed

models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/MimeTypeDetector.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ public abstract class MimeTypeDetector {
5555
/**
5656
* List of all MIME types supported by the Vertex Gemini API.
5757
*/
58-
private static final Map<String, MimeType> GEMINI_MIME_TYPES = new HashMap<>();
58+
// exposed for testing purposes
59+
static final Map<String, MimeType> GEMINI_MIME_TYPES = new HashMap<>();
5960

6061
public static MimeType getMimeType(URL url) {
6162
return getMimeType(url.getFile());
@@ -70,7 +71,7 @@ public static MimeType getMimeType(File file) {
7071
}
7172

7273
public static MimeType getMimeType(Path path) {
73-
return getMimeType(path.getFileName());
74+
return getMimeType(path.toUri());
7475
}
7576

7677
public static MimeType getMimeType(Resource resource) {
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package org.springframework.ai.vertexai.gemini;
2+
3+
import java.io.File;
4+
import java.net.MalformedURLException;
5+
import java.net.URI;
6+
import java.nio.file.Path;
7+
import java.util.stream.Stream;
8+
9+
import org.junit.jupiter.params.ParameterizedTest;
10+
import org.junit.jupiter.params.provider.Arguments;
11+
import org.junit.jupiter.params.provider.MethodSource;
12+
13+
import org.springframework.core.io.PathResource;
14+
import org.springframework.util.MimeType;
15+
16+
import static org.assertj.core.api.Assertions.assertThat;
17+
import static org.springframework.ai.vertexai.gemini.MimeTypeDetector.GEMINI_MIME_TYPES;
18+
19+
/**
20+
* @author YunKui Lu
21+
*/
22+
class MimeTypeDetectorTests {
23+
24+
private static Stream<Arguments> provideMimeTypes() {
25+
return GEMINI_MIME_TYPES.entrySet().stream().map(entry -> Arguments.of(entry.getKey(), entry.getValue()));
26+
}
27+
28+
@ParameterizedTest
29+
@MethodSource("provideMimeTypes")
30+
void getMimeTypeByURLPath(String extension, MimeType expectedMimeType) throws MalformedURLException {
31+
String path = "https://testhost/test." + extension;
32+
MimeType mimeType = MimeTypeDetector.getMimeType(URI.create(path).toURL());
33+
assertThat(mimeType).isEqualTo(expectedMimeType);
34+
}
35+
36+
@ParameterizedTest
37+
@MethodSource("provideMimeTypes")
38+
void getMimeTypeByURI(String extension, MimeType expectedMimeType) {
39+
String path = "https://testhost/test." + extension;
40+
MimeType mimeType = MimeTypeDetector.getMimeType(URI.create(path));
41+
assertThat(mimeType).isEqualTo(expectedMimeType);
42+
}
43+
44+
@ParameterizedTest
45+
@MethodSource("provideMimeTypes")
46+
void getMimeTypeByFile(String extension, MimeType expectedMimeType) {
47+
String path = "test." + extension;
48+
MimeType mimeType = MimeTypeDetector.getMimeType(new File(path));
49+
assertThat(mimeType).isEqualTo(expectedMimeType);
50+
}
51+
52+
@ParameterizedTest
53+
@MethodSource("provideMimeTypes")
54+
void getMimeTypeByPath(String extension, MimeType expectedMimeType) {
55+
String path = "test." + extension;
56+
MimeType mimeType = MimeTypeDetector.getMimeType(Path.of(path));
57+
assertThat(mimeType).isEqualTo(expectedMimeType);
58+
}
59+
60+
@ParameterizedTest
61+
@MethodSource("provideMimeTypes")
62+
void getMimeTypeByResource(String extension, MimeType expectedMimeType) {
63+
String path = "test." + extension;
64+
MimeType mimeType = MimeTypeDetector.getMimeType(new PathResource(path));
65+
assertThat(mimeType).isEqualTo(expectedMimeType);
66+
}
67+
68+
@ParameterizedTest
69+
@MethodSource("provideMimeTypes")
70+
void getMimeTypeByString(String extension, MimeType expectedMimeType) {
71+
String path = "test." + extension;
72+
MimeType mimeType = MimeTypeDetector.getMimeType(path);
73+
assertThat(mimeType).isEqualTo(expectedMimeType);
74+
}
75+
76+
}

0 commit comments

Comments
 (0)