]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/OStatus/tests/remote-tests.php
Merge remote-tracking branch 'upstream/master' into social-master
[quix0rs-gnu-social.git] / plugins / OStatus / tests / remote-tests.php
index c2c9a5d97b5c05276a58e263590c74b42dc4718f..1dce588dfe70d3c69888636983dc8bb5d294a131 100644 (file)
@@ -4,6 +4,8 @@ if (php_sapi_name() != 'cli') {
     die('not for web');
 }
 
+define('HTTP_TIMEOUT', 60); // ssslllloowwwww salmon if queues are off
+
 define('INSTALLDIR', dirname(dirname(dirname(dirname(__FILE__)))));
 set_include_path(INSTALLDIR . '/extlib' . PATH_SEPARATOR . get_include_path());
 
@@ -61,14 +63,17 @@ class OStatusTester extends TestBase
     /**
      * @param string $a base URL of test site A (eg http://localhost/mublog)
      * @param string $b base URL of test site B (eg http://localhost/mublog2)
+     * @param int $timeout HTTP timeout value (needs to be long if Salmon is slow)
      */
-    function __construct($a, $b) {
+    function __construct($a, $b, $timeout=60) {
         $this->a = $a;
         $this->b = $b;
 
         $base = 'test' . mt_rand(1, 1000000);
-        $this->pub = new SNTestClient($this->a, 'pub' . $base, 'pw-' . mt_rand(1, 1000000));
-        $this->sub = new SNTestClient($this->b, 'sub' . $base, 'pw-' . mt_rand(1, 1000000));
+        $this->pub = new SNTestClient($this->a, 'pub' . $base, 'pw-' . mt_rand(1, 1000000), $timeout);
+        $this->sub = new SNTestClient($this->b, 'sub' . $base, 'pw-' . mt_rand(1, 1000000), $timeout);
+
+        $this->group = 'group' . $base;
     }
 
     function run()
@@ -160,15 +165,49 @@ class OStatusTester extends TestBase
         $this->assertFalse($this->pub->hasSubscriber($this->sub->getProfileUri()));
     }
 
+    function testCreateGroup()
+    {
+        $this->groupUrl = $this->pub->createGroup($this->group);
+        $this->assertTrue(!empty($this->groupUrl));
+    }
+
+    function testJoinGroup()
+    {
+        #$this->assertFalse($this->sub->inGroup($this->groupUrl));
+        $this->sub->joinGroup($this->groupUrl);
+        #$this->assertTrue($this->sub->inGroup($this->groupUrl));
+    }
+
+    function testLocalGroupPost()
+    {
+        $post = $this->pub->post("Group post from local to !{$this->group}, should go out over push.");
+        $this->assertNotEqual('', $post);
+        $this->sub->assertReceived($post);
+    }
+
+    function testRemoteGroupPost()
+    {
+        $post = $this->sub->post("Group post from remote to !{$this->group}, should come in over salmon.");
+        $this->assertNotEqual('', $post);
+        $this->pub->assertReceived($post);
+    }
+
+    function testLeaveGroup()
+    {
+        #$this->assertTrue($this->sub->inGroup($this->groupUrl));
+        $this->sub->leaveGroup($this->groupUrl);
+        #$this->assertFalse($this->sub->inGroup($this->groupUrl));
+    }
 }
 
 class SNTestClient extends TestBase
 {
-    function __construct($base, $username, $password)
+    function __construct($base, $username, $password, $timeout=60)
     {
         $this->basepath = $base;
         $this->username = $username;
         $this->password = $password;
+        $this->timeout = $timeout;
 
         $this->fullname = ucfirst($username) . ' Smith';
         $this->homepage = 'http://example.org/' . $username;
@@ -188,7 +227,7 @@ class SNTestClient extends TestBase
     {
         $url = $this->basepath . '/' . $path;
 
-        $http = new HTTP_Request2($url, 'POST');
+        $http = new HTTP_Request2($url, 'POST', array('timeout' => $this->timeout));
         if ($auth) {
             $http->setAuth($this->username, $this->password, HTTP_Request2::AUTH_BASIC);
         }
@@ -215,7 +254,7 @@ class SNTestClient extends TestBase
     protected function web($path, $form, $params=array())
     {
         $url = $this->basepath . '/' . $path;
-        $http = new HTTP_Request2($url, 'GET');
+        $http = new HTTP_Request2($url, 'GET', array('timeout' => $this->timeout));
         $response = $http->send();
 
         $dom = $this->checkWeb($url, 'GET', $response);
@@ -530,12 +569,88 @@ class SNTestClient extends TestBase
         return false;
     }
 
+    /**
+     * Create a group on this site.
+     *
+     * @param string $nickname
+     * @param array $options
+     * @return string: profile URL for the group
+     */
+    function createGroup($nickname, $options=array()) {
+        $this->log("Creating group as %s on %s: %s",
+                   $this->username,
+                   $this->basepath,
+                   $nickname);
+
+        $data = $this->api('statusnet/groups/create', 'json',
+            array_merge(array('nickname' => $nickname), $options));
+        $url = $data['url'];
+
+        if ($url) {
+            $this->log('  created as %s', $url);
+        } else {
+            $this->log('  failed? %s', var_export($data, true));
+        }
+        return $url;
+    }
+
+    function groupInfo($nickname) {
+        $data = $this->api('statusnet/groups/show', 'json', array(
+            'id' => $nickname
+        ));
+    }
+
+    /**
+     * Join a group.
+     *
+     * @param string $group nickname or URL
+     */
+    function joinGroup($group) {
+        $this->post('join ' . $group);
+    }
+
+    /**
+     * Leave a group.
+     *
+     * @param string $group nickname or URL
+     */
+    function leaveGroup($group) {
+        $this->post('drop ' . $group);
+    }
+
+    /**
+     *
+     * @param string $nickname
+     * @return
+     */
+    function inGroup($nickname) {
+        // @todo
+    }
 }
 
-$args = array_slice($_SERVER['argv'], 1);
+// @fixme switch to commandline.inc?
+$timeout = HTTP_TIMEOUT;
+
+$args = array();
+$options = array();
+foreach (array_slice($_SERVER['argv'], 1) as $arg) {
+    if (substr($arg, 0, 2) == '--') {
+        $bits = explode('=', substr($arg, 2), 2);
+        if (count($bits == 2)) {
+            list($key, $val) = $bits;
+            $options[$key] = $val;
+        } else {
+            list($key) = $bits;
+            $options[$key] = true;
+        }
+    } else {
+        $args[] = $arg;
+    }
+}
 if (count($args) < 2) {
     print <<<END_HELP
-remote-tests.php <url1> <url2>
+remote-tests.php [options] <url1> <url2>
+  --timeout=## change HTTP timeout from default {$timeout}s
   url1: base URL of a StatusNet instance
   url2: base URL of another StatusNet instance
 
@@ -549,6 +664,9 @@ exit(1);
 
 $a = $args[0];
 $b = $args[1];
+if (isset($options['timeout'])) {
+    $timeout = intval($options['timeout']);
+}
 
-$tester = new OStatusTester($a, $b);
+$tester = new OStatusTester($a, $b, $timeout);
 $tester->run();