Squish: Separate server handling

Change-Id: Ibcafe31bc8fd7dfaea165b95ed8898a7bff69d21
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Stenger
2023-01-03 14:28:45 +01:00
parent bef44699a3
commit 3d7baa65f9
2 changed files with 92 additions and 66 deletions

View File

@@ -83,6 +83,11 @@ static void logRunnerStateChange(RunnerState from, RunnerState to)
qCInfo(LOG) << "Runner state change:" << runnerStateName(from) << ">" << runnerStateName(to);
}
static void logToolsStateChange(SquishTools::State from, SquishTools::State to)
{
qCInfo(LOG) << "State change:" << toolsStateName(from) << ">" << toolsStateName(to);
}
class SquishLocationMark : public TextEditor::TextMark
{
public:
@@ -327,19 +332,28 @@ void SquishTools::onServerStateChanged(SquishProcessState state)
{
switch (state) {
case Starting:
setState(SquishTools::ServerStarting);
logToolsStateChange(m_state, SquishTools::ServerStarting);
m_state = SquishTools::ServerStarting;
break;
case Started:
setState(SquishTools::ServerStarted);
logToolsStateChange(m_state, SquishTools::ServerStarted);
m_state = SquishTools::ServerStarted;
onServerStarted();
break;
case StartFailed:
setState(SquishTools::ServerStartFailed);
logToolsStateChange(m_state, SquishTools::ServerStartFailed);
m_state = SquishTools::ServerStartFailed;
onServerStartFailed();
break;
case Stopped:
setState(SquishTools::ServerStopped);
logToolsStateChange(m_state, SquishTools::ServerStopped);
m_state = SquishTools::ServerStopped;
onServerStopped();
break;
case StopFailed:
setState(SquishTools::ServerStopFailed);
logToolsStateChange(m_state, SquishTools::ServerStopFailed);
m_state = SquishTools::ServerStopFailed;
onServerStopFailed();
break;
default:
// Idle currently unhandled / not needed?
@@ -347,17 +361,8 @@ void SquishTools::onServerStateChanged(SquishProcessState state)
}
}
void SquishTools::setState(SquishTools::State state)
void SquishTools::onServerStarted()
{
qCInfo(LOG) << "State change:" << toolsStateName(m_state) << ">" << toolsStateName(state);
// TODO check whether state transition is legal
m_state = state;
switch (m_state) {
case Idle:
setIdle();
break;
case ServerStarted:
if (m_request == RunnerQueryRequested) {
executeRunnerQuery();
} else if (m_request == RunTestRequested || m_request == RecordTestRequested) {
@@ -366,24 +371,16 @@ void SquishTools::setState(SquishTools::State state)
} else {
QTC_ASSERT(false, qDebug() << m_state << m_request);
}
break;
case ServerStartFailed:
m_state = Idle;
if (m_request == RunTestRequested)
emit squishTestRunFinished();
m_perspective.setPerspectiveMode(SquishPerspective::NoMode);
m_request = None;
if (toolsSettings.minimizeIDE)
restoreQtCreatorWindows();
m_perspective.destroyControlBar();
break;
case ServerStopped:
}
void SquishTools::onServerStopped()
{
m_state = Idle;
emit shutdownFinished();
if (m_request == ServerConfigChangeRequested) {
if (m_serverProcess.result() == ProcessResult::FinishedWithError) {
emit configChangesFailed(m_serverProcess.error());
break;
return;
}
m_serverConfigChanges.removeFirst();
@@ -407,15 +404,40 @@ void SquishTools::setState(SquishTools::State state)
} else if (m_request == KillOldBeforeRecordRunner) {
startSquishServer(RecordTestRequested);
} else {
QTC_ASSERT(false, qDebug() << m_state << m_request);
QTC_ASSERT(false, qDebug() << m_request);
}
break;
case ServerStopFailed:
}
void SquishTools::onServerStartFailed()
{
m_state = Idle;
if (m_request == RunTestRequested)
emit squishTestRunFinished();
m_perspective.setPerspectiveMode(SquishPerspective::NoMode);
m_request = None;
if (toolsSettings.minimizeIDE)
restoreQtCreatorWindows();
m_perspective.destroyControlBar();
}
void SquishTools::onServerStopFailed()
{
m_serverProcess.closeProcess();
if (toolsSettings.minimizeIDE)
restoreQtCreatorWindows();
m_perspective.destroyControlBar();
m_state = Idle;
}
void SquishTools::setState(SquishTools::State state)
{
qCInfo(LOG) << "State change:" << toolsStateName(m_state) << ">" << toolsStateName(state);
// TODO check whether state transition is legal
m_state = state;
switch (m_state) {
case Idle:
setIdle();
break;
case RunnerStartFailed:
case RunnerStopped:
@@ -1291,7 +1313,7 @@ bool SquishTools::isValidToStartRunner()
.arg(m_state)
.arg(m_request));
// setting state to ServerStartFailed will terminate/kill the current unusable server
setState(ServerStartFailed);
onServerStateChanged(StartFailed);
return false;
}

View File

@@ -90,6 +90,10 @@ private:
enum RunnerQuery { ServerInfo, GetGlobalScriptDirs, SetGlobalScriptDirs };
void onServerStateChanged(SquishProcessState state);
void onServerStarted();
void onServerStopped();
void onServerStartFailed();
void onServerStopFailed();
void setState(State state);
void setIdle();
void startSquishServer(Request request);