Merge branch 'master' into bael-1168
This commit is contained in:
commit
920320ae78
@ -1,43 +1,34 @@
|
|||||||
package com.baeldung.test.dependencyinjection;
|
package com.baeldung.test.dependencyinjection;
|
||||||
|
|
||||||
import com.baeldung.dependencyinjection.imagefileeditors.GifFileEditor;
|
|
||||||
import com.baeldung.dependencyinjection.imagefileeditors.JpgFileEditor;
|
|
||||||
import com.baeldung.dependencyinjection.imagefileeditors.PngFileEditor;
|
|
||||||
import com.baeldung.dependencyinjection.imageprocessors.ImageFileProcessor;
|
|
||||||
import com.baeldung.dependencyinjection.loggers.TimeLogger;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.assertj.core.api.Assertions.within;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
|
||||||
import org.jboss.weld.environment.se.Weld;
|
import org.jboss.weld.environment.se.Weld;
|
||||||
import org.jboss.weld.environment.se.WeldContainer;
|
import org.jboss.weld.environment.se.WeldContainer;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.baeldung.dependencyinjection.imagefileeditors.PngFileEditor;
|
||||||
|
import com.baeldung.dependencyinjection.imageprocessors.ImageFileProcessor;
|
||||||
|
import com.baeldung.dependencyinjection.loggers.TimeLogger;
|
||||||
|
|
||||||
public class ImageProcessorUnitTest {
|
public class ImageProcessorUnitTest {
|
||||||
|
|
||||||
private static ImageFileProcessor imageFileProcessor;
|
private static ImageFileProcessor imageFileProcessor;
|
||||||
private static SimpleDateFormat dateFormat;
|
|
||||||
private static Calendar calendar;
|
|
||||||
|
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void setImageProcessorInstance() {
|
public static void setImageProcessorInstance() {
|
||||||
Weld weld = new Weld();
|
Weld weld = new Weld();
|
||||||
WeldContainer container = weld.initialize();
|
WeldContainer container = weld.initialize();
|
||||||
imageFileProcessor = container.select(ImageFileProcessor.class).get();
|
imageFileProcessor = container.select(ImageFileProcessor.class)
|
||||||
|
.get();
|
||||||
container.shutdown();
|
container.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
@BeforeClass
|
|
||||||
public static void setSimpleDateFormatInstance() {
|
|
||||||
dateFormat = new SimpleDateFormat("HH:mm");
|
|
||||||
}
|
|
||||||
|
|
||||||
@BeforeClass
|
|
||||||
public static void setCalendarInstance() {
|
|
||||||
calendar = Calendar.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenImageProcessorInstance_whenInjectedPngFileEditorandTimeLoggerInstances_thenTwoAssertions() {
|
public void givenImageProcessorInstance_whenInjectedPngFileEditorandTimeLoggerInstances_thenTwoAssertions() {
|
||||||
assertThat(imageFileProcessor.getImageFileditor()).isInstanceOf(PngFileEditor.class);
|
assertThat(imageFileProcessor.getImageFileditor()).isInstanceOf(PngFileEditor.class);
|
||||||
@ -45,26 +36,56 @@ public class ImageProcessorUnitTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenImageProcessorInstance_whenCalledopenFile_thenOneAssertion() {
|
public void givenImageProcessorInstance_whenCalledopenFile_thenOneAssertion() throws ParseException {
|
||||||
String currentTime = dateFormat.format(calendar.getTime());
|
LocalTime currentTime = LocalTime.now();
|
||||||
assertThat(imageFileProcessor.openFile("file1.png")).isEqualTo("Opening PNG file file1.png at: " + currentTime);
|
|
||||||
|
String openFileLog = imageFileProcessor.openFile("file1.png");
|
||||||
|
assertThat(openFileLog).contains("Opening PNG file file1.png at: ");
|
||||||
|
|
||||||
|
LocalTime loggedTime = getLoggedTime(openFileLog);
|
||||||
|
assertThat(loggedTime).isCloseTo(currentTime, within(2, ChronoUnit.MINUTES));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenImageProcessorInstance_whenCallededitFile_thenOneAssertion() {
|
public void givenImageProcessorInstance_whenCallededitFile_thenOneAssertion() throws ParseException {
|
||||||
String currentTime = dateFormat.format(calendar.getTime());
|
LocalTime currentTime = LocalTime.now();
|
||||||
assertThat(imageFileProcessor.editFile("file1.png")).isEqualTo("Editing PNG file file1.png at: " + currentTime);
|
|
||||||
|
String editFileLog = imageFileProcessor.editFile("file1.png");
|
||||||
|
assertThat(editFileLog).contains("Editing PNG file file1.png at: ");
|
||||||
|
|
||||||
|
LocalTime loggedTime = getLoggedTime(editFileLog);
|
||||||
|
assertThat(loggedTime).isCloseTo(currentTime, within(2, ChronoUnit.MINUTES));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenImageProcessorInstance_whenCalledwriteFile_thenOneAssertion() {
|
public void givenImageProcessorInstance_whenCalledwriteFile_thenOneAssertion() throws ParseException {
|
||||||
String currentTime = dateFormat.format(calendar.getTime());
|
LocalTime currentTime = LocalTime.now();
|
||||||
assertThat(imageFileProcessor.writeFile("file1.png")).isEqualTo("Writing PNG file file1.png at: " + currentTime);
|
|
||||||
|
String writeFileLog = imageFileProcessor.writeFile("file1.png");
|
||||||
|
assertThat(writeFileLog).contains("Writing PNG file file1.png at: ");
|
||||||
|
|
||||||
|
LocalTime loggedTime = getLoggedTime(writeFileLog);
|
||||||
|
assertThat(loggedTime).isCloseTo(currentTime, within(2, ChronoUnit.MINUTES));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenImageProcessorInstance_whenCalledsaveFile_thenOneAssertion() {
|
public void givenImageProcessorInstance_whenCalledsaveFile_thenOneAssertion() throws ParseException {
|
||||||
String currentTime = dateFormat.format(calendar.getTime());
|
LocalTime currentTime = LocalTime.now();
|
||||||
assertThat(imageFileProcessor.saveFile("file1.png")).isEqualTo("Saving PNG file file1.png at: " + currentTime);
|
|
||||||
|
String saveFileLog = imageFileProcessor.saveFile("file1.png");
|
||||||
|
assertThat(saveFileLog).contains("Saving PNG file file1.png at: ");
|
||||||
|
|
||||||
|
LocalTime loggedTime = getLoggedTime(saveFileLog);
|
||||||
|
assertThat(loggedTime).isCloseTo(currentTime, within(2, ChronoUnit.MINUTES));
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalTime getLoggedTime(String log) throws ParseException {
|
||||||
|
String logTimeString = log.split("at: ")[1];
|
||||||
|
|
||||||
|
int hour = Integer.valueOf(logTimeString.split(":")[0]);
|
||||||
|
int minutes = Integer.valueOf(logTimeString.split(":")[1]);
|
||||||
|
|
||||||
|
LocalTime loggedTime = LocalTime.of(hour, minutes);
|
||||||
|
return loggedTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -5,16 +5,14 @@
|
|||||||
*/
|
*/
|
||||||
package com.baeldung.nullsafecollectionstreams;
|
package com.baeldung.nullsafecollectionstreams;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import org.junit.After;
|
|
||||||
import org.junit.AfterClass;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.BeforeClass;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -22,8 +20,7 @@ import static org.junit.Assert.*;
|
|||||||
*/
|
*/
|
||||||
public class NullSafeCollectionStreamsUsingJava8OptionalContainerUnitTest {
|
public class NullSafeCollectionStreamsUsingJava8OptionalContainerUnitTest {
|
||||||
|
|
||||||
private final NullSafeCollectionStreamsUsingJava8OptionalContainer instance =
|
private final NullSafeCollectionStreamsUsingJava8OptionalContainer instance = new NullSafeCollectionStreamsUsingJava8OptionalContainer();
|
||||||
new NullSafeCollectionStreamsUsingJava8OptionalContainer();
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenCollectionIsNull_thenExpectAnEmptyStream() {
|
public void whenCollectionIsNull_thenExpectAnEmptyStream() {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.baeldung.util;
|
package com.baeldung.util;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
|
|
||||||
import java.time.Clock;
|
import java.time.Clock;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
@ -10,8 +9,6 @@ import java.time.LocalTime;
|
|||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.temporal.ChronoField;
|
import java.time.temporal.ChronoField;
|
||||||
|
|
||||||
import org.joda.time.DateTime;
|
|
||||||
import org.joda.time.DateTimeUtils;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class CurrentDateTimeUnitTest {
|
public class CurrentDateTimeUnitTest {
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.baeldung.java9.process;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
public class ChildProcess {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
@SuppressWarnings("resource")
|
||||||
|
Scanner input = new Scanner(System.in);
|
||||||
|
Logger log = Logger.getLogger(ChildProcess.class.getName());
|
||||||
|
log.log(Level.INFO, input.nextLine());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.baeldung.java9.process;
|
||||||
|
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
public class OutputStreamExample {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Logger log = Logger.getLogger(OutputStreamExample.class.getName());
|
||||||
|
log.log(Level.INFO, Integer.toString(sum(1,2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int sum(int a, int b) {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package com.baeldung.java9.process;
|
||||||
|
|
||||||
|
public class ProcessCompilationError {
|
||||||
|
//This method has been written to generate error to display
|
||||||
|
//how process errorStream() can consume error
|
||||||
|
public static void();
|
||||||
|
}
|
@ -0,0 +1,110 @@
|
|||||||
|
package com.baeldung.java9.process;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStreamWriter;
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
public class ProcessUnderstanding {
|
||||||
|
|
||||||
|
public static int compileAndRunJavaProgram() throws IOException {
|
||||||
|
Process process = Runtime.getRuntime()
|
||||||
|
.exec("javac -cp src src\\main\\java\\com\\baeldung\\java9\\process\\OutputStreamExample.java");
|
||||||
|
process = Runtime.getRuntime()
|
||||||
|
.exec("java -cp src/main/java com.baeldung.java9.process.OutputStreamExample");
|
||||||
|
BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
||||||
|
int value = Integer.parseInt(output.readLine());
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getErrorStreamExample() throws IOException {
|
||||||
|
Process process = Runtime.getRuntime()
|
||||||
|
.exec("javac -cp src src\\main\\java\\com\\baeldung\\java9\\process\\ProcessCompilationError.java");
|
||||||
|
BufferedReader error = new BufferedReader(new InputStreamReader(process.getErrorStream()));
|
||||||
|
String errorString = error.readLine();
|
||||||
|
return errorString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void creatingNewProcess() throws IOException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int filterProcessWithStreamsInSpecificRangeReturnCount() {
|
||||||
|
return (int) ProcessHandle.allProcesses()
|
||||||
|
.filter(ph -> (ph.pid() > 10000 && ph.pid() < 50000))
|
||||||
|
.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void destroyingProcessCreatedBySameProcess() throws IOException, InterruptedException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
Thread.sleep(10000);
|
||||||
|
process.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void destroyingProcessCreatedByDifferentProcess() {
|
||||||
|
// find out the process id of current running task by checking
|
||||||
|
// task manager in windows and enter the integer value
|
||||||
|
Optional<ProcessHandle> optionalProcessHandle = ProcessHandle.of(5232);
|
||||||
|
ProcessHandle processHandle = optionalProcessHandle.get();
|
||||||
|
processHandle.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int waitForExample() throws IOException, InterruptedException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
return process.waitFor();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int exitValueExample() throws IOException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
process.destroy();
|
||||||
|
return process.exitValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void destroyExample() throws IOException, InterruptedException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
Thread.sleep(10000);
|
||||||
|
process.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void destroyForciblyExample() throws IOException, InterruptedException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
Thread.sleep(10000);
|
||||||
|
process.destroy();
|
||||||
|
if (process.isAlive()) {
|
||||||
|
process.destroyForcibly();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void outputStreamDemo() throws IOException, InterruptedException {
|
||||||
|
Logger log = Logger.getLogger(ProcessUnderstanding.class.getName());
|
||||||
|
Process pr = Runtime.getRuntime()
|
||||||
|
.exec("javac -cp src src\\main\\java\\com\\baeldung\\java9\\process\\ChildProcess.java");
|
||||||
|
final Process process = Runtime.getRuntime()
|
||||||
|
.exec("java -cp src/main/java com.baeldung.java9.process.ChildProcess");
|
||||||
|
try (Writer w = new OutputStreamWriter(process.getOutputStream(), "UTF-8")) {
|
||||||
|
w.write("send to child\n");
|
||||||
|
}
|
||||||
|
new Thread(() -> {
|
||||||
|
try {
|
||||||
|
int c;
|
||||||
|
while ((c = process.getInputStream()
|
||||||
|
.read()) != -1)
|
||||||
|
System.out.write((byte) c);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
// send to child
|
||||||
|
log.log(Level.INFO, "rc=" + process.waitFor());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,121 @@
|
|||||||
|
package com.baeldung.java9.process;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.lang.String;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.lang.Integer;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class ProcessUnderstandingTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenSourceProgram_whenExecutedFromAnotherProgram_thenSourceProgramOutput3() throws IOException {
|
||||||
|
Process process = Runtime.getRuntime()
|
||||||
|
.exec("javac -cp src src\\main\\java\\com\\baeldung\\java9\\process\\OutputStreamExample.java");
|
||||||
|
process = Runtime.getRuntime()
|
||||||
|
.exec("java -cp src/main/java com.baeldung.java9.process.OutputStreamExample");
|
||||||
|
BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
||||||
|
int value = Integer.parseInt(output.readLine());
|
||||||
|
assertEquals(3, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenSourceProgram_whenReadingInputStream_thenFirstLineEquals3() throws IOException {
|
||||||
|
Process process = Runtime.getRuntime()
|
||||||
|
.exec("javac -cp src src\\main\\java\\com\\baeldung\\java9\\process\\OutputStreamExample.java");
|
||||||
|
process = Runtime.getRuntime()
|
||||||
|
.exec("java -cp src/main/java com.baeldung.java9.process.OutputStreamExample");
|
||||||
|
BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
||||||
|
int value = Integer.parseInt(output.readLine());
|
||||||
|
assertEquals(3, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenSubProcess_whenEncounteringError_thenErrorStreamNotNull() throws IOException {
|
||||||
|
Process process = Runtime.getRuntime()
|
||||||
|
.exec("javac -cp src src\\main\\java\\com\\baeldung\\java9\\process\\ProcessCompilationError.java");
|
||||||
|
BufferedReader error = new BufferedReader(new InputStreamReader(process.getErrorStream()));
|
||||||
|
String errorString = error.readLine();
|
||||||
|
assertNotNull(errorString);
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test - windows specific
|
||||||
|
public void givenSubProcess_thenStartSuccessIsAlive() throws IOException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
assertTrue(builder.start().isAlive());
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test - windows specific
|
||||||
|
public void givenSubProcess_whenDestroying_thenProcessNotAlive() throws IOException, InterruptedException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
Thread.sleep(10000);
|
||||||
|
process.destroy();
|
||||||
|
assertFalse(process.isAlive());
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test - windows specific
|
||||||
|
public void givenSubProcess_whenAlive_thenDestroyForcibly() throws IOException, InterruptedException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
Thread.sleep(10000);
|
||||||
|
process.destroy();
|
||||||
|
if (process.isAlive()) {
|
||||||
|
process.destroyForcibly();
|
||||||
|
}
|
||||||
|
assertFalse(process.isAlive());
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test - windows specific
|
||||||
|
public void givenSubProcess_checkAlive() throws IOException, InterruptedException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
Thread.sleep(10000);
|
||||||
|
process.destroy();
|
||||||
|
assertFalse(process.isAlive());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenProcessNotCreated_fromWithinJavaApplicationDestroying_thenProcessNotAlive() {
|
||||||
|
Optional<ProcessHandle> optionalProcessHandle = ProcessHandle.of(5232);
|
||||||
|
ProcessHandle processHandle = optionalProcessHandle.get();
|
||||||
|
processHandle.destroy();
|
||||||
|
assertFalse(processHandle.isAlive());
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test - windows specific
|
||||||
|
public void givenSubProcess_whenCurrentThreadWaitsIndefinitelyuntilSubProcessEnds_thenProcessWaitForReturnsGrt0() throws IOException, InterruptedException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
assertThat(process.waitFor() >= 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test - windows specific
|
||||||
|
public void givenSubProcess_whenCurrentThreadWaitsAndSubProcessNotTerminated_thenProcessWaitForReturnsFalse() throws IOException, InterruptedException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
assertFalse(process.waitFor(1, TimeUnit.SECONDS));
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test - windows specific
|
||||||
|
public void givenSubProcess_whenCurrentThreadWillNotWaitIndefinitelyforSubProcessToEnd_thenProcessExitValueReturnsGrt0() throws IOException {
|
||||||
|
ProcessBuilder builder = new ProcessBuilder("notepad.exe");
|
||||||
|
Process process = builder.start();
|
||||||
|
assertThat(process.exitValue() >= 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenRunningProcesses_whenFilterOnProcessIdRange_thenGetSelectedProcessPid() {
|
||||||
|
assertThat(((int) ProcessHandle.allProcesses()
|
||||||
|
.filter(ph -> (ph.pid() > 10000 && ph.pid() < 50000))
|
||||||
|
.count()) > 0);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.baeldung.linesintersection;
|
||||||
|
|
||||||
|
import java.awt.Point;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class LinesIntersectionService {
|
||||||
|
|
||||||
|
public Optional<Point> calculateIntersectionPoint(double m1, double b1, double m2, double b2) {
|
||||||
|
|
||||||
|
if (m1 == m2) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
double x = (b2 - b1) / (m1 - m2);
|
||||||
|
double y = m1 * x + b1;
|
||||||
|
|
||||||
|
Point point = new Point();
|
||||||
|
point.setLocation(x, y);
|
||||||
|
return Optional.of(point);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package com.baeldung.linesintersection;
|
||||||
|
|
||||||
|
import java.awt.Point;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
public class LinesIntersectionServiceUnitTest {
|
||||||
|
private LinesIntersectionService service = new LinesIntersectionService();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNotParallelLines_whenCalculatePoint_thenPresent() {
|
||||||
|
|
||||||
|
double m1 = 0;
|
||||||
|
double b1 = 0;
|
||||||
|
double m2 = 1;
|
||||||
|
double b2 = -1;
|
||||||
|
|
||||||
|
Optional<Point> point = service.calculateIntersectionPoint(m1, b1, m2, b2);
|
||||||
|
|
||||||
|
assertTrue(point.isPresent());
|
||||||
|
assertEquals(point.get().getX(), 1, 0.001);
|
||||||
|
assertEquals(point.get().getX(), 1, 0.001);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenParallelLines_whenCalculatePoint_thenEmpty() {
|
||||||
|
double m1 = 1;
|
||||||
|
double b1 = 0;
|
||||||
|
double m2 = 1;
|
||||||
|
double b2 = -1;
|
||||||
|
|
||||||
|
Optional<Point> point = service.calculateIntersectionPoint(m1, b1, m2, b2);
|
||||||
|
|
||||||
|
assertFalse(point.isPresent());
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.baeldung</groupId>
|
|
||||||
<artifactId>java-streams</artifactId>
|
<artifactId>java-streams</artifactId>
|
||||||
<version>0.1.0-SNAPSHOT</version>
|
<version>0.1.0-SNAPSHOT</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
package com.baeldung.stream;
|
package com.baeldung.stream;
|
||||||
|
|
||||||
import org.junit.Test;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import org.junit.Test;
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
|
|
||||||
public class PrimitiveStreamsUnitTest {
|
public class PrimitiveStreamsUnitTest {
|
||||||
|
|
||||||
@ -17,7 +16,7 @@ public class PrimitiveStreamsUnitTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenAnArrayOfIntegersWhenMinIsCalledThenCorrectMinIsReturned() {
|
public void givenAnArrayOfIntegersWhenMinIsCalledThenCorrectMinIsReturned() {
|
||||||
int[] integers = new int[] {20, 98, 12, 7, 35};
|
int[] integers = new int[] { 20, 98, 12, 7, 35 };
|
||||||
int min = streams.min(integers); // returns 7
|
int min = streams.min(integers); // returns 7
|
||||||
|
|
||||||
assertEquals(7, min);
|
assertEquals(7, min);
|
||||||
@ -66,19 +65,14 @@ public class PrimitiveStreamsUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
public void givenAnArrayWhenSumIsCalledThenTheCorrectSumIsReturned() {
|
public void givenAnArrayWhenSumIsCalledThenTheCorrectSumIsReturned() {
|
||||||
|
|
||||||
int sum = Stream.of(33,45)
|
int sum = Stream.of(33, 45).mapToInt(i -> i).sum();
|
||||||
.mapToInt(i -> i)
|
|
||||||
.sum();
|
|
||||||
|
|
||||||
assertEquals(78, sum);
|
assertEquals(78, sum);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenAnIntStreamThenGetTheEvenIntegers() {
|
public void givenAnIntStreamThenGetTheEvenIntegers() {
|
||||||
List<Integer> evenInts = IntStream.rangeClosed(1, 10)
|
List<Integer> evenInts = IntStream.rangeClosed(1, 10).filter(i -> i % 2 == 0).boxed().collect(Collectors.toList());
|
||||||
.filter(i -> i % 2 == 0)
|
|
||||||
.boxed()
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
List<Integer> expected = IntStream.of(2, 4, 6, 8, 10).boxed().collect(Collectors.toList());
|
List<Integer> expected = IntStream.of(2, 4, 6, 8, 10).boxed().collect(Collectors.toList());
|
||||||
|
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
package com.baeldung.string.sorting;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class AnagramValidator {
|
||||||
|
|
||||||
|
public static boolean isValid(String text, String anagram) {
|
||||||
|
text = prepare(text);
|
||||||
|
anagram = prepare(anagram);
|
||||||
|
|
||||||
|
String sortedText = sort(text);
|
||||||
|
String sortedAnagram = sort(anagram);
|
||||||
|
|
||||||
|
return sortedText.equals(sortedAnagram);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String sort(String text) {
|
||||||
|
char[] chars = prepare(text).toCharArray();
|
||||||
|
|
||||||
|
Arrays.sort(chars);
|
||||||
|
return new String(chars);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String prepare(String text) {
|
||||||
|
return text.toLowerCase()
|
||||||
|
.trim()
|
||||||
|
.replaceAll("\\s+", "");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.baeldung.string.sorting;
|
||||||
|
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import com.baeldung.string.sorting.AnagramValidator;
|
||||||
|
|
||||||
|
class AnagramValidatorUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenValidAnagrams_whenSorted_thenEqual() {
|
||||||
|
boolean isValidAnagram = AnagramValidator.isValid("Avida Dollars", "Salvador Dali");
|
||||||
|
|
||||||
|
assertTrue(isValidAnagram);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenNotValidAnagrams_whenSorted_thenNotEqual() {
|
||||||
|
boolean isValidAnagram = AnagramValidator.isValid("abc", "def");
|
||||||
|
|
||||||
|
assertFalse(isValidAnagram);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.baeldung.string.sorting;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
class SortStringUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenString_whenSort_thenSorted() {
|
||||||
|
String abcd = "bdca";
|
||||||
|
char[] chars = abcd.toCharArray();
|
||||||
|
|
||||||
|
Arrays.sort(chars);
|
||||||
|
String sorted = new String(chars);
|
||||||
|
|
||||||
|
assertThat(sorted).isEqualTo("abcd");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenString_whenSortJava8_thenSorted() {
|
||||||
|
String sorted = "bdca".chars()
|
||||||
|
.sorted()
|
||||||
|
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
|
||||||
|
.toString();
|
||||||
|
|
||||||
|
assertThat(sorted).isEqualTo("abcd");
|
||||||
|
}
|
||||||
|
}
|
@ -1,67 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<groupId>com.baeldung.samples</groupId>
|
|
||||||
<artifactId>jersey-client-rx</artifactId>
|
|
||||||
<version>1.0</version>
|
|
||||||
<packaging>jar</packaging>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.glassfish.jersey.inject</groupId>
|
|
||||||
<artifactId>jersey-hk2</artifactId>
|
|
||||||
<version>2.27</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.glassfish.jersey.core</groupId>
|
|
||||||
<artifactId>jersey-client</artifactId>
|
|
||||||
<version>2.27</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.glassfish.jersey.ext.rx</groupId>
|
|
||||||
<artifactId>jersey-rx-client-rxjava</artifactId>
|
|
||||||
<version>2.27</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.glassfish.jersey.ext.rx</groupId>
|
|
||||||
<artifactId>jersey-rx-client-rxjava2</artifactId>
|
|
||||||
<version>2.27</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.github.tomakehurst</groupId>
|
|
||||||
<artifactId>wiremock</artifactId>
|
|
||||||
<version>1.58</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.junit.vintage</groupId>
|
|
||||||
<artifactId>junit-vintage-engine</artifactId>
|
|
||||||
<version>5.2.0</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.glassfish.jersey.media</groupId>
|
|
||||||
<artifactId>jersey-media-json-jackson</artifactId>
|
|
||||||
<version>2.25</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.jaxrs</groupId>
|
|
||||||
<artifactId>jackson-jaxrs-json-provider</artifactId>
|
|
||||||
<version>2.4.1</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.slf4j</groupId>
|
|
||||||
<artifactId>slf4j-jdk14</artifactId>
|
|
||||||
<version>1.7.25</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.assertj</groupId>
|
|
||||||
<artifactId>assertj-core</artifactId>
|
|
||||||
<version>3.10.0</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
<properties>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<maven.compiler.source>1.8</maven.compiler.source>
|
|
||||||
<maven.compiler.target>1.8</maven.compiler.target>
|
|
||||||
</properties>
|
|
||||||
</project>
|
|
@ -1,3 +0,0 @@
|
|||||||
# Fluent, Reactive Jersey Client Orchestration #
|
|
||||||
|
|
||||||
### Sample code demonstrating the options for asynchronous, reactive RESTful service consumption with JAX-RS ###
|
|
1
pom.xml
1
pom.xml
@ -585,7 +585,6 @@
|
|||||||
<module>spring-security-thymeleaf</module>
|
<module>spring-security-thymeleaf</module>
|
||||||
<module>persistence-modules/java-jdbi</module>
|
<module>persistence-modules/java-jdbi</module>
|
||||||
<module>jersey</module>
|
<module>jersey</module>
|
||||||
<module>jersey-client-rx</module>
|
|
||||||
<module>java-spi</module>
|
<module>java-spi</module>
|
||||||
<module>performance-tests</module>
|
<module>performance-tests</module>
|
||||||
<module>twilio</module>
|
<module>twilio</module>
|
||||||
|
10
spring-boot-bootstrap/cloudfoundry/manifest.yml
Executable file
10
spring-boot-bootstrap/cloudfoundry/manifest.yml
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
applications:
|
||||||
|
- name: spring-boot-bootstrap
|
||||||
|
memory: 768M
|
||||||
|
random-route: true
|
||||||
|
path: ../target/spring-boot-bootstrap-cf.jar
|
||||||
|
env:
|
||||||
|
SPRING_PROFILES_ACTIVE: cloud,mysql
|
||||||
|
services:
|
||||||
|
- spring-bootstrap-db
|
@ -14,6 +14,17 @@
|
|||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
<relativePath>../parent-boot-2</relativePath>
|
<relativePath>../parent-boot-2</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-dependencies</artifactId>
|
||||||
|
<version>Finchley.SR1</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -28,10 +39,22 @@
|
|||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-cloud-connectors</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.h2database</groupId>
|
<groupId>com.h2database</groupId>
|
||||||
<artifactId>h2</artifactId>
|
<artifactId>h2</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-security</artifactId>
|
<artifactId>spring-boot-starter-security</artifactId>
|
||||||
@ -55,6 +78,47 @@
|
|||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<profiles>
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>cloudfoundry</id>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-cloud-connectors</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/logback.xml</exclude>
|
||||||
|
</excludes>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<finalName>${project.name}-cf</finalName>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/cloud/config/*.java</exclude>
|
||||||
|
</excludes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
<profile>
|
<profile>
|
||||||
<id>autoconfiguration</id>
|
<id>autoconfiguration</id>
|
||||||
<build>
|
<build>
|
||||||
@ -112,7 +176,19 @@
|
|||||||
</build>
|
</build>
|
||||||
</profile>
|
</profile>
|
||||||
</profiles>
|
</profiles>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/cloud/*.java</exclude>
|
||||||
|
</excludes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
<properties>
|
<properties>
|
||||||
<servlet.version>4.0.0</servlet.version>
|
<servlet.version>4.0.0</servlet.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
package org.baeldung.cloud.config;
|
||||||
|
|
||||||
|
import org.springframework.cloud.config.java.AbstractCloudConfig;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Profile;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@Profile("cloud")
|
||||||
|
public class CloudDataSourceConfig extends AbstractCloudConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public DataSource dataSource() {
|
||||||
|
return connectionFactory().dataSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
server.port = 8081
|
||||||
|
|
||||||
|
spring.application.name = Bootstrap Spring Boot
|
||||||
|
|
||||||
|
spring.thymeleaf.cache = false
|
||||||
|
spring.thymeleaf.enabled=true
|
||||||
|
spring.thymeleaf.prefix=classpath:/templates/
|
||||||
|
spring.thymeleaf.suffix=.html
|
||||||
|
|
||||||
|
spring.security.user.name=john
|
||||||
|
spring.security.user.password=123
|
||||||
|
|
||||||
|
spring.datasource.driver-class-name=org.h2.Driver
|
||||||
|
spring.datasource.url=jdbc:h2:mem:bootapp;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
|
||||||
|
spring.datasource.username=sa
|
||||||
|
spring.datasource.password=
|
||||||
|
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
|
||||||
|
|
||||||
|
server.error.path=/error
|
||||||
|
server.error.whitelabel.enabled=false
|
@ -0,0 +1 @@
|
|||||||
|
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
|
@ -1,19 +1,11 @@
|
|||||||
server.port = 8081
|
server.port=${port:8080}
|
||||||
|
spring.application.name = Bootstrap Spring Cloud
|
||||||
spring.application.name = Bootstrap Spring Boot
|
|
||||||
|
|
||||||
spring.thymeleaf.cache = false
|
spring.thymeleaf.cache = false
|
||||||
spring.thymeleaf.enabled=true
|
spring.thymeleaf.enabled=true
|
||||||
spring.thymeleaf.prefix=classpath:/templates/
|
spring.thymeleaf.prefix=classpath:/templates/
|
||||||
spring.thymeleaf.suffix=.html
|
spring.thymeleaf.suffix=.html
|
||||||
|
|
||||||
spring.security.user.name=john
|
|
||||||
spring.security.user.password=123
|
|
||||||
|
|
||||||
spring.datasource.driver-class-name=org.h2.Driver
|
|
||||||
spring.datasource.url=jdbc:h2:mem:bootapp;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
|
|
||||||
spring.datasource.username=sa
|
|
||||||
spring.datasource.password=
|
|
||||||
|
|
||||||
server.error.path=/error
|
server.error.path=/error
|
||||||
server.error.whitelabel.enabled=false
|
server.error.whitelabel.enabled=false
|
||||||
|
|
||||||
|
spring.jpa.generate-ddl=true
|
@ -1,12 +1,12 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>com.baeldung</groupId>
|
<groupId>com.baeldung</groupId>
|
||||||
<artifactId>spring-boot-persistence</artifactId>
|
<artifactId>spring-boot-persistence</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.1.0</version>
|
||||||
<packaging>jar</packaging>
|
|
||||||
<name>spring-boot-persistence</name>
|
|
||||||
<description>This is a simple Spring Data Repositories test</description>
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>parent-boot-2</artifactId>
|
<artifactId>parent-boot-2</artifactId>
|
||||||
@ -19,17 +19,44 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>com.zaxxer</groupId>
|
||||||
|
<artifactId>HikariCP</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.tomcat</groupId>
|
||||||
|
<artifactId>tomcat-jdbc</artifactId>
|
||||||
|
<version>${tomcat-jdbc.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
<version>${mysql-connector-java.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.h2database</groupId>
|
<groupId>com.h2database</groupId>
|
||||||
<artifactId>h2</artifactId>
|
<artifactId>h2</artifactId>
|
||||||
</dependency>
|
<version>${h2database.version}</version>
|
||||||
<dependency>
|
<scope>runtime</scope>
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter</artifactId>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
<mysql-connector-java.version>8.0.12</mysql-connector-java.version>
|
||||||
|
<tomcat-jdbc.version>9.0.10</tomcat-jdbc.version>
|
||||||
|
<h2database.version>1.4.197</h2database.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<finalName>spring-boot-persistence</finalName>
|
<finalName>spring-boot-persistence</finalName>
|
||||||
<resources>
|
<resources>
|
||||||
@ -40,18 +67,9 @@
|
|||||||
</resources>
|
</resources>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>maven-war-plugin</artifactId>
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>pl.project13.maven</groupId>
|
|
||||||
<artifactId>git-commit-id-plugin</artifactId>
|
|
||||||
<version>${git-commit-id-plugin.version}</version>
|
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
|
||||||
<git-commit-id-plugin.version>2.2.4</git-commit-id-plugin.version>
|
|
||||||
</properties>
|
|
||||||
</project>
|
</project>
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.baeldung.tomcatconnectionpool.application;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.domain.EntityScan;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
|
||||||
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
@EnableAutoConfiguration
|
||||||
|
@ComponentScan(basePackages={"com.baeldung.tomcatconnectionpool.application"})
|
||||||
|
@EnableJpaRepositories(basePackages="com.baeldung.tomcatconnectionpool.application.repositories")
|
||||||
|
@EnableTransactionManagement
|
||||||
|
@EntityScan(basePackages="com.baeldung.tomcatconnectionpool.application.entities")
|
||||||
|
public class SpringBootConsoleApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(SpringBootConsoleApplication.class);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package com.baeldung.tomcatconnectionpool.application.entities;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "customers")
|
||||||
|
public class Customer {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
private long id;
|
||||||
|
@Column(name = "first_name")
|
||||||
|
private String firstName;
|
||||||
|
@Column(name = "last_name")
|
||||||
|
private String lastName;
|
||||||
|
|
||||||
|
public Customer() {}
|
||||||
|
|
||||||
|
public Customer(String firstName, String lastName) {
|
||||||
|
this.firstName = firstName;
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastName(String lastName) {
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFirstName() {
|
||||||
|
return firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFirstName(String firstName) {
|
||||||
|
this.firstName = firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastName() {
|
||||||
|
return lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Customer{" + "id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + '}';
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.baeldung.tomcatconnectionpool.application.repositories;
|
||||||
|
|
||||||
|
import com.baeldung.tomcatconnectionpool.application.entities.Customer;
|
||||||
|
import java.util.List;
|
||||||
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface CustomerRepository extends CrudRepository<Customer, Long> {
|
||||||
|
|
||||||
|
List<Customer> findByLastName(String lastName);
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package com.baeldung.tomcatconnectionpool.application.runners;
|
||||||
|
|
||||||
|
import com.baeldung.tomcatconnectionpool.application.entities.Customer;
|
||||||
|
import com.baeldung.tomcatconnectionpool.application.repositories.CustomerRepository;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.CommandLineRunner;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class CommandLineCrudRunner implements CommandLineRunner {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(CommandLineCrudRunner.class);
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CustomerRepository customerRepository;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(String... args) throws Exception {
|
||||||
|
customerRepository.save(new Customer("John", "Doe"));
|
||||||
|
customerRepository.save(new Customer("Jennifer", "Wilson"));
|
||||||
|
|
||||||
|
logger.info("Customers found with findAll():");
|
||||||
|
customerRepository.findAll().forEach(c -> logger.info(c.toString()));
|
||||||
|
|
||||||
|
logger.info("Customer found with findById(1L):");
|
||||||
|
Customer customer = customerRepository.findById(1L)
|
||||||
|
.orElseGet(() -> new Customer("Non-existing customer", ""));
|
||||||
|
logger.info(customer.toString());
|
||||||
|
|
||||||
|
logger.info("Customer found with findByLastName('Wilson'):");
|
||||||
|
customerRepository.findByLastName("Wilson").forEach(c -> {
|
||||||
|
logger.info(c.toString());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -1,2 +1,16 @@
|
|||||||
spring.jpa.show-sql=true
|
spring.datasource.tomcat.initial-size=15
|
||||||
spring.jpa.hibernate.ddl-auto=none
|
spring.datasource.tomcat.max-wait=20000
|
||||||
|
spring.datasource.tomcat.max-active=50
|
||||||
|
spring.datasource.tomcat.max-idle=15
|
||||||
|
spring.datasource.tomcat.min-idle=8
|
||||||
|
spring.datasource.tomcat.default-auto-commit=true
|
||||||
|
spring.datasource.url=jdbc:h2:mem:test
|
||||||
|
spring.datasource.username=root
|
||||||
|
spring.datasource.password=
|
||||||
|
spring.datasource.driver-class-name=org.h2.Driver
|
||||||
|
|
||||||
|
spring.jpa.show-sql=false
|
||||||
|
spring.jpa.hibernate.ddl-auto=update
|
||||||
|
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
|
||||||
|
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
|
||||||
|
spring.jpa.properties.hibernate.id.new_generator_mappings=false
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.baeldung.tomcatconnectionpool.test.application;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
import static org.assertj.core.api.Assertions.*;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
@RunWith(SpringRunner.class)
|
||||||
|
@SpringBootTest
|
||||||
|
public class SpringBootTomcatConnectionPoolIntegrationTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DataSource dataSource;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenTomcatConnectionPoolInstance_whenCheckedPoolClassName_thenCorrect() {
|
||||||
|
assertThat(dataSource.getClass().getName()).isEqualTo("org.apache.tomcat.jdbc.pool.DataSource");
|
||||||
|
}
|
||||||
|
}
|
@ -45,6 +45,23 @@
|
|||||||
<artifactId>spring-boot-starter-web</artifactId>
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- security taglib -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.security</groupId>
|
||||||
|
<artifactId>spring-security-taglibs</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- JSTL -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.tomcat.embed</groupId>
|
||||||
|
<artifactId>tomcat-embed-jasper</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>jstl</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-test</artifactId>
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.baeldung.springsecuritytaglibs;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/")
|
||||||
|
public class HomeController {
|
||||||
|
|
||||||
|
@RequestMapping
|
||||||
|
public String home() {
|
||||||
|
return "home";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package com.baeldung.springsecuritytaglibs;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.context.annotation.PropertySource;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
@PropertySource("classpath:application-taglibs.properties")
|
||||||
|
public class SpringBootSecurityTagLibsApplication {
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.baeldung.springsecuritytaglibs.config;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
|
||||||
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||||
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||||
|
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableWebSecurity
|
||||||
|
public class SpringBootSecurityTagLibsConfig extends WebSecurityConfigurerAdapter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
||||||
|
auth.inMemoryAuthentication()
|
||||||
|
.withUser("testUser")
|
||||||
|
.password("password")
|
||||||
|
.roles("ADMIN");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
|
// @formatter:off
|
||||||
|
http.csrf()
|
||||||
|
.and()
|
||||||
|
.authorizeRequests()
|
||||||
|
.antMatchers("/userManagement").hasRole("ADMIN")
|
||||||
|
.anyRequest().permitAll().and().httpBasic();
|
||||||
|
// @formatter:on
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
#jsp config
|
||||||
|
spring.mvc.view.prefix: /WEB-INF/views/
|
||||||
|
spring.mvc.view.suffix: .jsp
|
38
spring-boot-security/src/main/webapp/WEB-INF/views/home.jsp
Normal file
38
spring-boot-security/src/main/webapp/WEB-INF/views/home.jsp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
||||||
|
pageEncoding="UTF-8"%>
|
||||||
|
<%@ taglib prefix="sec"
|
||||||
|
uri="http://www.springframework.org/security/tags"%>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||||
|
<sec:csrfMetaTags />
|
||||||
|
<title>Home Page</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<sec:authorize access="!isAuthenticated()">
|
||||||
|
Login
|
||||||
|
</sec:authorize>
|
||||||
|
|
||||||
|
<sec:authorize access="isAuthenticated()">
|
||||||
|
Logout
|
||||||
|
</sec:authorize>
|
||||||
|
|
||||||
|
<sec:authorize access="isAuthenticated()">
|
||||||
|
<h2>
|
||||||
|
Welcome back, <sec:authentication property="name" />
|
||||||
|
</h2>
|
||||||
|
<sec:authorize access="hasRole('ADMIN')">
|
||||||
|
Manage Users
|
||||||
|
</sec:authorize>
|
||||||
|
<form method="post">
|
||||||
|
<sec:csrfInput />
|
||||||
|
Text Field: <br /> <input type="text" name="textField" />
|
||||||
|
<input type="submit" value="Submit form with CSRF input">
|
||||||
|
</form>
|
||||||
|
<sec:authorize url="/userManagement">
|
||||||
|
<a href="/userManagement">Manage Users</a>
|
||||||
|
</sec:authorize>
|
||||||
|
</sec:authorize>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,60 @@
|
|||||||
|
package com.baeldung.springsecuritytaglibs;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||||
|
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||||
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
|
||||||
|
@RunWith(SpringRunner.class)
|
||||||
|
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = SpringBootSecurityTagLibsApplication.class)
|
||||||
|
public class HomeControllerUnitTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TestRestTemplate restTemplate;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenUserIsAuthenticatedThenAuthenticatedSectionsShowOnSite() throws Exception {
|
||||||
|
String body = this.restTemplate.withBasicAuth("testUser", "password")
|
||||||
|
.getForEntity("/", String.class)
|
||||||
|
.getBody();
|
||||||
|
|
||||||
|
// test <sec:authorize access="!isAuthenticated()">
|
||||||
|
assertFalse(body.contains("Login"));
|
||||||
|
|
||||||
|
// test <sec:authorize access="isAuthenticated()">
|
||||||
|
assertTrue(body.contains("Logout"));
|
||||||
|
|
||||||
|
// test <sec:authorize access="hasRole('ADMIN')">
|
||||||
|
assertTrue(body.contains("Manage Users"));
|
||||||
|
|
||||||
|
// test <sec:authentication property="principal.username" />
|
||||||
|
assertTrue(body.contains("testUser"));
|
||||||
|
|
||||||
|
// test <sec:authorize url="/adminOnlyURL">
|
||||||
|
assertTrue(body.contains("<a href=\"/userManagement\">"));
|
||||||
|
|
||||||
|
// test <sec:csrfInput />
|
||||||
|
assertTrue(body.contains("<input type=\"hidden\" name=\"_csrf\" value=\""));
|
||||||
|
|
||||||
|
// test <sec:csrfMetaTags />
|
||||||
|
assertTrue(body.contains("<meta name=\"_csrf_parameter\" content=\"_csrf\" />"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenUserIsNotAuthenticatedThenOnlyAnonymousSectionsShowOnSite() throws Exception {
|
||||||
|
String body = this.restTemplate.getForEntity("/", String.class)
|
||||||
|
.getBody();
|
||||||
|
|
||||||
|
// test <sec:authorize access="!isAuthenticated()">
|
||||||
|
assertTrue(body.contains("Login"));
|
||||||
|
|
||||||
|
// test <sec:authorize access="isAuthenticated()">
|
||||||
|
assertFalse(body.contains("Logout"));
|
||||||
|
}
|
||||||
|
}
|
@ -76,6 +76,49 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish.jersey.inject</groupId>
|
||||||
|
<artifactId>jersey-hk2</artifactId>
|
||||||
|
<version>${jersey.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish.jersey.ext.rx</groupId>
|
||||||
|
<artifactId>jersey-rx-client-rxjava</artifactId>
|
||||||
|
<version>${jersey.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish.jersey.ext.rx</groupId>
|
||||||
|
<artifactId>jersey-rx-client-rxjava2</artifactId>
|
||||||
|
<version>${jersey.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.tomakehurst</groupId>
|
||||||
|
<artifactId>wiremock</artifactId>
|
||||||
|
<version>1.58</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.jaxrs</groupId>
|
||||||
|
<artifactId>jackson-jaxrs-json-provider</artifactId>
|
||||||
|
<version>2.6.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
<version>2.6.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-jdk14</artifactId>
|
||||||
|
<version>1.7.25</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.assertj</groupId>
|
||||||
|
<artifactId>assertj-core</artifactId>
|
||||||
|
<version>3.10.0</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<profiles>
|
<profiles>
|
||||||
@ -170,7 +213,7 @@
|
|||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<jersey.version>2.26</jersey.version>
|
<jersey.version>2.27</jersey.version>
|
||||||
<maven-war-plugin.version>3.2.0</maven-war-plugin.version>
|
<maven-war-plugin.version>3.2.0</maven-war-plugin.version>
|
||||||
<cargo-maven2-plugin.version>1.6.1</cargo-maven2-plugin.version>
|
<cargo-maven2-plugin.version>1.6.1</cargo-maven2-plugin.version>
|
||||||
<httpcore.version>4.4.9</httpcore.version>
|
<httpcore.version>4.4.9</httpcore.version>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package com.baeldung.samples.jerseyrx;
|
package com.baeldung.clientrx;
|
||||||
|
|
||||||
import static com.github.tomakehurst.wiremock.client.WireMock.*;
|
import static com.github.tomakehurst.wiremock.client.WireMock.*;
|
||||||
import static org.assertj.core.api.Assertions.*;
|
import static org.assertj.core.api.Assertions.*;
|
Loading…
x
Reference in New Issue
Block a user