| 1 | <?php |
|---|
| 2 | /* |
|---|
| 3 | Plugin Name: SimplePieCacheTester |
|---|
| 4 | Description: To test simplepipe cache |
|---|
| 5 | Author: arena |
|---|
| 6 | Version: 0 |
|---|
| 7 | */ |
|---|
| 8 | class SimplePieCacheTester |
|---|
| 9 | { |
|---|
| 10 | const feed_0 = 'http://wordpress.org/development/feed/'; |
|---|
| 11 | const feed_1 = 'https://www.theverge.com/rss/index.xml'; |
|---|
| 12 | |
|---|
| 13 | function __construct() |
|---|
| 14 | { |
|---|
| 15 | add_action( 'tool_box', array( $this, 'tool_box' ) ); |
|---|
| 16 | } |
|---|
| 17 | |
|---|
| 18 | public function tool_box() |
|---|
| 19 | { |
|---|
| 20 | $this->out = array(); |
|---|
| 21 | |
|---|
| 22 | // tests cannot be chained due to mysql ... |
|---|
| 23 | |
|---|
| 24 | // $this->test01(); |
|---|
| 25 | // $this->test02(); |
|---|
| 26 | // $this->test03(); |
|---|
| 27 | $this->test04(); |
|---|
| 28 | |
|---|
| 29 | echo '<pre>' . implode('<br />', $this->out ) . '</pre>'; |
|---|
| 30 | } |
|---|
| 31 | |
|---|
| 32 | public function test01() |
|---|
| 33 | { |
|---|
| 34 | $this->out[] = ''; |
|---|
| 35 | $this->out[] = '**************** TEST 01 ***********************'; |
|---|
| 36 | $this->test = ' * 01 * '; |
|---|
| 37 | |
|---|
| 38 | $this->feed = self::feed_0; |
|---|
| 39 | |
|---|
| 40 | $this->out[] = $this->test . ' ** using fetch_feed with no filter and one feed as string : ' . $this->feed; |
|---|
| 41 | |
|---|
| 42 | $this->init_test(); |
|---|
| 43 | |
|---|
| 44 | $feed = fetch_feed( $this->feed ); |
|---|
| 45 | |
|---|
| 46 | $this->end_test( $feed ); |
|---|
| 47 | |
|---|
| 48 | $this->out[] = '**************** END TEST 01 ***********************'; |
|---|
| 49 | $this->out[] = ''; |
|---|
| 50 | } |
|---|
| 51 | |
|---|
| 52 | public function test02() |
|---|
| 53 | { |
|---|
| 54 | $this->out[] = ''; |
|---|
| 55 | $this->out[] = '**************** TEST 02 ***********************'; |
|---|
| 56 | $this->test = ' * 02 * '; |
|---|
| 57 | |
|---|
| 58 | $this->feed = self::feed_0; |
|---|
| 59 | $this->lifetime = $this->get_lifetime(); |
|---|
| 60 | $this->calls = 0; |
|---|
| 61 | add_filter( 'wp_feed_cache_transient_lifetime', array( $this, 'wp_feed_cache_transient_lifetime' ), 10, 2 ); |
|---|
| 62 | |
|---|
| 63 | $this->out[] = $this->test . ' ** using fetch_feed with filter (lifetime = ' . $this->lifetime . ') and one feed as string : ' . $this->feed; |
|---|
| 64 | |
|---|
| 65 | $this->init_test(); |
|---|
| 66 | |
|---|
| 67 | $feed = fetch_feed( $this->feed ); |
|---|
| 68 | |
|---|
| 69 | $this->end_test( $feed ); |
|---|
| 70 | |
|---|
| 71 | remove_filter( 'wp_feed_cache_transient_lifetime', array( $this, 'wp_feed_cache_transient_lifetime' ) ); |
|---|
| 72 | |
|---|
| 73 | $this->out[] = '**************** END TEST 02 ***********************'; |
|---|
| 74 | $this->out[] = ''; |
|---|
| 75 | } |
|---|
| 76 | |
|---|
| 77 | public function test03() |
|---|
| 78 | { |
|---|
| 79 | $this->out[] = ''; |
|---|
| 80 | $this->out[] = '**************** TEST 03 ***********************'; |
|---|
| 81 | $this->test = ' * 03 * '; |
|---|
| 82 | |
|---|
| 83 | $this->feed = array( self::feed_0 ); |
|---|
| 84 | $this->lifetime = $this->get_lifetime(); |
|---|
| 85 | $this->calls = 0; |
|---|
| 86 | add_filter( 'wp_feed_cache_transient_lifetime', array( $this, 'wp_feed_cache_transient_lifetime' ), 10, 2 ); |
|---|
| 87 | |
|---|
| 88 | $this->out[] = $this->test . ' ** using fetch_feed with filter (lifetime = ' . $this->lifetime . ') and one feed as array : ' . json_encode( $this->feed ); |
|---|
| 89 | |
|---|
| 90 | $this->init_test(); |
|---|
| 91 | |
|---|
| 92 | $feed = fetch_feed( $this->feed ); |
|---|
| 93 | |
|---|
| 94 | $this->end_test( $feed ); |
|---|
| 95 | |
|---|
| 96 | remove_filter( 'wp_feed_cache_transient_lifetime', array( $this, 'wp_feed_cache_transient_lifetime' ) ); |
|---|
| 97 | |
|---|
| 98 | $this->out[] = '**************** END TEST 03 ***********************'; |
|---|
| 99 | $this->out[] = ''; |
|---|
| 100 | } |
|---|
| 101 | |
|---|
| 102 | public function test04() |
|---|
| 103 | { |
|---|
| 104 | $this->out[] = ''; |
|---|
| 105 | $this->out[] = '**************** TEST 04 ***********************'; |
|---|
| 106 | $this->test = ' * 04 * '; |
|---|
| 107 | |
|---|
| 108 | $this->feed = array( self::feed_0, self::feed_1 ); |
|---|
| 109 | $this->lifetime = $this->get_lifetime(); |
|---|
| 110 | $this->calls = 0; |
|---|
| 111 | add_filter( 'wp_feed_cache_transient_lifetime', array( $this, 'wp_feed_cache_transient_lifetime' ), 10, 2 ); |
|---|
| 112 | |
|---|
| 113 | $this->out[] = $this->test . ' ** using fetch_feed with filter (lifetime = ' . $this->lifetime . ') and two feeds as array : ' . json_encode( $this->feed ); |
|---|
| 114 | |
|---|
| 115 | $this->init_test(); |
|---|
| 116 | |
|---|
| 117 | $feed = fetch_feed( $this->feed ); |
|---|
| 118 | |
|---|
| 119 | $this->end_test( $feed ); |
|---|
| 120 | |
|---|
| 121 | remove_filter( 'wp_feed_cache_transient_lifetime', array( $this, 'wp_feed_cache_transient_lifetime' ) ); |
|---|
| 122 | |
|---|
| 123 | $this->out[] = '**************** END TEST 04 ***********************'; |
|---|
| 124 | $this->out[] = ''; |
|---|
| 125 | } |
|---|
| 126 | |
|---|
| 127 | public function wp_feed_cache_transient_lifetime( $lifetime, $url ) |
|---|
| 128 | { |
|---|
| 129 | $this->calls++; |
|---|
| 130 | $test = $this->test . '+++++ filter(' . $this->calls . ')'; |
|---|
| 131 | $this->out[] = $test; |
|---|
| 132 | $u = ( is_array( $url ) ) ? json_encode( $url ) : $url; |
|---|
| 133 | $this->out[] = $test . ' beg >> lifetime >> ' . $lifetime; |
|---|
| 134 | $this->out[] = $test . ' beg >> 2nd arg >> ' . $u; |
|---|
| 135 | |
|---|
| 136 | if ( $url == $this->feed ) |
|---|
| 137 | { |
|---|
| 138 | $this->out[] = $test . ' ++ filtered : should be 1st call (2nd func arg string or array)'; |
|---|
| 139 | $lifetime = $this->lifetime; |
|---|
| 140 | } |
|---|
| 141 | elseif ( is_array( $this->feed ) ) |
|---|
| 142 | { |
|---|
| 143 | $feedmd5 = array_map( 'md5', $this->feed ); |
|---|
| 144 | if ( in_array( $url, $feedmd5 ) ) |
|---|
| 145 | { |
|---|
| 146 | $lifetime = $this->lifetime; |
|---|
| 147 | if ( count( $this->feed ) == 1 ) |
|---|
| 148 | $this->out[] = $test . ' ++ filtered : should be 2nd call and 2nd arg is one of array of one'; |
|---|
| 149 | else |
|---|
| 150 | $this->out[] = $test . ' ++ filtered : should be 2nd call and 2nd arg is one of array of many'; |
|---|
| 151 | } |
|---|
| 152 | } |
|---|
| 153 | elseif ( $url == md5( $this->feed ) ) |
|---|
| 154 | { |
|---|
| 155 | $this->out[] = $test . ' ++ filtered : should be 2nd call and one feed as string'; |
|---|
| 156 | $lifetime = $this->lifetime; |
|---|
| 157 | } |
|---|
| 158 | |
|---|
| 159 | $this->out[] = $test . ' end >> lifetime >> ' . $lifetime; |
|---|
| 160 | return $lifetime; |
|---|
| 161 | } |
|---|
| 162 | |
|---|
| 163 | public function init_test() |
|---|
| 164 | { |
|---|
| 165 | global $wpdb; |
|---|
| 166 | $wpdb->query( "DELETE FROM $wpdb->options where option_name like '_transient%feed%'" ); |
|---|
| 167 | $this->out[] = $this->test . ' rows in wp_options where option_name like "_transient%feed%" : ' . $wpdb->get_var( "SELECT COUNT(*) as count FROM $wpdb->options where option_name like '_transient%feed%'" ); |
|---|
| 168 | } |
|---|
| 169 | |
|---|
| 170 | public function end_test( $feed ) |
|---|
| 171 | { |
|---|
| 172 | global $wpdb; |
|---|
| 173 | if ( is_wp_error( $feed ) ) |
|---|
| 174 | { |
|---|
| 175 | $this->out[] = $this->test . $feed->get_error_message(); |
|---|
| 176 | } |
|---|
| 177 | else |
|---|
| 178 | { |
|---|
| 179 | $i = 0; |
|---|
| 180 | do |
|---|
| 181 | { |
|---|
| 182 | $link = $feed->get_link( $i ); |
|---|
| 183 | if ( $link ) $this->out[] = $this->test . ' >>> feed->get_link >>> ' . $link; |
|---|
| 184 | $i++; |
|---|
| 185 | } while( $link ); |
|---|
| 186 | } |
|---|
| 187 | $rows = $wpdb->get_results( "SELECT * FROM $wpdb->options where option_name like '_transient%feed%'" ); |
|---|
| 188 | $this->out[] = $this->test . ' rows in wp_options where option_name like "_transient%feed%" : ' . count($rows); |
|---|
| 189 | |
|---|
| 190 | if ( $rows ) |
|---|
| 191 | { |
|---|
| 192 | $this->out[] .= $this->get_list( $rows ); |
|---|
| 193 | } |
|---|
| 194 | } |
|---|
| 195 | |
|---|
| 196 | public function get_list( $rows ) |
|---|
| 197 | { |
|---|
| 198 | $t = '<table>'; |
|---|
| 199 | $cols = array( 'option_id', 'option_name', 'option_value' ); |
|---|
| 200 | foreach( $rows as $row ) |
|---|
| 201 | { |
|---|
| 202 | $t .= '<tr>'; |
|---|
| 203 | foreach( $cols as $col ) |
|---|
| 204 | { |
|---|
| 205 | $v = $row->$col; |
|---|
| 206 | if ( strlen( $v ) > 100 ) $v = substr( $v, 0, 99 ); |
|---|
| 207 | $t .= "<td>$v</td>"; |
|---|
| 208 | } |
|---|
| 209 | $t .= '</tr>'; |
|---|
| 210 | } |
|---|
| 211 | $t .= '</table>'; |
|---|
| 212 | return $this->test . '<br />' . $t; |
|---|
| 213 | } |
|---|
| 214 | |
|---|
| 215 | public function get_lifetime() |
|---|
| 216 | { |
|---|
| 217 | return 2000000000 - time(); |
|---|
| 218 | } |
|---|
| 219 | } |
|---|
| 220 | new SimplePieCacheTester(); |
|---|