[Wikitech-l] New phpunit tests eat ~1GB of memory

2010-02-05 Thread Ævar Arnfjörð Bjarmason
Since the tests were ported from t/ to phpunit's
phase3/maintenance/tests/ in r61938 and other commits running the
tests on my machine takes up to 1GB of memory and grows as it runs
more tests. It seems that phpunit uses the same instance of the php
interpreter for running all the tests.

Is there some way around this? Perhaps phpunit.xml could be tweaked so
that it runs a new php for each test?

Furthermore when I run `make test' I get this:

Time: 03:35, Memory: 1849.25Mb

There were 2 failures:

1) LanguageConverterTest::testGetPreferredVariantUserOption
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-tg-latn
+tg


/home/avar/src/mw/trunk/phase3/maintenance/tests/LanguageConverterTest.php:82

2) Warning
No tests found in class "ParserUnitTest".

FAILURES!
Tests: 686, Assertions: 3431, Failures: 2, Incomplete: 34

But when I run phpunit manually on the test then all tests pass:

$ phpunit LanguageConverterTest.php
PHPUnit 3.4.5 by Sebastian Bergmann.

.

Time: 23 seconds, Memory: 23.75Mb

OK (9 tests, 34 assertions)

Also after I get "Tests: 686, Assertions: 3431, Failures: 2,
Incomplete: 34" in the first output phpunit doesn't exit and continues
hugging my memory. Why is it still running? It has already run all the
tests.

On Wed, Feb 3, 2010 at 17:35,   wrote:
> http://www.mediawiki.org/wiki/Special:Code/MediaWiki/61938
>
> Revision: 61938
> Author:   ialex
> Date:     2010-02-03 17:35:59 + (Wed, 03 Feb 2010)
>
> Log Message:
> ---
> * Port tests from t/inc/
> * Added new tests to XmlTest
>
> Added Paths:
> ---
>    trunk/phase3/tests/LicensesTest.php
>    trunk/phase3/tests/SanitizerTest.php
>    trunk/phase3/tests/TimeAdjustTest.php
>    trunk/phase3/tests/TitleTest.php
>    trunk/phase3/tests/XmlTest.php
>
> Added: trunk/phase3/tests/LicensesTest.php
> ===
> --- trunk/phase3/tests/LicensesTest.php                         (rev 0)
> +++ trunk/phase3/tests/LicensesTest.php 2010-02-03 17:35:59 UTC (rev 61938)
> @@ -0,0 +1,17 @@
> + +
> +/**
> + * @group Broken
> + */
> +class LicensesTest extends PHPUnit_Framework_TestCase {
> +
> +       function testLicenses() {
> +               $str = "
> +* Free licenses:
> +** GFLD|Debian disagrees
> +";
> +
> +               $lc = new Licenses( $str );
> +               $this->assertTrue( is_a( $lc, 'Licenses' ), 'Correct class' );
> +       }
> +}
> \ No newline at end of file
>
>
> Property changes on: trunk/phase3/tests/LicensesTest.php
> ___
> Added: svn:eol-style
>   + native
>
> Added: trunk/phase3/tests/SanitizerTest.php
> ===
> --- trunk/phase3/tests/SanitizerTest.php                                (rev 
> 0)
> +++ trunk/phase3/tests/SanitizerTest.php        2010-02-03 17:35:59 UTC (rev 
> 61938)
> @@ -0,0 +1,71 @@
> + +
> +global $IP;
> +require_once( "$IP/includes/Sanitizer.php" );
> +
> +class SanitizerTest extends PHPUnit_Framework_TestCase {
> +
> +       function testDecodeNamedEntities() {
> +               $this->assertEquals(
> +                       "\xc3\xa9cole",
> +                       Sanitizer::decodeCharReferences( 'école' ),
> +                       'decode named entities'
> +               );
> +       }
> +
> +       function testDecodeNumericEntities() {
> +               $this->assertEquals(
> +                       "\xc4\x88io bonas dans l'\xc3\xa9cole!",
> +                       Sanitizer::decodeCharReferences( "Ĉio bonas 
> dans l'école!" ),
> +                       'decode numeric entities'
> +               );
> +       }
> +
> +       function testDecodeMixedEntities() {
> +               $this->assertEquals(
> +                       "\xc4\x88io bonas dans l'\xc3\xa9cole!",
> +                       Sanitizer::decodeCharReferences( "Ĉio bonas 
> dans l'école!" ),
> +                       'decode mixed numeric/named entities'
> +               );
> +       }
> +
> +       function testDecodeMixedComplexEntities() {
> +               $this->assertEquals(
> +                       "\xc4\x88io bonas dans l'\xc3\xa9cole! (mais pas 
> Ĉio dans l'école)",
> +                       Sanitizer::decodeCharReferences(
> +                               "Ĉio bonas dans l'école! (mais 
> pas Ĉio dans l'école)"
> +                       ),
> +                       'decode mixed complex entities'
> +               );
> +       }
> +
> +       function testInvalidAmpersand() {
> +               $this->assertEquals(
> +                       'a & b',
> +                       Sanitizer::decodeCharReferences( 'a & b' ),
> +                       'Invalid ampersand'
> +               );
> +       }
> +
> +       function testInvalidEntities() {
> +               $this->assertEquals(
> +                       

Re: [Wikitech-l] New phpunit tests eat ~1GB of memory

2010-02-05 Thread Jared Williams

A guess would be to try PHP 5.3, and enable the garbage collector.

http://www.php.net/manual/en/function.gc-enable.php 

Jared

> -Original Message-
> From: wikitech-l-boun...@lists.wikimedia.org 
> [mailto:wikitech-l-boun...@lists.wikimedia.org] On Behalf Of 
> Ævar Arnfjörð Bjarmason
> Sent: 06 February 2010 01:05
> To: wikitech-l@lists.wikimedia.org
> Cc: mediawiki-...@lists.wikimedia.org
> Subject: [Wikitech-l] New phpunit tests eat ~1GB of memory
> 
> Since the tests were ported from t/ to phpunit's 
> phase3/maintenance/tests/ in r61938 and other commits running 
> the tests on my machine takes up to 1GB of memory and grows 
> as it runs more tests. It seems that phpunit uses the same 
> instance of the php interpreter for running all the tests.
> 
> Is there some way around this? Perhaps phpunit.xml could be 
> tweaked so that it runs a new php for each test?
> 
> Furthermore when I run `make test' I get this:
> 
> Time: 03:35, Memory: 1849.25Mb
> 
> There were 2 failures:
> 
> 1) LanguageConverterTest::testGetPreferredVariantUserOption
> Failed asserting that two strings are equal.
> --- Expected
> +++ Actual
> @@ @@
> -tg-latn
> +tg
> 
> 
> /home/avar/src/mw/trunk/phase3/maintenance/tests/LanguageConve
> rterTest.php:82
> 
> 2) Warning
> No tests found in class "ParserUnitTest".
> 
> FAILURES!
> Tests: 686, Assertions: 3431, Failures: 2, Incomplete: 34
> 
> But when I run phpunit manually on the test then all tests pass:
> 
> $ phpunit LanguageConverterTest.php
> PHPUnit 3.4.5 by Sebastian Bergmann.
> 
> .
> 
> Time: 23 seconds, Memory: 23.75Mb
> 
> OK (9 tests, 34 assertions)
> 
> Also after I get "Tests: 686, Assertions: 3431, Failures: 2,
> Incomplete: 34" in the first output phpunit doesn't exit and 
> continues hugging my memory. Why is it still running? It has 
> already run all the tests.
> 
> On Wed, Feb 3, 2010 at 17:35,   wrote:
> > http://www.mediawiki.org/wiki/Special:Code/MediaWiki/61938
> >
> > Revision: 61938
> > Author:   ialex
> > Date:     2010-02-03 17:35:59 + (Wed, 03 Feb 2010)
> >
> > Log Message:
> > ---
> > * Port tests from t/inc/
> > * Added new tests to XmlTest
> >
> > Added Paths:
> > ---
> >    trunk/phase3/tests/LicensesTest.php
> >    trunk/phase3/tests/SanitizerTest.php
> >    trunk/phase3/tests/TimeAdjustTest.php
> >    trunk/phase3/tests/TitleTest.php
> >    trunk/phase3/tests/XmlTest.php
> >
> > Added: trunk/phase3/tests/LicensesTest.php
> >
===
> > --- trunk/phase3/tests/LicensesTest.php                     
>     (rev 
> > 0)
> > +++ trunk/phase3/tests/LicensesTest.php 2010-02-03 17:35:59 
> UTC (rev 
> > +++ 61938)
> > @@ -0,0 +1,17 @@
> > + > +
> > +/**
> > + * @group Broken
> > + */
> > +class LicensesTest extends PHPUnit_Framework_TestCase {
> > +
> > +       function testLicenses() {
> > +               $str = "
> > +* Free licenses:
> > +** GFLD|Debian disagrees
> > +";
> > +
> > +               $lc = new Licenses( $str );
> > +               $this->assertTrue( is_a( $lc, 'Licenses' ), 
> 'Correct 
> > +class' );
> > +       }
> > +}
> > \ No newline at end of file
> >
> >
> > Property changes on: trunk/phase3/tests/LicensesTest.php
> >
___
> > Added: svn:eol-style
> >   + native
> >
> > Added: trunk/phase3/tests/SanitizerTest.php
> >
===
> > --- trunk/phase3/tests/SanitizerTest.php                    
>             
> > (rev 0)
> > +++ trunk/phase3/tests/SanitizerTest.php        2010-02-03
17:35:59 
> > +++ UTC (rev 61938)
> > @@ -0,0 +1,71 @@
> > + > +
> > +global $IP;
> > +require_once( "$IP/includes/Sanitizer.php" );
> > +
> > +class SanitizerTest extends PHPUnit_Framework_TestCase {
> > +
> > +       function testDecodeNamedEntities() {
> > +               $this->assertEquals(
> > +                       "\xc3\xa9cole",
> > +                       Sanitizer::decodeCharReferences( 
> > + 'école' ),
> > +                       'decode named entities'
> > +               );
> > +       }
> > +
> > +       function 

Re: [Wikitech-l] New phpunit tests eat ~1GB of memory

2010-02-06 Thread Tei
off-topic-ish

theres also a function to explicit call the collector (sorry, I forgot the name)

it seems php only flag things for collecting  (wen you unset($stuff)
), but never really collect then. The documentation says that the
collector will run wen theres not work to do, but this seems a very
rare event (maybe is never triggered).

hu,,

On 6 February 2010 03:37, Jared Williams  wrote:
>
> A guess would be to try PHP 5.3, and enable the garbage collector.
>
> http://www.php.net/manual/en/function.gc-enable.php
>
> Jared
>
>> -Original Message-
>> From: wikitech-l-boun...@lists.wikimedia.org
>> [mailto:wikitech-l-boun...@lists.wikimedia.org] On Behalf Of
>> Ævar Arnfjörð Bjarmason
>> Sent: 06 February 2010 01:05
>> To: wikitech-l@lists.wikimedia.org
>> Cc: mediawiki-...@lists.wikimedia.org
>> Subject: [Wikitech-l] New phpunit tests eat ~1GB of memory
>>
>> Since the tests were ported from t/ to phpunit's
>> phase3/maintenance/tests/ in r61938 and other commits running
>> the tests on my machine takes up to 1GB of memory and grows
>> as it runs more tests. It seems that phpunit uses the same
>> instance of the php interpreter for running all the tests.
>>
>> Is there some way around this? Perhaps phpunit.xml could be
>> tweaked so that it runs a new php for each test?
>>
>> Furthermore when I run `make test' I get this:
>>
>>     Time: 03:35, Memory: 1849.25Mb
>>
>>     There were 2 failures:
>>
>>     1) LanguageConverterTest::testGetPreferredVariantUserOption
>>     Failed asserting that two strings are equal.
>>     --- Expected
>>     +++ Actual
>>     @@ @@
>>     -tg-latn
>>     +tg
>>
>>
>> /home/avar/src/mw/trunk/phase3/maintenance/tests/LanguageConve
>> rterTest.php:82
>>
>>     2) Warning
>>     No tests found in class "ParserUnitTest".
>>
>>     FAILURES!
>>     Tests: 686, Assertions: 3431, Failures: 2, Incomplete: 34
>>
>> But when I run phpunit manually on the test then all tests pass:
>>
>>     $ phpunit LanguageConverterTest.php
>>     PHPUnit 3.4.5 by Sebastian Bergmann.
>>
>>     .
>>
>>     Time: 23 seconds, Memory: 23.75Mb
>>
>>     OK (9 tests, 34 assertions)
>>
>> Also after I get "Tests: 686, Assertions: 3431, Failures: 2,
>> Incomplete: 34" in the first output phpunit doesn't exit and
>> continues hugging my memory. Why is it still running? It has
>> already run all the tests.
>>
>> On Wed, Feb 3, 2010 at 17:35,   wrote:
>> > http://www.mediawiki.org/wiki/Special:Code/MediaWiki/61938
>> >
>> > Revision: 61938
>> > Author:   ialex
>> > Date:     2010-02-03 17:35:59 + (Wed, 03 Feb 2010)
>> >
>> > Log Message:
>> > ---
>> > * Port tests from t/inc/
>> > * Added new tests to XmlTest
>> >
>> > Added Paths:
>> > ---
>> >    trunk/phase3/tests/LicensesTest.php
>> >    trunk/phase3/tests/SanitizerTest.php
>> >    trunk/phase3/tests/TimeAdjustTest.php
>> >    trunk/phase3/tests/TitleTest.php
>> >    trunk/phase3/tests/XmlTest.php
>> >
>> > Added: trunk/phase3/tests/LicensesTest.php
>> >
> ===
>> > --- trunk/phase3/tests/LicensesTest.php
>>     (rev
>> > 0)
>> > +++ trunk/phase3/tests/LicensesTest.php 2010-02-03 17:35:59
>> UTC (rev
>> > +++ 61938)
>> > @@ -0,0 +1,17 @@
>> > +> > +
>> > +/**
>> > + * @group Broken
>> > + */
>> > +class LicensesTest extends PHPUnit_Framework_TestCase {
>> > +
>> > +       function testLicenses() {
>> > +               $str = "
>> > +* Free licenses:
>> > +** GFLD|Debian disagrees
>> > +";
>> > +
>> > +               $lc = new Licenses( $str );
>> > +               $this->assertTrue( is_a( $lc, 'Licenses' ),
>> 'Correct
>> > +class' );
>> > +       }
>> > +}
>> > \ No newline at end of file
>> >
>> >
>> > Property changes on: trunk/phase3/tests/LicensesTest.php
>> >
> ___
>> > Added: svn:eol-style
>> >   + native
>> >
>> > Added: trunk/phase3/tests/SanitizerTest.php
>> >
> ===
>> > 

Re: [Wikitech-l] New phpunit tests eat ~1GB of memory

2010-02-06 Thread Ævar Arnfjörð Bjarmason
On Sat, Feb 6, 2010 at 01:04, Ævar Arnfjörð Bjarmason  wrote:
> Since the tests were ported from t/ to phpunit's
> phase3/maintenance/tests/ in r61938 and other commits running the
> tests on my machine takes up to 1GB of memory and grows as it runs
> more tests. It seems that phpunit uses the same instance of the php
> interpreter for running all the tests.
>
> Is there some way around this? Perhaps phpunit.xml could be tweaked so
> that it runs a new php for each test?
>
> Furthermore when I run `make test' I get this:
>
>    Time: 03:35, Memory: 1849.25Mb
>
>    There were 2 failures:
>
>    1) LanguageConverterTest::testGetPreferredVariantUserOption
>    Failed asserting that two strings are equal.
>    --- Expected
>    +++ Actual
>    @@ @@
>    -tg-latn
>    +tg
>
>    
> /home/avar/src/mw/trunk/phase3/maintenance/tests/LanguageConverterTest.php:82
>
>    2) Warning
>    No tests found in class "ParserUnitTest".
>
>    FAILURES!
>    Tests: 686, Assertions: 3431, Failures: 2, Incomplete: 34
>
> But when I run phpunit manually on the test then all tests pass:
>
>    $ phpunit LanguageConverterTest.php
>    PHPUnit 3.4.5 by Sebastian Bergmann.
>
>    .
>
>    Time: 23 seconds, Memory: 23.75Mb
>
>    OK (9 tests, 34 assertions)
>
> Also after I get "Tests: 686, Assertions: 3431, Failures: 2,
> Incomplete: 34" in the first output phpunit doesn't exit and continues
> hugging my memory. Why is it still running? It has already run all the
> tests.

