[Beta Tester] Add tool to force wccom endpoint errors or timeout (#50654)
This commit is contained in:
parent
db9623395d
commit
17c6fb9b0f
|
@ -64,3 +64,4 @@ require 'live-branches/install.php';
|
||||||
require 'remote-spec-validator/class-wca-test-helper-remote-spec-validator.php';
|
require 'remote-spec-validator/class-wca-test-helper-remote-spec-validator.php';
|
||||||
require 'remote-inbox-notifications/class-wca-test-helper-remote-inbox-notifications.php';
|
require 'remote-inbox-notifications/class-wca-test-helper-remote-inbox-notifications.php';
|
||||||
require 'remote-logging/remote-logging.php';
|
require 'remote-logging/remote-logging.php';
|
||||||
|
require 'tools/wccom-request-errors.php';
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
defined( 'ABSPATH' ) || exit;
|
||||||
|
|
||||||
|
register_woocommerce_admin_test_helper_rest_route(
|
||||||
|
'/tools/set-wccom-request-errors/v1',
|
||||||
|
'tools_set_wccom_request_errors',
|
||||||
|
array(
|
||||||
|
'methods' => 'POST',
|
||||||
|
'args' => array(
|
||||||
|
'mode' => array(
|
||||||
|
'description' => 'wccom request error mode',
|
||||||
|
'type' => 'enum',
|
||||||
|
'enum' => array( 'timeout', 'error', 'disabled' ),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
register_woocommerce_admin_test_helper_rest_route(
|
||||||
|
'/tools/get-wccom-request-errors/v1',
|
||||||
|
'tools_get_wccom_request_errors',
|
||||||
|
array(
|
||||||
|
'methods' => 'GET',
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A tool to set wccom request errors mode.
|
||||||
|
*
|
||||||
|
* @param WP_REST_Request $request Request object.
|
||||||
|
*/
|
||||||
|
function tools_set_wccom_request_errors( $request ) {
|
||||||
|
$mode = $request->get_param( 'mode' );
|
||||||
|
|
||||||
|
update_option( 'wc_admin_test_helper_modify_wccom_request_responses', $mode );
|
||||||
|
|
||||||
|
return new WP_REST_Response( $mode, 200 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A tool to get wccom request mode.
|
||||||
|
*/
|
||||||
|
function tools_get_wccom_request_errors() {
|
||||||
|
$mode = get_option( 'wc_admin_test_helper_modify_wccom_request_responses', 'disabled' );
|
||||||
|
|
||||||
|
return new WP_REST_Response( $mode, 200 );
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: minor
|
||||||
|
Type: add
|
||||||
|
|
||||||
|
Add a tool to simulate server problems with woocommerce.com
|
|
@ -0,0 +1,74 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Modify wccom request responses.
|
||||||
|
|
||||||
|
* @package WC_Beta_Tester
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined( 'ABSPATH' ) || exit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WC_Beta_Tester Modify wccom request responses.
|
||||||
|
*/
|
||||||
|
class WC_Beta_Tester_WCCOM_Requests {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*/
|
||||||
|
public function __construct() {
|
||||||
|
$this->wc_beta_tester_modify_wccom_responses();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modify responses based on option value.
|
||||||
|
*/
|
||||||
|
public function wc_beta_tester_modify_wccom_responses() {
|
||||||
|
$mode = get_option( 'wc_admin_test_helper_modify_wccom_request_responses', 'disabled' );
|
||||||
|
|
||||||
|
if ( 'disabled' === $mode ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( 'timeout' === $mode ) {
|
||||||
|
add_filter( 'pre_http_request', array( $this, 'override_http_request_timeout' ), 10, 3 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( 'error' === $mode ) {
|
||||||
|
add_filter( 'pre_http_request', array( $this, 'override_http_request_error' ), 10, 3 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override the http request with a timeout.
|
||||||
|
*/
|
||||||
|
public function override_http_request_timeout( $response, $args, $url ) {
|
||||||
|
if ( strpos( $url, 'https://woocommerce.com/wp-json/' ) !== false || strpos( $url, 'woocommerce.test/wp-json/' ) !== false ) {
|
||||||
|
sleep( 6 ); // 6 seconds
|
||||||
|
return new WP_Error( 'http_request_timeout', 'Mock timeout error' );
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override the http request with an error.
|
||||||
|
*/
|
||||||
|
public function override_http_request_error( $response, $args, $url ) {
|
||||||
|
if ( strpos( $url, 'https://woocommerce.com/wp-json/' ) !== false ) {
|
||||||
|
return array(
|
||||||
|
'response' => array(
|
||||||
|
'code' => 500,
|
||||||
|
'message' => 'Internal Server Error',
|
||||||
|
),
|
||||||
|
'body' => 'Server Error',
|
||||||
|
'headers' => array(),
|
||||||
|
'cookies' => array(),
|
||||||
|
'filename' => null,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new WC_Beta_Tester_WCCOM_Requests();
|
|
@ -16,6 +16,11 @@ import {
|
||||||
UPDATE_COMING_SOON_MODE_ACTION_NAME,
|
UPDATE_COMING_SOON_MODE_ACTION_NAME,
|
||||||
} from './set-coming-soon-mode';
|
} from './set-coming-soon-mode';
|
||||||
|
|
||||||
|
import {
|
||||||
|
UPDATE_WCCOM_REQUEST_ERRORS_MODE,
|
||||||
|
SetWccomRequestErrros,
|
||||||
|
} from './set-wccom-request-errors';
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
{
|
{
|
||||||
command: 'Trigger WCA Install',
|
command: 'Trigger WCA Install',
|
||||||
|
@ -87,4 +92,9 @@ export default [
|
||||||
description: <SetComingSoonMode />,
|
description: <SetComingSoonMode />,
|
||||||
action: UPDATE_COMING_SOON_MODE_ACTION_NAME,
|
action: UPDATE_COMING_SOON_MODE_ACTION_NAME,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
command: 'Force errors on woocommerce.com requests',
|
||||||
|
description: <SetWccomRequestErrros />,
|
||||||
|
action: UPDATE_WCCOM_REQUEST_ERRORS_MODE,
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
/**
|
||||||
|
* External dependencies
|
||||||
|
*/
|
||||||
|
import { SelectControl } from '@wordpress/components';
|
||||||
|
import { useDispatch, useSelect } from '@wordpress/data';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal dependencies
|
||||||
|
*/
|
||||||
|
import { STORE_KEY } from '../data/constants';
|
||||||
|
|
||||||
|
export const UPDATE_WCCOM_REQUEST_ERRORS_MODE = 'updateWccomRequestErrorsMode';
|
||||||
|
|
||||||
|
const OPTIONS = [
|
||||||
|
{ label: 'Timeout after 6 seconds', value: 'timeout' },
|
||||||
|
{ label: '500', value: 'error' },
|
||||||
|
{ label: 'Disabled', value: 'disabled' },
|
||||||
|
];
|
||||||
|
|
||||||
|
export const SetWccomRequestErrros = () => {
|
||||||
|
const errorsMode = useSelect(
|
||||||
|
( select ) => select( STORE_KEY ).getWccomRequestErrorsMode(),
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
const { updateCommandParams } = useDispatch( STORE_KEY );
|
||||||
|
|
||||||
|
function onChange( mode ) {
|
||||||
|
updateCommandParams( UPDATE_WCCOM_REQUEST_ERRORS_MODE, {
|
||||||
|
mode,
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="select-description">
|
||||||
|
{ ! errorsMode ? (
|
||||||
|
<p>Loading ...</p>
|
||||||
|
) : (
|
||||||
|
<SelectControl
|
||||||
|
label="Error Mode"
|
||||||
|
labelPosition="side"
|
||||||
|
value={ errorsMode }
|
||||||
|
onChange={ onChange }
|
||||||
|
options={ OPTIONS }
|
||||||
|
/>
|
||||||
|
) }
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
|
@ -272,3 +272,13 @@ export function* updateComingSoonMode( params ) {
|
||||||
} );
|
} );
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function* updateWccomRequestErrorsMode( params ) {
|
||||||
|
yield runCommand( 'Update wccom request errors mode', function* () {
|
||||||
|
yield apiFetch( {
|
||||||
|
path: API_NAMESPACE + '/tools/set-wccom-request-errors/v1',
|
||||||
|
method: 'POST',
|
||||||
|
data: params,
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ const DEFAULT_STATE = {
|
||||||
updateComingSoonMode: {},
|
updateComingSoonMode: {},
|
||||||
updateBlockTemplateLoggingThreshold: {},
|
updateBlockTemplateLoggingThreshold: {},
|
||||||
runSelectedUpdateCallbacks: {},
|
runSelectedUpdateCallbacks: {},
|
||||||
|
updateWccomRequestErrorsMode: {},
|
||||||
},
|
},
|
||||||
status: '',
|
status: '',
|
||||||
dbUpdateVersions: [],
|
dbUpdateVersions: [],
|
||||||
|
|
|
@ -17,6 +17,7 @@ import {
|
||||||
import { UPDATE_BLOCK_TEMPLATE_LOGGING_THRESHOLD_ACTION_NAME } from '../commands/update-block-template-logging-threshold';
|
import { UPDATE_BLOCK_TEMPLATE_LOGGING_THRESHOLD_ACTION_NAME } from '../commands/update-block-template-logging-threshold';
|
||||||
import { UPDATE_COMING_SOON_MODE_ACTION_NAME } from '../commands/set-coming-soon-mode';
|
import { UPDATE_COMING_SOON_MODE_ACTION_NAME } from '../commands/set-coming-soon-mode';
|
||||||
import { TRIGGER_UPDATE_CALLBACKS_ACTION_NAME } from '../commands/trigger-update-callbacks';
|
import { TRIGGER_UPDATE_CALLBACKS_ACTION_NAME } from '../commands/trigger-update-callbacks';
|
||||||
|
import { UPDATE_WCCOM_REQUEST_ERRORS_MODE } from '../commands/set-wccom-request-errors';
|
||||||
|
|
||||||
export function* getCronJobs() {
|
export function* getCronJobs() {
|
||||||
const path = `${ API_NAMESPACE }/tools/get-cron-list/v1`;
|
const path = `${ API_NAMESPACE }/tools/get-cron-list/v1`;
|
||||||
|
@ -117,3 +118,20 @@ export function* getComingSoonMode() {
|
||||||
throw new Error( error );
|
throw new Error( error );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function* getWccomRequestErrorsMode() {
|
||||||
|
const path = `${ API_NAMESPACE }/tools/get-wccom-request-errors/v1`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const mode = yield apiFetch( {
|
||||||
|
path,
|
||||||
|
method: 'GET',
|
||||||
|
} );
|
||||||
|
|
||||||
|
yield updateCommandParams( UPDATE_WCCOM_REQUEST_ERRORS_MODE, {
|
||||||
|
mode: mode || 'disabled',
|
||||||
|
} );
|
||||||
|
} catch ( error ) {
|
||||||
|
throw new Error( error );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -37,3 +37,7 @@ export function getBlockTemplateLoggingThreshold( state ) {
|
||||||
export function getComingSoonMode( state ) {
|
export function getComingSoonMode( state ) {
|
||||||
return state.params.updateComingSoonMode.mode;
|
return state.params.updateComingSoonMode.mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getWccomRequestErrorsMode( state ) {
|
||||||
|
return state.params.updateWccomRequestErrorsMode.mode;
|
||||||
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@ function _wc_beta_tester_bootstrap() {
|
||||||
// Tools.
|
// Tools.
|
||||||
include dirname( __FILE__ ) . '/includes/class-wc-beta-tester-version-picker.php';
|
include dirname( __FILE__ ) . '/includes/class-wc-beta-tester-version-picker.php';
|
||||||
include dirname( __FILE__ ) . '/includes/class-wc-beta-tester-override-coming-soon-options.php';
|
include dirname( __FILE__ ) . '/includes/class-wc-beta-tester-override-coming-soon-options.php';
|
||||||
|
include dirname( __FILE__ ) . '/includes/class-wc-beta-tester-wccom-requests.php';
|
||||||
|
|
||||||
register_activation_hook( __FILE__, array( 'WC_Beta_Tester', 'activate' ) );
|
register_activation_hook( __FILE__, array( 'WC_Beta_Tester', 'activate' ) );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue