Merge branch 'eugenp:master' into master
This commit is contained in:
commit
c527e5a2af
@ -0,0 +1,39 @@
|
|||||||
|
package com.baeldung.clientaddress;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.net.Socket;
|
||||||
|
|
||||||
|
public class ApplicationClient {
|
||||||
|
|
||||||
|
private Socket clientSocket;
|
||||||
|
private PrintWriter out;
|
||||||
|
private BufferedReader in;
|
||||||
|
|
||||||
|
public void connect(String ip, int port) throws IOException {
|
||||||
|
clientSocket = new Socket(ip, port);
|
||||||
|
out = new PrintWriter(clientSocket.getOutputStream(), true);
|
||||||
|
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendGreetings(String msg) throws IOException {
|
||||||
|
out.println(msg);
|
||||||
|
String reply = in.readLine();
|
||||||
|
System.out.println("Reply received from the server :: " + reply);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disconnect() throws IOException {
|
||||||
|
in.close();
|
||||||
|
out.close();
|
||||||
|
clientSocket.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
ApplicationClient client = new ApplicationClient();
|
||||||
|
client.connect(args[0], Integer.parseInt(args[1])); // IP address and port number of the server
|
||||||
|
client.sendGreetings(args[2]); // greetings message
|
||||||
|
client.disconnect();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package com.baeldung.clientaddress;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
import java.net.Socket;
|
||||||
|
|
||||||
|
public class ApplicationServer {
|
||||||
|
|
||||||
|
private ServerSocket serverSocket;
|
||||||
|
private Socket connectedSocket;
|
||||||
|
private PrintWriter out;
|
||||||
|
private BufferedReader in;
|
||||||
|
|
||||||
|
public void startServer(int port) throws IOException {
|
||||||
|
serverSocket = new ServerSocket(port);
|
||||||
|
connectedSocket = serverSocket.accept();
|
||||||
|
|
||||||
|
InetSocketAddress socketAddress = (InetSocketAddress) connectedSocket.getRemoteSocketAddress();
|
||||||
|
String clientIpAddress = socketAddress.getAddress()
|
||||||
|
.getHostAddress();
|
||||||
|
System.out.println("IP address of the connected client :: " + clientIpAddress);
|
||||||
|
|
||||||
|
out = new PrintWriter(connectedSocket.getOutputStream(), true);
|
||||||
|
in = new BufferedReader(new InputStreamReader(connectedSocket.getInputStream()));
|
||||||
|
String msg = in.readLine();
|
||||||
|
System.out.println("Message received from the client :: " + msg);
|
||||||
|
out.println("Hello Client !!");
|
||||||
|
|
||||||
|
closeIO();
|
||||||
|
stopServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void closeIO() throws IOException {
|
||||||
|
in.close();
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stopServer() throws IOException {
|
||||||
|
connectedSocket.close();
|
||||||
|
serverSocket.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
ApplicationServer server = new ApplicationServer();
|
||||||
|
server.startServer(5000);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,101 @@
|
|||||||
|
package com.baeldung.java9.process;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public class ProcessAPIEnhancements {
|
||||||
|
|
||||||
|
static Logger log = LoggerFactory.getLogger(ProcessAPIEnhancements.class);
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException, InterruptedException, ExecutionException {
|
||||||
|
infoOfCurrentProcess();
|
||||||
|
infoOfLiveProcesses();
|
||||||
|
infoOfSpawnProcess();
|
||||||
|
infoOfExitCallback();
|
||||||
|
infoOfChildProcess();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void infoOfCurrentProcess() {
|
||||||
|
ProcessHandle processHandle = ProcessHandle.current();
|
||||||
|
ProcessHandle.Info processInfo = processHandle.info();
|
||||||
|
|
||||||
|
log.info("PID: " + processHandle.pid());
|
||||||
|
log.info("Arguments: " + processInfo.arguments());
|
||||||
|
log.info("Command: " + processInfo.command());
|
||||||
|
log.info("Instant: " + processInfo.startInstant());
|
||||||
|
log.info("Total CPU duration: " + processInfo.totalCpuDuration());
|
||||||
|
log.info("User: " + processInfo.user());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void infoOfSpawnProcess() throws IOException {
|
||||||
|
|
||||||
|
String javaCmd = ProcessUtils.getJavaCmd().getAbsolutePath();
|
||||||
|
ProcessBuilder processBuilder = new ProcessBuilder(javaCmd, "-version");
|
||||||
|
Process process = processBuilder.inheritIO().start();
|
||||||
|
ProcessHandle processHandle = process.toHandle();
|
||||||
|
ProcessHandle.Info processInfo = processHandle.info();
|
||||||
|
|
||||||
|
log.info("PID: " + processHandle.pid());
|
||||||
|
log.info("Arguments: " + processInfo.arguments());
|
||||||
|
log.info("Command: " + processInfo.command());
|
||||||
|
log.info("Instant: " + processInfo.startInstant());
|
||||||
|
log.info("Total CPU duration: " + processInfo.totalCpuDuration());
|
||||||
|
log.info("User: " + processInfo.user());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void infoOfLiveProcesses() {
|
||||||
|
Stream<ProcessHandle> liveProcesses = ProcessHandle.allProcesses();
|
||||||
|
liveProcesses.filter(ProcessHandle::isAlive)
|
||||||
|
.forEach(ph -> {
|
||||||
|
log.info("PID: " + ph.pid());
|
||||||
|
log.info("Instance: " + ph.info().startInstant());
|
||||||
|
log.info("User: " + ph.info().user());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void infoOfChildProcess() throws IOException {
|
||||||
|
int childProcessCount = 5;
|
||||||
|
for (int i = 0; i < childProcessCount; i++) {
|
||||||
|
String javaCmd = ProcessUtils.getJavaCmd()
|
||||||
|
.getAbsolutePath();
|
||||||
|
ProcessBuilder processBuilder
|
||||||
|
= new ProcessBuilder(javaCmd, "-version");
|
||||||
|
processBuilder.inheritIO().start();
|
||||||
|
}
|
||||||
|
|
||||||
|
Stream<ProcessHandle> children = ProcessHandle.current()
|
||||||
|
.children();
|
||||||
|
children.filter(ProcessHandle::isAlive)
|
||||||
|
.forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info()
|
||||||
|
.command()));
|
||||||
|
Stream<ProcessHandle> descendants = ProcessHandle.current()
|
||||||
|
.descendants();
|
||||||
|
descendants.filter(ProcessHandle::isAlive)
|
||||||
|
.forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info()
|
||||||
|
.command()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void infoOfExitCallback() throws IOException, InterruptedException, ExecutionException {
|
||||||
|
String javaCmd = ProcessUtils.getJavaCmd()
|
||||||
|
.getAbsolutePath();
|
||||||
|
ProcessBuilder processBuilder
|
||||||
|
= new ProcessBuilder(javaCmd, "-version");
|
||||||
|
Process process = processBuilder.inheritIO()
|
||||||
|
.start();
|
||||||
|
ProcessHandle processHandle = process.toHandle();
|
||||||
|
|
||||||
|
log.info("PID: {} has started", processHandle.pid());
|
||||||
|
CompletableFuture<ProcessHandle> onProcessExit = processHandle.onExit();
|
||||||
|
onProcessExit.get();
|
||||||
|
log.info("Alive: " + processHandle.isAlive());
|
||||||
|
onProcessExit.thenAccept(ph -> {
|
||||||
|
log.info("PID: {} has stopped", ph.pid());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,132 +0,0 @@
|
|||||||
package com.baeldung.java9.process;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by sanaulla on 2/23/2017.
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class ProcessAPIEnhancementsUnitTest {
|
|
||||||
|
|
||||||
Logger log = LoggerFactory.getLogger(ProcessAPIEnhancementsUnitTest.class);
|
|
||||||
|
|
||||||
// @Test
|
|
||||||
// OS / Java version dependent
|
|
||||||
public void givenCurrentProcess_whenInvokeGetInfo_thenSuccess() throws IOException {
|
|
||||||
ProcessHandle processHandle = ProcessHandle.current();
|
|
||||||
ProcessHandle.Info processInfo = processHandle.info();
|
|
||||||
assertNotNull(processHandle.pid());
|
|
||||||
assertEquals(true, processInfo.arguments()
|
|
||||||
.isPresent());
|
|
||||||
assertEquals(true, processInfo.command()
|
|
||||||
.isPresent());
|
|
||||||
assertTrue(processInfo.command()
|
|
||||||
.get()
|
|
||||||
.contains("java"));
|
|
||||||
|
|
||||||
assertEquals(true, processInfo.startInstant()
|
|
||||||
.isPresent());
|
|
||||||
assertEquals(true, processInfo.totalCpuDuration()
|
|
||||||
.isPresent());
|
|
||||||
assertEquals(true, processInfo.user()
|
|
||||||
.isPresent());
|
|
||||||
}
|
|
||||||
|
|
||||||
// @Test
|
|
||||||
// OS / Java version dependent
|
|
||||||
public void givenSpawnProcess_whenInvokeGetInfo_thenSuccess() throws IOException {
|
|
||||||
|
|
||||||
String javaCmd = ProcessUtils.getJavaCmd()
|
|
||||||
.getAbsolutePath();
|
|
||||||
ProcessBuilder processBuilder = new ProcessBuilder(javaCmd, "-version");
|
|
||||||
Process process = processBuilder.inheritIO()
|
|
||||||
.start();
|
|
||||||
ProcessHandle processHandle = process.toHandle();
|
|
||||||
ProcessHandle.Info processInfo = processHandle.info();
|
|
||||||
assertNotNull(processHandle.pid());
|
|
||||||
assertEquals(true, processInfo.arguments()
|
|
||||||
.isPresent());
|
|
||||||
assertEquals(true, processInfo.command()
|
|
||||||
.isPresent());
|
|
||||||
assertTrue(processInfo.command()
|
|
||||||
.get()
|
|
||||||
.contains("java"));
|
|
||||||
assertEquals(true, processInfo.startInstant()
|
|
||||||
.isPresent());
|
|
||||||
assertEquals(false, processInfo.totalCpuDuration()
|
|
||||||
.isPresent());
|
|
||||||
assertEquals(true, processInfo.user()
|
|
||||||
.isPresent());
|
|
||||||
}
|
|
||||||
|
|
||||||
// @Test
|
|
||||||
// OS / Java version dependent
|
|
||||||
public void givenLiveProcesses_whenInvokeGetInfo_thenSuccess() {
|
|
||||||
Stream<ProcessHandle> liveProcesses = ProcessHandle.allProcesses();
|
|
||||||
liveProcesses.filter(ProcessHandle::isAlive)
|
|
||||||
.forEach(ph -> {
|
|
||||||
assertNotNull(ph.pid());
|
|
||||||
assertEquals(true, ph.info()
|
|
||||||
.startInstant()
|
|
||||||
.isPresent());
|
|
||||||
assertEquals(true, ph.info()
|
|
||||||
.user()
|
|
||||||
.isPresent());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// @Test
|
|
||||||
// OS / Java version dependent
|
|
||||||
public void givenProcess_whenGetChildProcess_thenSuccess() throws IOException {
|
|
||||||
int childProcessCount = 5;
|
|
||||||
for (int i = 0; i < childProcessCount; i++) {
|
|
||||||
String javaCmd = ProcessUtils.getJavaCmd()
|
|
||||||
.getAbsolutePath();
|
|
||||||
ProcessBuilder processBuilder
|
|
||||||
= new ProcessBuilder(javaCmd, "-version");
|
|
||||||
processBuilder.inheritIO().start();
|
|
||||||
}
|
|
||||||
|
|
||||||
Stream<ProcessHandle> children = ProcessHandle.current()
|
|
||||||
.children();
|
|
||||||
children.filter(ProcessHandle::isAlive)
|
|
||||||
.forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info()
|
|
||||||
.command()));
|
|
||||||
Stream<ProcessHandle> descendants = ProcessHandle.current()
|
|
||||||
.descendants();
|
|
||||||
descendants.filter(ProcessHandle::isAlive)
|
|
||||||
.forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info()
|
|
||||||
.command()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// @Test
|
|
||||||
// OS / Java version dependent
|
|
||||||
public void givenProcess_whenAddExitCallback_thenSuccess() throws Exception {
|
|
||||||
String javaCmd = ProcessUtils.getJavaCmd()
|
|
||||||
.getAbsolutePath();
|
|
||||||
ProcessBuilder processBuilder
|
|
||||||
= new ProcessBuilder(javaCmd, "-version");
|
|
||||||
Process process = processBuilder.inheritIO()
|
|
||||||
.start();
|
|
||||||
ProcessHandle processHandle = process.toHandle();
|
|
||||||
|
|
||||||
log.info("PID: {} has started", processHandle.pid());
|
|
||||||
CompletableFuture<ProcessHandle> onProcessExit = processHandle.onExit();
|
|
||||||
onProcessExit.get();
|
|
||||||
assertEquals(false, processHandle.isAlive());
|
|
||||||
onProcessExit.thenAccept(ph -> {
|
|
||||||
log.info("PID: {} has stopped", ph.pid());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -10,13 +10,18 @@ import com.maxmind.geoip2.DatabaseReader;
|
|||||||
import com.maxmind.geoip2.exception.GeoIp2Exception;
|
import com.maxmind.geoip2.exception.GeoIp2Exception;
|
||||||
import com.maxmind.geoip2.model.CityResponse;
|
import com.maxmind.geoip2.model.CityResponse;
|
||||||
|
|
||||||
public class GeoIpIntegrationTest {
|
public class GeoIpManualTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenIP_whenFetchingCity_thenReturnsCityData() throws IOException, GeoIp2Exception {
|
public void givenIP_whenFetchingCity_thenReturnsCityData() throws IOException, GeoIp2Exception {
|
||||||
|
|
||||||
ClassLoader classLoader = getClass().getClassLoader();
|
ClassLoader classLoader = getClass().getClassLoader();
|
||||||
File database = new File(classLoader.getResource("GeoLite2-City.mmdb").getFile());
|
/**
|
||||||
|
* Download the db file as shown in the article https://www.baeldung.com/geolocation-by-ip-with-maxmind,
|
||||||
|
* then replace the "your-path-to-db-file" string in the test with the file path before running the test
|
||||||
|
* HINT : Copy the downloaded file at spring-web-modules/spring-mvc-xml/src/test/resources/GeoLite2-City.mmdb
|
||||||
|
* **/
|
||||||
|
File database = new File("your-path-to-db-file");
|
||||||
DatabaseReader dbReader = new DatabaseReader.Builder(database).build();
|
DatabaseReader dbReader = new DatabaseReader.Builder(database).build();
|
||||||
|
|
||||||
InetAddress ipAddress = InetAddress.getByName("google.com");
|
InetAddress ipAddress = InetAddress.getByName("google.com");
|
Loading…
x
Reference in New Issue
Block a user