WordPress.org

Make WordPress Core

Ticket #15058: 15058-unit.diff

File 15058-unit.diff, 2.3 KB (added by devesine, 5 years ago)
  • tests/option/transient.php

     
    3333                $this->assertEquals( $value, get_transient( $key ) );
    3434                $this->assertTrue( delete_transient( $key ) );
    3535        }
     36
     37        /**
     38         * Test for problems with a long transient base key and a longer
     39         * key that starts with the base key.
     40         *
     41         * @ticket 15058
     42         **/
     43        function test_long_and_longer_transient_key() {
     44                $base_key = str_repeat('-', 45);
     45                $base_value = rand_str();
     46               
     47                foreach ( array( 44, 45, 53, 65, 255, 256, 257 ) as $length ) {
     48                        wp_cache_flush();
     49                        set_transient( $base_key, $base_value );
     50                        $key = $base_key . $length;
     51                        $key = str_pad( $key, $length, "-", STR_PAD_LEFT );
     52                        $value = rand_str();
     53                        $transient_result = set_transient( $key, $value );
     54                        wp_cache_flush();
     55                        $this->assertEquals( $base_value, get_transient( $base_key ),
     56                                "Base key should remain the same at len $length" );
     57                        if ( $transient_result ) {
     58                                $this->assertEquals( $value, get_transient( $key ),
     59                                        "Long key should remain the same at len $length" );
     60                        }
     61                }
     62        }
     63
     64        /**
     65         * Test for problems with two transient keys of equivalent length.
     66         *
     67         * @ticket 15058
     68         **/
     69        function test_long_transient_keys() {
     70                foreach ( array( 44, 45, 53, 65, 255, 256, 257 ) as $length ) {
     71                        $key1 = rand_str( 32 ) . "X";
     72                        $key1 = str_pad( $key1, $length, "-", STR_PAD_LEFT );
     73                        $key1 = substr( $key1, 0, $length );
     74                       
     75                        // Second key: Replace the last character to detect truncation
     76                        $key2 = substr( $key1, 0, $length - 1 ) . "Y";
     77
     78                        $value1 = rand_str();
     79                        $value2 = rand_str();
     80
     81                        $transient_result = set_transient( $key1, $value1 );
     82                        if ($transient_result) {
     83                                $transient_result2 = set_transient( $key2, $value2 );
     84                                if ($transient_result2) {
     85                                        wp_cache_flush();
     86                                        $this->assertEquals( $value1, get_transient( $key1 ),
     87                                                "Length $length, first transient should work" );
     88                                        $this->assertEquals( $value2, get_transient( $key2 ),
     89                                                "Length $length, second transient should work" );
     90                                }
     91                        }
     92                        else {
     93                                $this->assertFalse( get_transient( $key1 ),
     94                                        "transient keylen $length set failed, get should fail" );
     95                        }
     96                }
     97        }
    3698}