package com.navercorp.pinpoint.tools.network;
import com.navercorp.pinpoint.tools.utils.HostResolver;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.List;
/**
* @author Taejin Koo
*/
public abstract class AbstractNetworkChecker implements NetworkChecker {
private static final String WHITE_SPACE = " "; // 4space
private static final String LINE_SEPARATOR = "\r\n";
private final String testName;
private final InetSocketAddress hostAddress;
private final List<InetSocketAddress> ipAddressList;
public AbstractNetworkChecker(String testName, InetSocketAddress hostAddress) throws UnknownHostException {
this.testName = testName;
this.hostAddress = hostAddress;
this.ipAddressList = HostResolver.getIPList(hostAddress);
}
protected abstract boolean check(InetSocketAddress address) throws IOException;
protected abstract boolean check(InetSocketAddress address, byte[] requestData, byte[] expectedResponseData) throws IOException;
@Override
public void check() throws IOException {
StringBuilder report = new StringBuilder(32);
String hostName = getHostName(hostAddress);
report.append(testName).append(":// ").append(hostName).append(LINE_SEPARATOR);
for (InetSocketAddress ipAddress : ipAddressList) {
boolean check = check(ipAddress);
report.append(createReport(ipAddress, check));
}
System.out.println(report.toString());
}
@Override
public void check(byte[] requestData, byte[] expectedResponseData) throws IOException {
StringBuilder report = new StringBuilder(32);
String hostName = getHostName(hostAddress);
report.append(testName).append(":// ").append(hostName).append(LINE_SEPARATOR);
for (InetSocketAddress ipAddress : ipAddressList) {
boolean check = check(ipAddress, requestData, expectedResponseData);
report.append(createReport(ipAddress, check));
}
System.out.println(report.toString());
}
private String getHostName(InetSocketAddress hostAddress) {
String hostName = hostAddress.getHostName();
return hostName;
}
private String createReport(InetSocketAddress socketAddress, boolean check) {
String ip = getIp(socketAddress, socketAddress.getHostName());
int port = socketAddress.getPort();
StringBuilder report = new StringBuilder();
report.append(WHITE_SPACE).append("=> ").append(ip).append(":").append(port);
report.append(" [").append(check ? "SUCCESS" : "FAIL").append("]").append(LINE_SEPARATOR);
return report.toString();
}
protected String getIp(InetSocketAddress socketAddress, String defaultValue) {
InetAddress address = socketAddress.getAddress();
if (address != null) {
return address.getHostAddress();
}
return defaultValue;
}
}