I've worked around this by adding a 'make tap' target which runs the
phpunit tests individually with Test::Harness. I made it the default
target due to the problems with running all the tests at once with
phpunit:

http://www.mediawiki.org/wiki/Special:Code/MediaWiki/62071
http://www.mediawiki.org/wiki/Special:Code/MediaWiki/62072

Does something run these tests or the parsertests automatically? It
would be really neat to test all svn revisions of MediaWiki and report
the results on Special:Code. I think I read somewhere that something
runs the parsertests automatically.

___
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Re: [Wikitech-l] New phpunit tests eat ~1GB of memory

2010-02-06 Thread Chad
On Sat, Feb 6, 2010 at 11:24 AM, Ævar Arnfjörð Bjarmason
 wrote:
> On Sat, Feb 6, 2010 at 01:04, Ævar Arnfjörð Bjarmason  
> wrote:
>> Since the tests were ported from t/ to phpunit's
>> phase3/maintenance/tests/ in r61938 and other commits running the
>> tests on my machine takes up to 1GB of memory and grows as it runs
>> more tests. It seems that phpunit uses the same instance of the php
>> interpreter for running all the tests.
>>
>> Is there some way around this? Perhaps phpunit.xml could be tweaked so
>> that it runs a new php for each test?
>>
>> Furthermore when I run `make test' I get this:
>>
>>    Time: 03:35, Memory: 1849.25Mb
>>
>>    There were 2 failures:
>>
>>    1) LanguageConverterTest::testGetPreferredVariantUserOption
>>    Failed asserting that two strings are equal.
>>    --- Expected
>>    +++ Actual
>>    @@ @@
>>    -tg-latn
>>    +tg
>>
>>    
>> /home/avar/src/mw/trunk/phase3/maintenance/tests/LanguageConverterTest.php:82
>>
>>    2) Warning
>>    No tests found in class "ParserUnitTest".
>>
>>    FAILURES!
>>    Tests: 686, Assertions: 3431, Failures: 2, Incomplete: 34
>>
>> But when I run phpunit manually on the test then all tests pass:
>>
>>    $ phpunit LanguageConverterTest.php
>>    PHPUnit 3.4.5 by Sebastian Bergmann.
>>
>>    .
>>
>>    Time: 23 seconds, Memory: 23.75Mb
>>
>>    OK (9 tests, 34 assertions)
>>
>> Also after I get "Tests: 686, Assertions: 3431, Failures: 2,
>> Incomplete: 34" in the first output phpunit doesn't exit and continues
>> hugging my memory. Why is it still running? It has already run all the
>> tests.
>
> I've worked around this by adding a 'make tap' target which runs the
> phpunit tests individually with Test::Harness. I made it the default
> target due to the problems with running all the tests at once with
> phpunit:
>
>    http://www.mediawiki.org/wiki/Special:Code/MediaWiki/62071
>    http://www.mediawiki.org/wiki/Special:Code/MediaWiki/62072
>
> Does something run these tests or the parsertests automatically? It
> would be really neat to test all svn revisions of MediaWiki and report
> the results on Special:Code. I think I read somewhere that something
> runs the parsertests automatically.
>
> ___
> Wikitech-l mailing list
> Wikitech-l@lists.wikimedia.org
> https://lists.wikimedia.org/mailman/listinfo/wikitech-l

It's supposed to be running the parser tests and uploading them on
commit, but that's been broken for a little while now. If we're got a
nice standard output from the tests (I think the XML is pretty suited
for this), we should be able to upload that result to Code Review.

-Chad

___
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Re: [Wikitech-l] New phpunit tests eat ~1GB of memory

2010-02-06 Thread Ævar Arnfjörð Bjarmason
On Sat, Feb 6, 2010 at 16:27, Chad  wrote:
> On Sat, Feb 6, 2010 at 11:24 AM, Ævar Arnfjörð Bjarmason
>  wrote:
>> On Sat, Feb 6, 2010 at 01:04, Ævar Arnfjörð Bjarmason  
>> wrote:
>>> Since the tests were ported from t/ to phpunit's
>>> phase3/maintenance/tests/ in r61938 and other commits running the
>>> tests on my machine takes up to 1GB of memory and grows as it runs
>>> more tests. It seems that phpunit uses the same instance of the php
>>> interpreter for running all the tests.
>>>
>>> Is there some way around this? Perhaps phpunit.xml could be tweaked so
>>> that it runs a new php for each test?
>>>
>>> Furthermore when I run `make test' I get this:
>>>
>>>    Time: 03:35, Memory: 1849.25Mb
>>>
>>>    There were 2 failures:
>>>
>>>    1) LanguageConverterTest::testGetPreferredVariantUserOption
>>>    Failed asserting that two strings are equal.
>>>    --- Expected
>>>    +++ Actual
>>>    @@ @@
>>>    -tg-latn
>>>    +tg
>>>
>>>    
>>> /home/avar/src/mw/trunk/phase3/maintenance/tests/LanguageConverterTest.php:82
>>>
>>>    2) Warning
>>>    No tests found in class "ParserUnitTest".
>>>
>>>    FAILURES!
>>>    Tests: 686, Assertions: 3431, Failures: 2, Incomplete: 34
>>>
>>> But when I run phpunit manually on the test then all tests pass:
>>>
>>>    $ phpunit LanguageConverterTest.php
>>>    PHPUnit 3.4.5 by Sebastian Bergmann.
>>>
>>>    .
>>>
>>>    Time: 23 seconds, Memory: 23.75Mb
>>>
>>>    OK (9 tests, 34 assertions)
>>>
>>> Also after I get "Tests: 686, Assertions: 3431, Failures: 2,
>>> Incomplete: 34" in the first output phpunit doesn't exit and continues
>>> hugging my memory. Why is it still running? It has already run all the
>>> tests.
>>
>> I've worked around this by adding a 'make tap' target which runs the
>> phpunit tests individually with Test::Harness. I made it the default
>> target due to the problems with running all the tests at once with
>> phpunit:
>>
>>    http://www.mediawiki.org/wiki/Special:Code/MediaWiki/62071
>>    http://www.mediawiki.org/wiki/Special:Code/MediaWiki/62072
>>
>> Does something run these tests or the parsertests automatically? It
>> would be really neat to test all svn revisions of MediaWiki and report
>> the results on Special:Code. I think I read somewhere that something
>> runs the parsertests automatically.
>
> It's supposed to be running the parser tests and uploading them on
> commit, but that's been broken for a little while now.

What system is this that's running automatic tests on commits? I was
investigating setting up a buildbot (http://buildbot.net/) which could
have multiple test clients and report tests to IRC/XML which
Special:Code could then use.

What does the now-broken Special:Code test system use?

> If we're got a
> nice standard output from the tests (I think the XML is pretty suited
> for this), we should be able to upload that result to Code Review.

$ prove -j 10 -e 'phpunit --tap' -Q *Test*.php
All tests successful.
Files=20, Tests=692, 31 wallclock secs ( 0.34 usr  0.21 sys +
18443939634.30 cusr 2803481.20 csys = 18446743116.05 CPU)
Result: PASS

You can get pretty HTML like this:

$ prove --formatter TAP::Formatter::HTML -j 10 -e 'phpunit --tap'
-Q *Test*.php > ~/www/mw-tap-out.html

Which gives you something like this:

http://v.nix.is/~avar/mw-tap-out.html

That can be parsed with any XML parser that just has to look for  and  or 

___
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l