MDL-40207 simplepie: reduce false failures in unit tests
authorDan Poltawski <dan@moodle.com>
Mon, 17 Jun 2013 02:23:44 +0000 (10:23 +0800)
committerDan Poltawski <dan@moodle.com>
Mon, 17 Jun 2013 02:32:25 +0000 (10:32 +0800)
The simplepie tests time out too quickly due to a low connect timeout,
to fix this:

* Introduced a way to set the timeout during intitial construction
* Converted the unit tests to use a high timeout value

lib/simplepie/moodle_simplepie.php
lib/tests/rsslib_test.php

index 6738d29..31c5025 100644 (file)
@@ -52,8 +52,9 @@ class moodle_simplepie extends SimplePie {
      * with Moodle defaults.
      *
      * @param string $feedurl optional URL of the feed
+     * @param int $timeout how many seconds requests should wait for server response
      */
-    public function __construct($feedurl = null) {
+    public function __construct($feedurl = null, $timeout = 2) {
         $cachedir = moodle_simplepie::get_cache_directory();
         check_dir_exists($cachedir);
 
@@ -70,7 +71,7 @@ class moodle_simplepie extends SimplePie {
         $this->set_output_encoding('UTF-8');
 
         // default to a short timeout as most operations will be interactive
-        $this->set_timeout(2);
+        $this->set_timeout($timeout);
 
         // 1 hour default cache
         $this->set_cache_location($cachedir);
index e54c71c..f1ff35f 100644 (file)
@@ -37,19 +37,21 @@ require_once($CFG->libdir.'/simplepie/moodle_simplepie.php');
 
 class moodlesimplepie_testcase extends basic_testcase {
 
-    # A url we know exists and is valid
+    // A url we know exists and is valid.
     const VALIDURL = 'http://download.moodle.org/unittest/rsstest.xml';
-    # A url which we know doesn't exist
+    // A url which we know doesn't exist.
     const INVALIDURL = 'http://download.moodle.org/unittest/rsstest-which-doesnt-exist.xml';
-    # This tinyurl redirects to th rsstest.xml file
+    // This tinyurl redirects to th rsstest.xml file.
     const REDIRECTURL = 'http://tinyurl.com/lvyslv';
+    // The number of seconds tests should wait for the server to respond (high to prevent false positives).
+    const TIMEOUT = 10;
 
     function setUp() {
         moodle_simplepie::reset_cache();
     }
 
     function test_getfeed() {
-        $feed = new moodle_simplepie(self::VALIDURL);
+        $feed = new moodle_simplepie(self::VALIDURL, self::TIMEOUT);
 
         $this->assertInstanceOf('moodle_simplepie', $feed);
 
@@ -109,7 +111,7 @@ EOD;
      * Test retrieving a url which doesn't exist
      */
     function test_failurl() {
-        $feed = @new moodle_simplepie(self::INVALIDURL); // we do not want this in php error log
+        $feed = @new moodle_simplepie(self::INVALIDURL, self::TIMEOUT); // we do not want this in php error log
 
         $this->assertNotEmpty($feed->error());
     }
@@ -136,7 +138,7 @@ EOD;
     function test_redirect() {
         global $CFG;
 
-        $feed = new moodle_simplepie(self::REDIRECTURL);
+        $feed = new moodle_simplepie(self::REDIRECTURL, self::TIMEOUT);
 
         $this->assertNull($feed->error());
         $this->assertEquals($feed->get_title(), 'Moodle News');