testng: use SerializedMessageSender in case it is supported by users library; StringMessageSender otherwise; as now StringMessageSender doesn't wait until ack messages - tests with old testng libs may terminate unexpectedly (IDEA-64361 )

This commit is contained in:
anna
2011-01-21 20:19:49 +01:00
parent 4233774d5c
commit b21a06ed4d
3 changed files with 31 additions and 4 deletions
@@ -102,7 +102,7 @@ public class SearchingForTestsTask extends Task.Backgroundable {
writeTempFile();
connect();
myClient.startListening();
myClient.startListening(myConfig);
}
@Override
@@ -57,6 +57,9 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.ToolWindowId;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.PathUtil;
import com.intellij.util.net.NetUtils;
import com.theoryinpractice.testng.model.*;
@@ -69,7 +72,9 @@ import org.testng.CommandLineArgs;
import org.testng.IDEATestNGListener;
import org.testng.RemoteTestNGStarter;
import org.testng.annotations.AfterClass;
import org.testng.remote.RemoteArgs;
import org.testng.remote.strprotocol.MessageHelper;
import org.testng.remote.strprotocol.SerializedMessageSender;
import javax.swing.*;
import java.io.File;
@@ -278,7 +283,7 @@ public class TestNGRunnableState extends JavaCommandLineState {
final TestData data = config.getPersistantData();
javaParameters.getProgramParametersList().add(CommandLineArgs.PORT, String.valueOf(port));
javaParameters.getProgramParametersList().add(supportSerializationProtocol(config) ? RemoteArgs.PORT : CommandLineArgs.PORT, String.valueOf(port));
if (data.getOutputDirectory() != null && !"".equals(data.getOutputDirectory())) {
javaParameters.getProgramParametersList().add(CommandLineArgs.OUTPUT_DIRECTORY, data.getOutputDirectory());
@@ -363,4 +368,20 @@ public class TestNGRunnableState extends JavaCommandLineState {
final File tempFile) {
return new SearchingForTestsTask(serverSocket, config, tempFile, client);
}
public static boolean supportSerializationProtocol(TestNGConfiguration config) {
final Project project = config.getProject();
final GlobalSearchScope scopeToDetermineTestngIn;
if (config.getPersistantData().getScope() == TestSearchScope.WHOLE_PROJECT) {
scopeToDetermineTestngIn = GlobalSearchScope.allScope(project);
}
else {
scopeToDetermineTestngIn = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(config.getConfigurationModule().getModule());
}
final TestData data = config.getPersistantData();
return JavaPsiFacade.getInstance(project)
.findClass(SerializedMessageSender.class.getName(), scopeToDetermineTestngIn) != null;
}
}
@@ -17,6 +17,10 @@ package com.theoryinpractice.testng.model;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.theoryinpractice.testng.configuration.TestNGConfiguration;
import com.theoryinpractice.testng.configuration.TestNGRunnableState;
import org.testng.remote.strprotocol.*;
import java.net.SocketTimeoutException;
@@ -30,8 +34,10 @@ public class IDEARemoteTestRunnerClient extends AbstractRemoteTestRunnerClient
private TestNGRemoteListener myListener;
private int myPort;
public synchronized void startListening() {
final StringMessageSender messageSender = new StringMessageSender("localhost", myPort);
public synchronized void startListening(TestNGConfiguration config) {
final IMessageSender messageSender = TestNGRunnableState.supportSerializationProtocol(config)
? new SerializedMessageSender("localhost", myPort)
: new StringMessageSender("localhost", myPort);
final ServerConnection srvConnection = new ServerConnection(messageSender) {
@Override
protected void handleThrowable(Throwable cause) {