From 51045cc97e75bf520a2ae68fa3993c148e27e8aa Mon Sep 17 00:00:00 2001 From: Huneea Date: Wed, 31 Aug 2022 01:39:50 +0900 Subject: [PATCH 1/3] fix: Fixed an issue that could not find a resources in the jar file - Issues that occur when executing jar --- .../contract/wiremock/file/ResourcesFileSource.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java index 379cbf076c..5dfaae76c2 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java @@ -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); From 0047ae451d8f180091f61dc7ba253ab2a5336bbd Mon Sep 17 00:00:00 2001 From: Huneea Date: Thu, 1 Sep 2022 04:11:45 +0900 Subject: [PATCH 2/3] test: add test case - find stub file in jar --- .../wiremock/file/ResourcesFileSource.java | 2 +- .../file/ResourcesFileSourceTest.java | 30 ++++++++++++++++++ .../jarfiles/module-banner-test-fixtures.jar | Bin 0 -> 1146 bytes 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-contract-wiremock/src/test/resources/jarfiles/module-banner-test-fixtures.jar diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java index 5dfaae76c2..56388ff9f4 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java @@ -48,7 +48,7 @@ public class ResourcesFileSource implements FileSource { this(toSources(resources)); } - private ResourcesFileSource(FileSource... sources) { + protected ResourcesFileSource(FileSource... sources) { this.sources = sources; } diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java index a83c5e6707..911b03f0a4 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java @@ -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(); + } + } diff --git a/spring-cloud-contract-wiremock/src/test/resources/jarfiles/module-banner-test-fixtures.jar b/spring-cloud-contract-wiremock/src/test/resources/jarfiles/module-banner-test-fixtures.jar new file mode 100644 index 0000000000000000000000000000000000000000..95a8bedd0a38da5562eb44ca122d29a3e12e0320 GIT binary patch literal 1146 zcmWIWW@h1HVBp|j(3MvVWdH&u5CH_7KE;?7qUY=O+4sz8A8%c~i@e^tTIbH3-yCFc#rVO~M^Bm13O$=I$t*6>O)VlD{HdL@Xut~|QbQq_UAa;c?d%+?sRuyXy)Et3aw8Y2UP z1&K~8E=^8OEiOiKoR_ZNSxwEbO+g)OMWQ0B4ypt!ve+u1k+FjL@${5wPnIybPT?tJ zRNZmw$)7!wuIv%ov+Ckkk)_Lat4wRiH83(Tx@2x}+1wGZW%3B|JnmtF2DU|N%R zc&&^tzuERkhr4Vl$vd-l?g09Mkx7IZcRB-l1PBBe-a3M4c&bC!hMwv`ia}sWqb87q zYePzd=q7+vBPVbWA7XJCkcOuxeA++>4+22$oeyNfwLz01KHZ>X2mv77=YdRg-LOQ7 yZVGy$gqgFXksX*8aG8QXiK5$qp1KfrEF#ek Date: Thu, 1 Sep 2022 12:49:06 +0200 Subject: [PATCH 3/3] Updated code to remove checkstyle issues --- .../wiremock/file/ResourcesFileSource.java | 6 ++++-- .../wiremock/file/ResourcesFileSourceTest.java | 17 ++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java index 56388ff9f4..ef4a0a2fb7 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java @@ -123,9 +123,11 @@ public class ResourcesFileSource implements FileSource { return resource.getBinaryFileNamed(name); } } - } catch (RuntimeException e) { + } + catch (RuntimeException e) { // Ignore - find next stub file - } catch (IOException e) { + } + catch (IOException e) { // Ignore - find next stub file } } diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java index 911b03f0a4..8b9c063802 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java @@ -16,25 +16,23 @@ 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 com.github.tomakehurst.wiremock.common.BinaryFile; +import com.github.tomakehurst.wiremock.common.ClasspathFileSource; +import com.github.tomakehurst.wiremock.common.FileSource; 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.assertj.core.api.Assertions.assertThat; 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.") @@ -80,7 +78,8 @@ class ResourcesFileSourceTest { 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"))); + when(classpathFileSource1.getBinaryFileNamed(bannerStubFilename)) + .thenReturn(new BinaryFile(new URI(bannerStubPathInJar + "/response-bannerList-success.json"))); ResourcesFileSource resourcesFileSource = new ResourcesFileSource(classpathFileSource1); // when & then