Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PhpUnit ...Killed Why is it being killed?

Tags:

php

phpunit

My phpunit.xml

<phpunit
  bootstrap="bootstrap.php"
  backupGlobals="false"
  colors="true"
  convertErrorsToExceptions="true"
  convertNoticesToExceptions="true"
  convertWarningsToExceptions="true"
  >
  <testsuites>
    <testsuite>
      <directory suffix="Test.php">./tests</directory>
    </testsuite>
  </testsuites>

  <logging>
    <log type="coverage-html" target="coverage" lowUpperBound="75" highUpperBound="100" />
  </logging>
</phpunit>

My bootstrap.php:

<?php

/** ---------------------------------------------------- **/
// Require the vendors autoload file.
/** ---------------------------------------------------- **/
require_once 'vendor/autoload.php';

/** ---------------------------------------------------- **/
// We neeed WordPress Bootstrap files for its test.
/** ---------------------------------------------------- **/
define('WP_TEST_DIR', parse_ini_file('test-config.ini')['test-location']);

// Include the bootstrap file.
require_once WP_TEST_DIR . 'includes/bootstrap.php';

// Include the Functions file
require_once WP_TEST_DIR . 'includes/functions.php';

When I run this with the logging section uncommented, I get:

vagrant@vagrant-ubuntu-trusty-64:/vagrant/Freya/Routes$ phpunit
Installing...
Running as single site... To run multisite, use -c tests/phpunit/multisite.xml
Not running ajax tests. To execute these, use --group ajax.
Not running ms-files tests. To execute these, use --group ms-files.
Not running external-http tests. To execute these, use --group external-http.
PHPUnit 4.6.6 by Sebastian Bergmann and contributors.

Configuration read from /vagrant/Freya/Routes/phpunit.xml

...............Killed

When I comment out logging I get:

vagrant@vagrant-ubuntu-trusty-64:/vagrant/Freya/Routes$ phpunit
Installing...
Running as single site... To run multisite, use -c tests/phpunit/multisite.xml
Not running ajax tests. To execute these, use --group ajax.
Not running ms-files tests. To execute these, use --group ms-files.
Not running external-http tests. To execute these, use --group external-http.
PHPUnit 4.6.6 by Sebastian Bergmann and contributors.

Configuration read from /vagrant/Freya/Routes/phpunit.xml

..................................

Time: 9.64 seconds, Memory: 45.50Mb

OK (34 tests, 38 assertions)

Why does it die with no visible errors? is it a memory issue? If so why not say that? These set of tests do include the WordPress test suite class WP_UnitTestCase to allow me to set up a fake Wordpress install for some of the tests But as you can see the second time I ran the tests with the logging commented out I get 45.50mb memory used. Thats nothing.

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = On
display_startup_errors = Off

Php version is 5.5.9

What is going on? (Yes the coverage folder exists)

Update 1

Turns out that the dmesg is showing:

[942618.313174] Out of memory: Kill process 12987 (php) score 384 or sacrifice child
[942618.315188] Killed process 12987 (php) total-vm:453360kB, anon-rss:192380kB, file-rss:12kB
[942757.404416] php5-fpm invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
[942757.404421] php5-fpm cpuset=/ mems_allowed=0
[942757.404424] CPU: 0 PID: 16427 Comm: php5-fpm Tainted: G           OX 3.13.0-37-generic #64-Ubuntu
[942757.404426] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[942757.404428]  0000000000000000 ffff88000200d980 ffffffff8171ed09 ffff88001dfbb000
[942757.404431]  ffff88000200da08 ffffffff817195c4 0000000000000000 0000000000000000
[942757.404432]  0000000000000000 0000000000000000 0000000000000000 0000000000000000

Would I need to increase the memory of PHP in this case?

like image 241
TheWebs Avatar asked Oct 20 '22 10:10

TheWebs


1 Answers

I have found the best (only?) way to diagnose fatal errors in PHPUnit is to add an shutdown error trap to the bootstrap. PHPUnit traps errors itself to help with reporting, but for some reason this prevents some core/fatal type errors from being reported at all.

I add this into all my projects:

phpunit.xml:

< phpunit
    bootstrap="bootstrap.php"
...

bootstrap.php:

// PHPUnit dies silently with FATAL ERRORS which makes it hard to debug the tests.
register_shutdown_function('PHPUnit_shutdownFunction');
function PHPUnit_shutdownFunction() {
    // http://www.php.net/manual/en/errorfunc.constants.php
    $error = error_get_last();
    if (!is_null($error)){
        if($error['type'] & (E_ERROR + E_PARSE + E_CORE_ERROR + E_COMPILE_ERROR + E_USER_ERROR + E_RECOVERABLE_ERROR)){
            echo 'Test Bootstrap: Caught untrapped fatal error: ';
            var_export($error);
        }
    }
}

And these mysterious problems with be a thing of the past.

like image 173
scipilot Avatar answered Nov 03 '22 05:11

scipilot