Всем привет.
Необходимо в тесте вызвать метод, который отправит файл .json в контроллер запущенного приложения, для создания определенной фикстуры (например user). Проблема в том, что локально под Windows это отрабатывает, а на удаленной виртуалке (linux) - нет.
Вот метод, который реализует отправку:
package utils; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class HttpTransport { public static void sendJsonToController(String json, String url) throws IOException { url = "http://localhost:9000/" + url; //тут в результате получается http://localhost:9000/UserAPI/createUser HttpClient client = HttpClientBuilder.create().build(); HttpPost post = new HttpPost(url); List<NameValuePair> urlParameters = new ArrayList<NameValuePair>(); urlParameters.add(new BasicNameValuePair("json", json)); post.setEntity(new UrlEncodedFormEntity(urlParameters, "UTF-8")); client.execute(post); } }
Валится, при попытке выполнить
client.execute(post);
org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:9000 [/127.0.0.1] failed: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:72) at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:117) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57) at utils.HttpTransport.sendJsonToController(HttpTransport.java:23)
Но самое удивительное то, что следом запускаются тесты, которые не дергают это метод для создания фикстур, а идут прямиком на localhost:9000, и отрабатывают через UI. И эти тесты проходят. Т.е приложение запущено, факт, и отрабатывает на localhost:9000. Замена localhost:9000 на 127.0.0.1 не помогла. Приложение использует протокол tcp4. Как это можно победить?