Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Unit tests for the XML-RPC web service server.
 *
 * @package    webservice_xmlrpc
 * @category   test
 * @copyright  2016 Andrew Nicols <andrew@nicols.co.uk>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

defined('MOODLE_INTERNAL') || die();

global $CFG;
require_once($CFG->dirroot . '/webservice/xmlrpc/locallib.php');

/**
 * Unit tests for the XML-RPC web service server.
 *
 * @package    webservice_xmlrpc
 * @category   test
 * @copyright  2016 Andrew Nicols <andrew@nicols.co.uk>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
class xmlrpc_server_test extends advanced_testcase {

    /**
     * Setup.
     */
< public function setUp() {
> public function setUp(): void {
if (!function_exists('xmlrpc_decode')) { $this->markTestSkipped('XMLRPC is not installed.'); } } /** * Test parameter parsing. * * @dataProvider parse_request_provider * @param string $input The XML-RPC request * @param string $expectfunction The expected value for the function after decoding the request * @param array $expectparams The expected value for the params after decoding the request */ public function test_parse_request($input, $expectfunction, $expectparams) { $server = $this->getMockBuilder('\webservice_xmlrpc_server')
< ->setMethods(['fetch_input_content'])
> ->onlyMethods(['fetch_input_content'])
->disableOriginalConstructor() ->getMock(); $server->method('fetch_input_content') ->willReturn($input); $rc = new \ReflectionClass('\webservice_xmlrpc_server'); $rcm = $rc->getMethod('parse_request'); $rcm->setAccessible(true); $rcm->invoke($server); $rcp = $rc->getProperty('functionname'); $rcp->setAccessible(true); $this->assertEquals($expectfunction, $rcp->getValue($server)); $rcp = $rc->getProperty('parameters'); $rcp->setAccessible(true); $this->assertEquals($expectparams, $rcp->getValue($server)); } /** * Data provider for testing parse_request. * * @return array */ public function parse_request_provider() { $xml = '<?xml version="1.0" encoding="UTF-8"?>'; // This valid webservice call has one required param ('component'), and one optional param ('lang'). $validmethod = '<methodName>core_get_component_strings</methodName>'; $requiredparams = '<params><param><value><string>moodle</string></value></param></params>'; $allparams = '<params><param><value><string>moodle</string></value></param><param><value><string>en</string></value>' . '</param></params>'; $requiredparamsnonlatin = '<params><param><value><string>ᛞᛁᛞᛃᛟᚢᚲᚾᛟᚹᛈᚺᛈᛋᚢᛈᛈᛟᚱᛏᛋᚢᛏᚠ8ᚡᚨᚱᛁᚨᛒᛚᛖᚾᚨᛗᛖᛋ</string></value></param></params>'; return [ 'Valid method, required params only' => [ "{$xml}<methodCall>{$validmethod}{$requiredparams}</methodCall>", 'core_get_component_strings', ['component' => 'moodle'], ], 'Valid method, all params' => [ "{$xml}<methodCall>{$validmethod}{$allparams}</methodCall>", 'core_get_component_strings', ['component' => 'moodle', 'lang' => 'en'], ], 'Valid method required params only (non Latin)' => [ "{$xml}<methodCall>{$validmethod}{$requiredparamsnonlatin}</methodCall>", 'core_get_component_strings', ['component' => 'ᛞᛁᛞᛃᛟᚢᚲᚾᛟᚹᛈᚺᛈᛋᚢᛈᛈᛟᚱᛏᛋᚢᛏᚠ8ᚡᚨᚱᛁᚨᛒᛚᛖᚾᚨᛗᛖᛋ'], ], ]; } }