From 59f489c01f63d76ae879b2e25b8fad1b5a82a3dc Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 21 Jul 2019 16:03:19 +0200 Subject: [ticket/security/244] Add missing form parameters to tests SECURITY-244 --- .../test_framework/phpbb_functional_test_case.php | 51 ++++++++++++++++------ 1 file changed, 37 insertions(+), 14 deletions(-) (limited to 'tests/test_framework') diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php index 4d294fd523..2659cf6e73 100644 --- a/tests/test_framework/phpbb_functional_test_case.php +++ b/tests/test_framework/phpbb_functional_test_case.php @@ -1166,24 +1166,14 @@ class phpbb_functional_test_case extends phpbb_test_case 'error' => UPLOAD_ERR_OK, ); - $crawler = self::$client->request('POST', $posting_url, array('add_file' => $this->lang('ADD_FILE')), array('fileupload' => $file)); + $file_form_data = array_merge(['add_file' => $this->lang('ADD_FILE')], $this->get_hidden_fields($crawler, $posting_url)); + + $crawler = self::$client->request('POST', $posting_url, $file_form_data, array('fileupload' => $file)); } unset($form_data['upload_files']); } - $hidden_fields = array( - $crawler->filter('[type="hidden"]')->each(function ($node, $i) { - return array('name' => $node->attr('name'), 'value' => $node->attr('value')); - }), - ); - - foreach ($hidden_fields as $fields) - { - foreach($fields as $field) - { - $form_data[$field['name']] = $field['value']; - } - } + $form_data = array_merge($form_data, $this->get_hidden_fields($crawler, $posting_url)); // I use a request because the form submission method does not allow you to send data that is not // contained in one of the actual form fields that the browser sees (i.e. it ignores "hidden" inputs) @@ -1314,4 +1304,37 @@ class phpbb_functional_test_case extends phpbb_test_case return self::request('GET', substr($link, strpos($link, 'mcp.'))); } + + /** + * Get hidden fields for URL + * + * @param Symfony\Component\DomCrawler\Crawler|null $crawler Crawler instance or null + * @param string $url Request URL + * + * @return array Hidden form fields array + */ + protected function get_hidden_fields($crawler, $url) + { + if (!$crawler) + { + $crawler = self::$client->request('GET', $url); + } + $hidden_fields = [ + $crawler->filter('[type="hidden"]')->each(function ($node, $i) { + return ['name' => $node->attr('name'), 'value' => $node->attr('value')]; + }), + ]; + + $file_form_data = []; + + foreach ($hidden_fields as $fields) + { + foreach($fields as $field) + { + $file_form_data[$field['name']] = $field['value']; + } + } + + return $file_form_data; + } } -- cgit v1.2.1 From 1ba0ae6e8530d3dab55ad1333c0d392eefa2d401 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sat, 19 Oct 2019 17:48:34 +0200 Subject: [ticket/16078] Try using retries for timeout issue The timeout only seems to occur on the first test so let's see what a retry can do to help with this issue. PHPBB3-16078 --- tests/test_framework/phpbb_ui_test_case.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'tests/test_framework') diff --git a/tests/test_framework/phpbb_ui_test_case.php b/tests/test_framework/phpbb_ui_test_case.php index 4d88d7d9cb..e7c9bd4d0b 100644 --- a/tests/test_framework/phpbb_ui_test_case.php +++ b/tests/test_framework/phpbb_ui_test_case.php @@ -158,7 +158,23 @@ class phpbb_ui_test_case extends phpbb_test_case public function visit($path) { - $this->getDriver()->get(self::$root_url . $path); + // Retry three times on curl issues, e.g. timeout + try + { + $this->getDriver()->get(self::$root_url . $path); + } + catch (Facebook\WebDriver\Exception\WebDriverCurlException $exception) + { + try + { + $this->getDriver()->get(self::$root_url . $path); + } + catch (Facebook\WebDriver\Exception\WebDriverCurlException $exception) + { + // Last try, throw exception after this one fails + $this->getDriver()->get(self::$root_url . $path); + } + } } static protected function recreate_database($config) -- cgit v1.2.1 From 8b6776eed22edc33b3f35946fba6b5de4bfe73a1 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 20 Oct 2019 15:51:47 +0200 Subject: [ticket/16078] Use while loop for visit retries PHPBB3-16078 --- tests/test_framework/phpbb_ui_test_case.php | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'tests/test_framework') diff --git a/tests/test_framework/phpbb_ui_test_case.php b/tests/test_framework/phpbb_ui_test_case.php index e7c9bd4d0b..48e510abe3 100644 --- a/tests/test_framework/phpbb_ui_test_case.php +++ b/tests/test_framework/phpbb_ui_test_case.php @@ -159,20 +159,23 @@ class phpbb_ui_test_case extends phpbb_test_case public function visit($path) { // Retry three times on curl issues, e.g. timeout - try - { - $this->getDriver()->get(self::$root_url . $path); - } - catch (Facebook\WebDriver\Exception\WebDriverCurlException $exception) + $attempts = 0; + $retries = 3; + + while (true) { + $attempts++; try { $this->getDriver()->get(self::$root_url . $path); + break; } catch (Facebook\WebDriver\Exception\WebDriverCurlException $exception) { - // Last try, throw exception after this one fails - $this->getDriver()->get(self::$root_url . $path); + if ($attempts >= $retries) + { + throw $exception; + } } } } -- cgit v1.2.1