WordPress.org

Make WordPress Core

Ticket #50159: SimplePieCacheTester.php

File SimplePieCacheTester.php, 6.3 KB (added by arena, 16 months ago)

tests cannot be chained due to mysql ... cache

Line 
1<?php
2/*
3        Plugin Name: SimplePieCacheTester
4        Description: To test simplepipe cache
5        Author: arena
6        Version: 0
7*/
8class 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}
220new SimplePieCacheTester();