- Timestamp:
- 04/16/2019 05:08:16 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/phpunit/tests/error-protection/recovery-mode-key-service.php
r44973 r45211 11 11 public function test_generate_and_store_recovery_mode_key_returns_recovery_key() { 12 12 $service = new WP_Recovery_Mode_Key_Service(); 13 $key = $service->generate_and_store_recovery_mode_key(); 13 $token = $service->generate_recovery_mode_token(); 14 $key = $service->generate_and_store_recovery_mode_key( $token ); 14 15 15 16 $this->assertNotWPError( $key ); … … 21 22 public function test_validate_recovery_mode_key_returns_wp_error_if_no_key_set() { 22 23 $service = new WP_Recovery_Mode_Key_Service(); 23 $error = $service->validate_recovery_mode_key( ' abcd', HOUR_IN_SECONDS );24 $error = $service->validate_recovery_mode_key( '', 'abcd', HOUR_IN_SECONDS ); 24 25 25 26 $this->assertWPError( $error ); 26 $this->assertEquals( ' no_recovery_key_set', $error->get_error_code() );27 $this->assertEquals( 'token_not_found', $error->get_error_code() ); 27 28 } 28 29 … … 30 31 * @ticket 46130 31 32 */ 32 public function test_validate_recovery_mode_key_returns_wp_error_if_ stored_format_is_invalid() {33 update_option( 'recovery_key ', 'gibberish' );33 public function test_validate_recovery_mode_key_returns_wp_error_if_data_missing() { 34 update_option( 'recovery_keys', 'gibberish' ); 34 35 35 36 $service = new WP_Recovery_Mode_Key_Service(); 36 $error = $service->validate_recovery_mode_key( 'abcd', HOUR_IN_SECONDS ); 37 $error = $service->validate_recovery_mode_key( '', 'abcd', HOUR_IN_SECONDS ); 38 39 $this->assertWPError( $error ); 40 $this->assertEquals( 'token_not_found', $error->get_error_code() ); 41 } 42 43 /** 44 * @ticket 46130 45 */ 46 public function test_validate_recovery_mode_key_returns_wp_error_if_bad() { 47 update_option( 'recovery_keys', array( 'token' => 'gibberish' ) ); 48 49 $service = new WP_Recovery_Mode_Key_Service(); 50 $error = $service->validate_recovery_mode_key( 'token', 'abcd', HOUR_IN_SECONDS ); 51 52 $this->assertWPError( $error ); 53 $this->assertEquals( 'invalid_recovery_key_format', $error->get_error_code() ); 54 } 55 56 57 /** 58 * @ticket 46130 59 */ 60 public function test_validate_recovery_mode_key_returns_wp_error_if_stored_format_is_invalid() { 61 62 $token = wp_generate_password( 22, false ); 63 update_option( 'recovery_keys', array( $token => 'gibberish' ) ); 64 65 $service = new WP_Recovery_Mode_Key_Service(); 66 $error = $service->validate_recovery_mode_key( $token, 'abcd', HOUR_IN_SECONDS ); 37 67 38 68 $this->assertWPError( $error ); … … 45 75 public function test_validate_recovery_mode_key_returns_wp_error_if_empty_key() { 46 76 $service = new WP_Recovery_Mode_Key_Service(); 47 $service->generate_and_store_recovery_mode_key(); 48 $error = $service->validate_recovery_mode_key( '', HOUR_IN_SECONDS ); 77 $token = $service->generate_recovery_mode_token(); 78 $service->generate_and_store_recovery_mode_key( $token ); 79 $error = $service->validate_recovery_mode_key( $token, '', HOUR_IN_SECONDS ); 49 80 50 81 $this->assertWPError( $error ); … … 57 88 public function test_validate_recovery_mode_key_returns_wp_error_if_hash_mismatch() { 58 89 $service = new WP_Recovery_Mode_Key_Service(); 59 $service->generate_and_store_recovery_mode_key(); 60 $error = $service->validate_recovery_mode_key( 'abcd', HOUR_IN_SECONDS ); 90 $token = $service->generate_recovery_mode_token(); 91 $service->generate_and_store_recovery_mode_key( $token ); 92 $error = $service->validate_recovery_mode_key( $token, 'abcd', HOUR_IN_SECONDS ); 61 93 62 94 $this->assertWPError( $error ); … … 69 101 public function test_validate_recovery_mode_key_returns_wp_error_if_expired() { 70 102 $service = new WP_Recovery_Mode_Key_Service(); 71 $key = $service->generate_and_store_recovery_mode_key(); 103 $token = $service->generate_recovery_mode_token(); 104 $key = $service->generate_and_store_recovery_mode_key( $token ); 72 105 73 $record = get_option( 'recovery_key' );74 $record ['created_at'] = time() - HOUR_IN_SECONDS - 30;75 update_option( 'recovery_key ', $record);106 $records = get_option( 'recovery_keys' ); 107 $records[ $token ]['created_at'] = time() - HOUR_IN_SECONDS - 30; 108 update_option( 'recovery_keys', $records ); 76 109 77 $error = $service->validate_recovery_mode_key( $ key, HOUR_IN_SECONDS );110 $error = $service->validate_recovery_mode_key( $token, $key, HOUR_IN_SECONDS ); 78 111 79 112 $this->assertWPError( $error ); … … 86 119 public function test_validate_recovery_mode_key_returns_true_for_valid_key() { 87 120 $service = new WP_Recovery_Mode_Key_Service(); 88 $key = $service->generate_and_store_recovery_mode_key(); 89 $this->assertTrue( $service->validate_recovery_mode_key( $key, HOUR_IN_SECONDS ) ); 121 $token = $service->generate_recovery_mode_token(); 122 $key = $service->generate_and_store_recovery_mode_key( $token ); 123 $this->assertTrue( $service->validate_recovery_mode_key( $token, $key, HOUR_IN_SECONDS ) ); 124 } 125 126 /** 127 * @ticket 46595 128 */ 129 public function test_validate_recovery_mode_key_returns_error_if_token_used_more_than_once() { 130 $service = new WP_Recovery_Mode_Key_Service(); 131 $token = $service->generate_recovery_mode_token(); 132 $key = $service->generate_and_store_recovery_mode_key( $token ); 133 134 $this->assertTrue( $service->validate_recovery_mode_key( $token, $key, HOUR_IN_SECONDS ) ); 135 136 // data should be remove by first call 137 $error = $service->validate_recovery_mode_key( $token, $key, HOUR_IN_SECONDS ); 138 139 $this->assertWPError( $error ); 140 $this->assertEquals( 'token_not_found', $error->get_error_code() ); 141 } 142 143 /** 144 * @ticket 46595 145 */ 146 public function test_validate_recovery_mode_key_returns_error_if_token_used_more_than_once_more_than_key_stored() { 147 $service = new WP_Recovery_Mode_Key_Service(); 148 149 // create an extra key 150 $token = $service->generate_recovery_mode_token(); 151 $service->generate_and_store_recovery_mode_key( $token ); 152 153 $token = $service->generate_recovery_mode_token(); 154 $key = $service->generate_and_store_recovery_mode_key( $token ); 155 156 $this->assertTrue( $service->validate_recovery_mode_key( $token, $key, HOUR_IN_SECONDS ) ); 157 158 // data should be remove by first call 159 $error = $service->validate_recovery_mode_key( $token, $key, HOUR_IN_SECONDS ); 160 161 $this->assertWPError( $error ); 162 $this->assertEquals( 'token_not_found', $error->get_error_code() ); 163 } 164 165 /** 166 * @ticket 46595 167 */ 168 public function test_clean_expired_keys() { 169 $service = new WP_Recovery_Mode_Key_Service(); 170 $token = $service->generate_recovery_mode_token(); 171 $service->generate_and_store_recovery_mode_key( $token ); 172 173 $records = get_option( 'recovery_keys' ); 174 175 $records[ $token ]['created_at'] = time() - HOUR_IN_SECONDS - 30; 176 177 update_option( 'recovery_keys', $records ); 178 179 $service->clean_expired_keys( HOUR_IN_SECONDS ); 180 181 $this->assertEmpty( get_option( 'recovery_keys' ) ); 90 182 } 91 183 }
Note: See TracChangeset
for help on using the changeset viewer.