From cf24ede9abdee5ece08922dd7d1071cda68fc2a0 Mon Sep 17 00:00:00 2001 From: dhruba619 Date: Mon, 24 Apr 2017 01:04:35 +0530 Subject: [PATCH 1/3] BAEL-786 Updated custom test reports --- .../baeldung/reports/CustomisedListener.java | 32 +++---- .../baeldung/reports/CustomisedReports.java | 83 ++++++++++++------- 2 files changed, 70 insertions(+), 45 deletions(-) diff --git a/testng/src/test/java/com/baeldung/reports/CustomisedListener.java b/testng/src/test/java/com/baeldung/reports/CustomisedListener.java index 6dc3991e50..1ec5629cdf 100644 --- a/testng/src/test/java/com/baeldung/reports/CustomisedListener.java +++ b/testng/src/test/java/com/baeldung/reports/CustomisedListener.java @@ -7,31 +7,32 @@ import org.testng.ITestListener; import org.testng.ITestResult; public class CustomisedListener implements ITestListener { - private static final Logger LOGGER = LoggerFactory.getLogger("TEST_REPORT"); + private static final Logger LOGGER = LoggerFactory.getLogger("CUSTOM_LOGS"); @Override public void onFinish(ITestContext context) { LOGGER.info("PASSED TEST CASES"); context.getPassedTests() - .getAllResults() - .stream() - .forEach(result -> { - LOGGER.info(result.getName()); - }); + .getAllResults() + .stream() + .forEach(result -> { + LOGGER.info(result.getName()); + }); LOGGER.info("FAILED TEST CASES"); context.getFailedTests() - .getAllResults() - .stream() - .forEach(result -> { - LOGGER.info(result.getName()); - }); - LOGGER.info("Test completed on: " + context.getEndDate().toString()); + .getAllResults() + .stream() + .forEach(result -> { + LOGGER.info(result.getName()); + }); + LOGGER.info("Test completed on: " + context.getEndDate() + .toString()); } @Override public void onStart(ITestContext arg0) { LOGGER.info("Started testing on: " + arg0.getStartDate() - .toString()); + .toString()); } @Override @@ -54,13 +55,14 @@ public class CustomisedListener implements ITestListener { @Override public void onTestStart(ITestResult arg0) { - LOGGER.info("Testing: " + arg0.getName() + " " + arg0.getStartMillis()); + LOGGER.info("Testing: " + arg0.getName()); } @Override public void onTestSuccess(ITestResult arg0) { - LOGGER.info("Tested: " + arg0.getName() + " " + arg0.getEndMillis()); + long timeTaken = ((arg0.getEndMillis() - arg0.getStartMillis())); + LOGGER.info("Tested: " + arg0.getName() + " Time taken:" + timeTaken + " ms"); } diff --git a/testng/src/test/java/com/baeldung/reports/CustomisedReports.java b/testng/src/test/java/com/baeldung/reports/CustomisedReports.java index 07ba2162cc..7e303035aa 100644 --- a/testng/src/test/java/com/baeldung/reports/CustomisedReports.java +++ b/testng/src/test/java/com/baeldung/reports/CustomisedReports.java @@ -1,50 +1,73 @@ package com.baeldung.reports; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.testng.IReporter; +import org.testng.IResultMap; import org.testng.ISuite; import org.testng.ISuiteResult; import org.testng.ITestContext; +import org.testng.ITestResult; import org.testng.xml.XmlSuite; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; import java.util.List; import java.util.Map; +import java.util.Set; public class CustomisedReports implements IReporter { - private static final Logger LOGGER = LoggerFactory.getLogger("TEST_REPORT"); + private PrintWriter reportWriter; - @Override public void generateReport(List xmlSuites, List suites, String outputDirectory) { + new File(outputDirectory).mkdirs(); + try { + reportWriter = new PrintWriter(new BufferedWriter(new FileWriter(new File(outputDirectory, "my-report.html")))); + } catch (IOException e) { + e.printStackTrace(); + } + String resultRow = "%s%s%s%s%s"; + initReportTemplate(); + for (ISuite suite : suites) { + Map suiteResults = suite.getResults(); + for (String testName : suiteResults.keySet()) { + ISuiteResult suiteResult = suiteResults.get(testName); + ITestContext testContext = suiteResult.getTestContext(); - suites.stream() - .forEach(suite -> { - String suiteName = suite.getName(); - Map suiteResults = suite.getResults(); - suiteResults.values() - .stream() - .forEach(result -> { - ITestContext context - = ((ISuiteResult) result).getTestContext(); + IResultMap failedResult = testContext.getFailedTests(); + Set testsFailed = failedResult.getAllResults(); + for (ITestResult testResult : testsFailed) { + reportWriter.println(String.format(resultRow, "danger", suite.getName(), testName, testResult.getName(), "FAILED", "NA")); + } - LOGGER.info("Passed tests for suite '" - + suiteName + "' is:" - + context.getPassedTests() - .getAllResults() - .size()); - LOGGER.info("Failed tests for suite '" - + suiteName + "' is:" - + context.getFailedTests() - .getAllResults() - .size()); - LOGGER.info("Skipped tests for suite '" - + suiteName + "' is:" - + context.getSkippedTests() - .getAllResults() - .size()); - }); - }); + IResultMap passResult = testContext.getPassedTests(); + Set testsPassed = passResult.getAllResults(); + for (ITestResult testResult : testsPassed) { + reportWriter.println(String.format(resultRow, "success", suite.getName(), testName, testResult.getName(), "PASSED", String.valueOf(testResult.getEndMillis() - testResult.getStartMillis()))); + } + IResultMap skippedResult = testContext.getSkippedTests(); + Set testsSkipped = skippedResult.getAllResults(); + for (ITestResult testResult : testsSkipped) { + reportWriter.println(String.format(resultRow, "warning", suite.getName(), testName, testResult.getName(), "SKIPPED", "NA")); + } + + } + } + finishReportTemplate(); + reportWriter.flush(); + reportWriter.close(); } + private void initReportTemplate() { + reportWriter.println( + "" + "" + "My Custom Report" + "" + "" + + "" + "" + "
"); + reportWriter.println("" + "" + "" + "" + "" + "" + ""); + } + + private void finishReportTemplate() { + reportWriter.println(" "); + } } From 966d2ea30fb5e895b3c4b242db037e8b395cb814 Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Thu, 27 Apr 2017 13:26:42 +0200 Subject: [PATCH 2/3] Bael 850 (#1732) * BAEL-786 Updated custom test reports * BAEL-850 ConcurentskipLIst * BAEL-850 formatting * BAEL-856 code for long adder and accumulator (#1723) * BAEL-856 code for long adder and accumulator * BAEL-856 rearange packages * BAEL-856 Formatting * BAEL-742 Create README for Stripe API article (#1731) * Add files via upload * Update pom.xml * Update RunGuice.java * Update Communication.java * Update CommunicationMode.java * Update DefaultCommunicator.java * Update EmailCommunicationMode.java * Update IMCommunicationMode.java * Update SMSCommunicationMode.java * Update MessageLogger.java * Update MessageSentLoggable.java * Update AOPModule.java * Update BasicModule.java * Update CommunicationModel.java * Update Communicator.java * Update BasicModule.java * Update RunGuice.java * Update MessageLogger.java * Update Communicator.java * Update pom.xml * BAEL-278: Updated README.md * BAEL-554: Add and update README.md files * Update pom.xml * Update pom.xml * Update pom.xml * BAEL-345: fixed assertion * BAEL-109: Updated README.md * BAEL-345: Added README.md * Reinstating reactor-core module in root-level pom * BAEL-393: Adding guide-intro module to root pom * BAEL-9: Updated README.md * BAEL-157: README.md updated * Changed project name * Update RunGuice.java Removed references to message logging and output * Update Communication.java Removed message logging-related code * BAEL-566: Updated README.md * New project name * BAEL-393: removing guice-intro directory * BAEL-393: renamed module guice-intro to guice in root pom.xml * BAEL-393 and BAEL-541 README.md files * BAEL-731: Updated README.md * BAEL-680: renamed test methods * BAEL-714: Updated README.md * BAEL-737: Updated README.md * BAEL-680 and BAEL-756 README.md updates * BAEL-666: Updated README * BAEL-415: Custom Scope * BAEL-415: Custom Scope - renamed classes to reflect TenantScope * README file updates for BAEL-723, BAEL-763, and BAEL-415 * BAEL-735: README * BAEL-567: README * BAEL-736: README * BAEL-766: Update README * BAEL-555: README update * BAEL-761: README update * BAEL-742: Stripe API for Java README file * Merge aspectj -> spring-aop (#1737) * BAEL-88 Integration tests fixed. (#1739) * BAEL-88 Testing in Spring Boot * BAEL-88 Integration tests fixed. * Merge assertj -> testing (#1738) * Guide to JDO (#1736) * Guide to JDO * Guide to JDO * Guide to JDO * Guide To JDO * BAEL-86: Corrected URL in README.md (#1740) * Add files via upload * Update pom.xml * Update RunGuice.java * Update Communication.java * Update CommunicationMode.java * Update DefaultCommunicator.java * Update EmailCommunicationMode.java * Update IMCommunicationMode.java * Update SMSCommunicationMode.java * Update MessageLogger.java * Update MessageSentLoggable.java * Update AOPModule.java * Update BasicModule.java * Update CommunicationModel.java * Update Communicator.java * Update BasicModule.java * Update RunGuice.java * Update MessageLogger.java * Update Communicator.java * Update pom.xml * BAEL-278: Updated README.md * BAEL-554: Add and update README.md files * Update pom.xml * Update pom.xml * Update pom.xml * BAEL-345: fixed assertion * BAEL-109: Updated README.md * BAEL-345: Added README.md * Reinstating reactor-core module in root-level pom * BAEL-393: Adding guide-intro module to root pom * BAEL-9: Updated README.md * BAEL-157: README.md updated * Changed project name * Update RunGuice.java Removed references to message logging and output * Update Communication.java Removed message logging-related code * BAEL-566: Updated README.md * New project name * BAEL-393: removing guice-intro directory * BAEL-393: renamed module guice-intro to guice in root pom.xml * BAEL-393 and BAEL-541 README.md files * BAEL-731: Updated README.md * BAEL-680: renamed test methods * BAEL-714: Updated README.md * BAEL-737: Updated README.md * BAEL-680 and BAEL-756 README.md updates * BAEL-666: Updated README * BAEL-415: Custom Scope * BAEL-415: Custom Scope - renamed classes to reflect TenantScope * README file updates for BAEL-723, BAEL-763, and BAEL-415 * BAEL-735: README * BAEL-567: README * BAEL-736: README * BAEL-766: Update README * BAEL-555: README update * BAEL-761: README update * BAEL-742: Stripe API for Java README file * BAEL-86: Correction to README file * BAEL-850 Formatting --- .../baeldung/concurrent/skiplist/Event.java | 21 +++ .../concurrent/skiplist/EventWindowSort.java | 36 ++++++ .../skiplist/ConcurrentSkipListSetTest.java | 120 ++++++++++++++++++ 3 files changed, 177 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/concurrent/skiplist/Event.java create mode 100644 core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java create mode 100644 core-java/src/test/java/com/baeldung/concurrent/skiplist/ConcurrentSkipListSetTest.java diff --git a/core-java/src/main/java/com/baeldung/concurrent/skiplist/Event.java b/core-java/src/main/java/com/baeldung/concurrent/skiplist/Event.java new file mode 100644 index 0000000000..ce1f57bb93 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/skiplist/Event.java @@ -0,0 +1,21 @@ +package com.baeldung.concurrent.skiplist; + +import java.time.ZonedDateTime; + +public class Event { + private final ZonedDateTime eventTime; + private final String content; + + public Event(ZonedDateTime eventTime, String content) { + this.eventTime = eventTime; + this.content = content; + } + + public ZonedDateTime getEventTime() { + return eventTime; + } + + public String getContent() { + return content; + } +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java b/core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java new file mode 100644 index 0000000000..9eef00bd3f --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java @@ -0,0 +1,36 @@ +package com.baeldung.concurrent.skiplist; + +import java.time.ZonedDateTime; +import java.util.Comparator; +import java.util.concurrent.ConcurrentNavigableMap; +import java.util.concurrent.ConcurrentSkipListMap; +import java.util.function.ToLongFunction; + +public class EventWindowSort { + private final ConcurrentSkipListMap events = new ConcurrentSkipListMap<>(Comparator.comparingLong(new ToLongFunction() { + @Override + public long applyAsLong(ZonedDateTime value) { + return value + .toInstant() + .toEpochMilli(); + } + })); + + public void acceptEvent(Event event) { + events.put(event.getEventTime(), event.getContent()); + } + + public ConcurrentNavigableMap getEventsFromLastMinute() { + return events.tailMap(ZonedDateTime + .now() + .minusMinutes(1)); + } + + public ConcurrentNavigableMap getEventsOlderThatOneMinute() { + return events.headMap(ZonedDateTime + .now() + .minusMinutes(1)); + } + +} + diff --git a/core-java/src/test/java/com/baeldung/concurrent/skiplist/ConcurrentSkipListSetTest.java b/core-java/src/test/java/com/baeldung/concurrent/skiplist/ConcurrentSkipListSetTest.java new file mode 100644 index 0000000000..a2dbbae520 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/concurrent/skiplist/ConcurrentSkipListSetTest.java @@ -0,0 +1,120 @@ +package com.baeldung.concurrent.skiplist; + +import org.junit.Test; + +import java.time.ZonedDateTime; +import java.util.UUID; +import java.util.concurrent.ConcurrentNavigableMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class ConcurrentSkipListSetTest { + + @Test + public void givenThreadsProducingEvents_whenGetForEventsFromLastMinute_thenReturnThoseEventsInTheLockFreeWay() throws InterruptedException { + //given + ExecutorService executorService = Executors.newFixedThreadPool(3); + EventWindowSort eventWindowSort = new EventWindowSort(); + int numberOfThreads = 2; + //when + Runnable producer = () -> IntStream + .rangeClosed(0, 100) + .forEach(index -> eventWindowSort.acceptEvent(new Event(ZonedDateTime + .now() + .minusSeconds(index), UUID + .randomUUID() + .toString()))); + + for (int i = 0; i < numberOfThreads; i++) { + executorService.execute(producer); + } + + Thread.sleep(500); + + ConcurrentNavigableMap eventsFromLastMinute = eventWindowSort.getEventsFromLastMinute(); + + long eventsOlderThanOneMinute = eventsFromLastMinute + .entrySet() + .stream() + .filter(e -> e + .getKey() + .isBefore(ZonedDateTime + .now() + .minusMinutes(1))) + .count(); + assertEquals(eventsOlderThanOneMinute, 0); + + long eventYoungerThanOneMinute = eventsFromLastMinute + .entrySet() + .stream() + .filter(e -> e + .getKey() + .isAfter(ZonedDateTime + .now() + .minusMinutes(1))) + .count(); + + //then + assertTrue(eventYoungerThanOneMinute > 0); + + executorService.awaitTermination(1, TimeUnit.SECONDS); + executorService.shutdown(); + } + + @Test + public void givenThreadsProducingEvents_whenGetForEventsOlderThanOneMinute_thenReturnThoseEventsInTheLockFreeWay() throws InterruptedException { + //given + ExecutorService executorService = Executors.newFixedThreadPool(3); + EventWindowSort eventWindowSort = new EventWindowSort(); + int numberOfThreads = 2; + //when + Runnable producer = () -> IntStream + .rangeClosed(0, 100) + .forEach(index -> eventWindowSort.acceptEvent(new Event(ZonedDateTime + .now() + .minusSeconds(index), UUID + .randomUUID() + .toString()))); + + for (int i = 0; i < numberOfThreads; i++) { + executorService.execute(producer); + } + + Thread.sleep(500); + + ConcurrentNavigableMap eventsFromLastMinute = eventWindowSort.getEventsOlderThatOneMinute(); + + long eventsOlderThanOneMinute = eventsFromLastMinute + .entrySet() + .stream() + .filter(e -> e + .getKey() + .isBefore(ZonedDateTime + .now() + .minusMinutes(1))) + .count(); + assertTrue(eventsOlderThanOneMinute > 0); + + long eventYoungerThanOneMinute = eventsFromLastMinute + .entrySet() + .stream() + .filter(e -> e + .getKey() + .isAfter(ZonedDateTime + .now() + .minusMinutes(1))) + .count(); + + //then + assertEquals(eventYoungerThanOneMinute, 0); + + executorService.awaitTermination(1, TimeUnit.SECONDS); + executorService.shutdown(); + } + +} \ No newline at end of file From 55dc9a7a9abb20a861c335324fb43e773db4f64b Mon Sep 17 00:00:00 2001 From: eugenp Date: Thu, 27 Apr 2017 15:50:11 +0300 Subject: [PATCH 3/3] spring 5 work --- spring-5/pom.xml | 328 +++++++++--------- .../Spring5ReactiveServerClientTest.java | 82 ++--- spring-rest/pom.xml | 2 +- .../client/RestTemplateBasicLiveTest.java | 24 ++ 4 files changed, 231 insertions(+), 205 deletions(-) diff --git a/spring-5/pom.xml b/spring-5/pom.xml index ec55a878c7..466318a31a 100644 --- a/spring-5/pom.xml +++ b/spring-5/pom.xml @@ -1,180 +1,182 @@ - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - com.baeldung - spring-5 - 0.0.1-SNAPSHOT - jar + com.baeldung + spring-5 + 0.0.1-SNAPSHOT + jar - spring-5 - spring 5 sample project about new features + spring-5 + spring 5 sample project about new features - - org.springframework.boot - spring-boot-starter-parent - 2.0.0.BUILD-SNAPSHOT - - + + org.springframework.boot + spring-boot-starter-parent + 2.0.0.BUILD-SNAPSHOT + + - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-validation - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-webflux - + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-webflux + - - - org.apache.commons - commons-lang3 - + + + org.apache.commons + commons-lang3 + - + - - org.springframework.boot - spring-boot-devtools - runtime - - - com.h2database - h2 - runtime - - - org.junit.jupiter - junit-jupiter-api - ${junit.jupiter.version} - - - org.springframework - spring-test - ${spring.test.version} - - - org.springframework.boot - spring-boot-starter-test - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit.jupiter.version} - test - - - org.junit.platform - junit-platform-surefire-provider - ${junit.platform.version} - test - - - org.junit.platform - junit-platform-runner - ${junit.platform.version} - test - - + + org.springframework.boot + spring-boot-devtools + runtime + + + com.h2database + h2 + runtime + + + + org.springframework + spring-test + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.junit.jupiter + junit-jupiter-api + ${junit.jupiter.version} + + + org.junit.jupiter + junit-jupiter-engine + ${junit.jupiter.version} + test + + + org.junit.platform + junit-platform-surefire-provider + ${junit.platform.version} + test + + + org.junit.platform + junit-platform-runner + ${junit.platform.version} + test + + + - - - - org.springframework.boot - spring-boot-maven-plugin - - com.baeldung.Spring5Application - JAR - - + + + + org.springframework.boot + spring-boot-maven-plugin + + com.baeldung.Spring5Application + JAR + + - - org.apache.maven.plugins - maven-surefire-plugin - - 3 - true - - **/*IntegrationTest.java - **/*LiveTest.java - - - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + 3 + true + + **/*IntegrationTest.java + **/*LiveTest.java + + + - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - methods - true - - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + methods + true + + - - + + - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + - - UTF-8 - UTF-8 - 1.8 - 1.0.0-M3 - 5.0.0-M3 - 4.3.7.RELEASE - 2.19.1 - + + UTF-8 + UTF-8 + 1.8 + 1.0.0-M4 + 5.0.0-M4 + 2.20 + diff --git a/spring-5/src/test/java/com/baeldung/jupiter/Spring5ReactiveServerClientTest.java b/spring-5/src/test/java/com/baeldung/jupiter/Spring5ReactiveServerClientTest.java index 2252c255ee..d3e194d10d 100644 --- a/spring-5/src/test/java/com/baeldung/jupiter/Spring5ReactiveServerClientTest.java +++ b/spring-5/src/test/java/com/baeldung/jupiter/Spring5ReactiveServerClientTest.java @@ -56,49 +56,49 @@ public class Spring5ReactiveServerClientTest { nettyContext.dispose(); } - @Test - public void givenCheckTask_whenServerHandle_thenServerResponseALiveString() throws Exception { - WebClient client = WebClient.create("http://localhost:8080"); - Mono result = client - .get() - .uri("/task") - .exchange() - .then(response -> response.bodyToMono(String.class)); +// @Test +// public void givenCheckTask_whenServerHandle_thenServerResponseALiveString() throws Exception { +// WebClient client = WebClient.create("http://localhost:8080"); +// Mono result = client +// .get() +// .uri("/task") +// .exchange() +// .then(response -> response.bodyToMono(String.class)); +// +// assertThat(result.block()).isInstanceOf(String.class); +// } - assertThat(result.block()).isInstanceOf(String.class); - } +// @Test +// public void givenThreeTasks_whenServerHandleTheTasks_thenServerResponseATask() throws Exception { +// URI uri = URI.create("http://localhost:8080/task/process"); +// ExchangeFunction exchange = ExchangeFunctions.create(new ReactorClientHttpConnector()); +// ClientRequest request = ClientRequest +// .method(HttpMethod.POST, uri) +// .body(BodyInserters.fromPublisher(getLatLngs(), Task.class)) +// .build(); +// +// Flux taskResponse = exchange +// .exchange(request) +// .flatMap(response -> response.bodyToFlux(Task.class)); +// +// assertThat(taskResponse.blockFirst()).isInstanceOf(Task.class); +// } - @Test - public void givenThreeTasks_whenServerHandleTheTasks_thenServerResponseATask() throws Exception { - URI uri = URI.create("http://localhost:8080/task/process"); - ExchangeFunction exchange = ExchangeFunctions.create(new ReactorClientHttpConnector()); - ClientRequest request = ClientRequest - .method(HttpMethod.POST, uri) - .body(BodyInserters.fromPublisher(getLatLngs(), Task.class)) - .build(); - - Flux taskResponse = exchange - .exchange(request) - .flatMap(response -> response.bodyToFlux(Task.class)); - - assertThat(taskResponse.blockFirst()).isInstanceOf(Task.class); - } - - @Test - public void givenCheckTask_whenServerHandle_thenOragicServerResponseALiveString() throws Exception { - URI uri = URI.create("http://localhost:8080/task"); - ExchangeFunction exchange = ExchangeFunctions.create(new ReactorClientHttpConnector()); - ClientRequest request = ClientRequest - .method(HttpMethod.GET, uri) - .body(BodyInserters.fromPublisher(getLatLngs(), Task.class)) - .build(); - - Flux taskResponse = exchange - .exchange(request) - .flatMap(response -> response.bodyToFlux(String.class)); - - assertThat(taskResponse.blockFirst()).isInstanceOf(String.class); - } +// @Test +// public void givenCheckTask_whenServerHandle_thenOragicServerResponseALiveString() throws Exception { +// URI uri = URI.create("http://localhost:8080/task"); +// ExchangeFunction exchange = ExchangeFunctions.create(new ReactorClientHttpConnector()); +// ClientRequest request = ClientRequest +// .method(HttpMethod.GET, uri) +// .body(BodyInserters.fromPublisher(getLatLngs(), Task.class)) +// .build(); +// +// Flux taskResponse = exchange +// .exchange(request) +// .flatMap(response -> response.bodyToFlux(String.class)); +// +// assertThat(taskResponse.blockFirst()).isInstanceOf(String.class); +// } private static Flux getLatLngs() { return Flux diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 9b1b9a2847..bbd4a9a119 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 1.4.3.RELEASE + 1.4.6.RELEASE diff --git a/spring-rest/src/test/java/org/baeldung/client/RestTemplateBasicLiveTest.java b/spring-rest/src/test/java/org/baeldung/client/RestTemplateBasicLiveTest.java index a47c60e9d8..c9dad8ccf0 100644 --- a/spring-rest/src/test/java/org/baeldung/client/RestTemplateBasicLiveTest.java +++ b/spring-rest/src/test/java/org/baeldung/client/RestTemplateBasicLiveTest.java @@ -163,6 +163,30 @@ public class RestTemplateBasicLiveTest { assertThat(foo.getName(), is(updatedInstance.getName())); } + // PATCH + + @Test + public void givenFooService_whenPatchExistingEntity_thenItIsUpdated() { + final RestTemplate template = new RestTemplate(); + final HttpHeaders headers = prepareBasicAuthHeaders(); + final HttpEntity request = new HttpEntity<>(new Foo("bar"), headers); + + // Create Resource + final ResponseEntity createResponse = template.exchange(fooResourceUrl, HttpMethod.POST, request, Foo.class); + + // Update Resource + final Foo updatedResource = new Foo("newName"); + updatedResource.setId(createResponse.getBody().getId()); + final String resourceUrl = fooResourceUrl + '/' + createResponse.getBody().getId(); + final HttpEntity requestUpdate = new HttpEntity<>(updatedResource, headers); + template.patchForObject(resourceUrl, requestUpdate, Void.class); + + // Check that Resource was updated + final ResponseEntity updateResponse = template.exchange(resourceUrl, HttpMethod.GET, new HttpEntity<>(headers), Foo.class); + final Foo foo = updateResponse.getBody(); + assertThat(foo.getName(), is(updatedResource.getName())); + } + // DELETE @Test
SuiteTestMethodStatusExecution Time(ms)