Merge branch 'jhh992000-3.0.x' into 3.1.x

This commit is contained in:
Marcin Grzejszczak
2022-09-01 12:04:58 +02:00
3 changed files with 41 additions and 4 deletions

View File

@@ -48,7 +48,7 @@ public class ResourcesFileSource implements FileSource {
this(toSources(resources));
}
private ResourcesFileSource(FileSource... sources) {
protected ResourcesFileSource(FileSource... sources) {
this.sources = sources;
}
@@ -110,6 +110,12 @@ public class ResourcesFileSource implements FileSource {
public BinaryFile getBinaryFileNamed(String name) {
for (FileSource resource : this.sources) {
try {
if (resource instanceof ClasspathFileSource) {
ClasspathFileSource classpathFileSource = (ClasspathFileSource) resource;
if (classpathFileSource.exists() && compressedResource(classpathFileSource.getUri())) {
return classpathFileSource.getBinaryFileNamed(name);
}
}
UrlResource uri = new UrlResource(resource.getUri());
if (uri.exists()) {
Resource relativeResource = new UrlResource(uri.getURI() + "/" + name);
@@ -117,9 +123,10 @@ public class ResourcesFileSource implements FileSource {
return resource.getBinaryFileNamed(name);
}
}
}
catch (IOException e) {
// Ignore
} catch (RuntimeException e) {
// Ignore - find next stub file
} catch (IOException e) {
// Ignore - find next stub file
}
}
throw new IllegalStateException("Cannot create file for " + name);

View File

@@ -16,15 +16,25 @@
package org.springframework.cloud.contract.wiremock.file;
import com.github.tomakehurst.wiremock.common.BinaryFile;
import com.github.tomakehurst.wiremock.common.ClasspathFileSource;
import com.github.tomakehurst.wiremock.common.FileSource;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.assertj.core.api.Assertions.assertThat;
@ExtendWith(MockitoExtension.class)
class ResourcesFileSourceTest {
@DisplayName("find all files in the multiple files directories.")
@@ -57,4 +67,24 @@ class ResourcesFileSourceTest {
assertThat(resourcesFileSource.getBinaryFileNamed("response-noticeList-success.json").getStream()).isNotEmpty();
}
@DisplayName("find a stub file in jar")
@Test
void find_stub_file_in_jar() throws URISyntaxException {
// given
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("jarfiles/module-banner-test-fixtures.jar").getFile());
String bannerStubPathInJar = "jar:file:" + file.getAbsolutePath() + "!/wiremock/banner/__files";
String bannerStubFilename = "response-bannerList-success.json";
ClasspathFileSource classpathFileSource1 = mock(ClasspathFileSource.class);
when(classpathFileSource1.getUri()).thenReturn(new URI(bannerStubPathInJar));
when(classpathFileSource1.exists()).thenReturn(true);
when(classpathFileSource1.getBinaryFileNamed(bannerStubFilename)).thenReturn(new BinaryFile(new URI(bannerStubPathInJar + "/response-bannerList-success.json")));
ResourcesFileSource resourcesFileSource = new ResourcesFileSource(classpathFileSource1);
// when & then
assertThat(resourcesFileSource.getBinaryFileNamed(bannerStubFilename).getStream()).isNotEmpty();
}
}