diff --git a/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php b/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php index 7d47f07772..83ebbeddd4 100644 --- a/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php +++ b/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php @@ -382,9 +382,11 @@ protected function standUpServer($working_dir = NULL) { $this->stopServer(); } // If there's not a server at this point, make one. - $this->serverProcess = $this->instantiateServer($this->getPortNumber(), $working_dir); - if ($this->serverProcess) { - $this->serverDocroot = $working_dir; + if (!$this->serverProcess || $this->serverProcess->isTerminated()) { + $this->serverProcess = $this->instantiateServer($this->getPortNumber(), $working_dir); + if ($this->serverProcess) { + $this->serverDocroot = $working_dir; + } } } diff --git a/core/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php b/core/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php index 4e00e5ad19..d66085c0c6 100644 --- a/core/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php +++ b/core/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php @@ -136,4 +136,34 @@ public function testPortMany() { } } + /** + * @covers ::standUpServer + */ + public function testStandUpServer() { + // Stand up a server with working directory 'first'. + $this->standUpServer('first'); + + // Get the process object for the server. + $ref_process = new \ReflectionProperty(parent::class, 'serverProcess'); + $ref_process->setAccessible(TRUE); + $first_process = $ref_process->getValue($this); + + // Standing up the server again should not change the server process. + $this->standUpServer('first'); + $this->assertSame($first_process, $ref_process->getValue($this)); + + // Standing up the server with working directory 'second' should give us a + // new server process. + $this->standUpServer('second'); + $this->assertNotSame( + $first_process, + $second_process = $ref_process->getValue($this) + ); + + // And even with the original working directory name, we should get a new + // server process. + $this->standUpServer('first'); + $this->assertNotSame($first_process, $ref_process->getValue($this)); + $this->assertNotSame($second_process, $ref_process->getValue($this)); + } }