Annotation of embedaddon/php/ext/mysqli/tests/mysqli_debug_mysqlnd_only.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: mysqli_debug() - mysqlnd only control strings
3: --SKIPIF--
4: <?php
5: require_once('skipif.inc');
6: require_once('skipifemb.inc');
7: require_once('skipifconnectfailure.inc');
8: require_once('connect.inc');
9:
10: if (!function_exists('mysqli_debug'))
11: die("skip mysqli_debug() not available");
12:
13: if (!defined('MYSQLI_DEBUG_TRACE_ENABLED'))
14: die("skip: can't say for sure if mysqli_debug works");
15:
16: if (defined('MYSQLI_DEBUG_TRACE_ENABLED') && !MYSQLI_DEBUG_TRACE_ENABLED)
17: die("skip: debug functionality not enabled");
18:
19: if (!$IS_MYSQLND)
20: die("skip mysqlnd only test");
21: ?>
22: --FILE--
23: <?php
24: require_once('connect.inc');;
25: require_once('table.inc');
26:
27: function try_control_string($link, $control_string, $trace_file, $offset) {
28:
29: @unlink($trace_file);
30: if (true !== ($tmp = @mysqli_debug($control_string))) {
31: printf("[%03d][control string '%s'] Expecting boolean/true, got %s/%s.\n",
32: $offset + 1,
33: $control_string,
34: gettype($tmp),
35: $tmp);
36: return false;
37: }
38:
39: if (!$res = mysqli_query($link, 'SELECT * FROM test')) {
40: printf("[%03d][control string '%s'] [%d] %s.\n",
41: $offset + 2,
42: $control_string,
43: mysqli_errno($link),
44: mysqli_error($link));
45: return false;
46: }
47: while ($row = mysqli_fetch_assoc($res))
48: ;
49: mysqli_free_result($res);
50:
51: clearstatcache();
52: if (!file_exists($trace_file)) {
53: printf("[%03d][control string '%s'] Trace file has not been written.\n",
54: $offset + 3,
55: $control_string,
56: gettype($tmp),
57: $tmp);
58: return false;
59: }
60:
61: return trim(substr(file_get_contents($trace_file), 0, 100024));
62: }
63:
64: $memory_funcs = array(
65: '_mysqlnd_ecalloc',
66: '_mysqlnd_emalloc',
67: '_mysqlnd_palloc_free_thd_cache_reference',
68: '_mysqlnd_pecalloc',
69: '_mysqlnd_pefree',
70: '_mysqlnd_pemalloc',
71: '_mysqlnd_perealloc',
72: );
73: $trace_file = sprintf('%s%s%s', sys_get_temp_dir(), DIRECTORY_SEPARATOR, 'mysqli_debug_phpt.trace');
74:
75: $trace = try_control_string($link, 't:m:O,' . $trace_file, $trace_file, 10);
76: if (!strstr($trace, 'SELECT * FROM test') && !strstr($trace, 'mysql_real_query'))
77: printf("[015] SELECT query cannot be found in trace. Trace contents seems wrong.\n");
78:
79: $lines_trace = explode("\n", $trace);
80: $functions_trace = array();
81: foreach ($lines_trace as $k => $line) {
82: $line = trim($line);
83: if (preg_match("@^[|\s]*>([\w:]+)@ism", $line, $matches)) {
84: $functions_trace[$matches[1]] = $matches[1];
85: }
86: }
87:
88: $found = 0;
89: foreach ($memory_funcs as $k => $name)
90: if (isset($functions_trace[$name]))
91: $found++;
92:
93: if ($found < (count($memory_funcs) - 2))
94: printf("[016] Only %d memory functions have been found, expecting at least %d.\n",
95: $found, count($memory_funcs) - 2);
96:
97: $trace = try_control_string($link, 't:O,' . $trace_file, $trace_file, 20);
98: if (!strstr($trace, 'SELECT * FROM test') && !strstr($trace, 'mysql_real_query'))
99: printf("[025] SELECT query cannot be found in trace. Trace contents seems wrong.\n");
100:
101: $lines_trace = explode("\n", $trace);
102: $functions_trace = array();
103: foreach ($lines_trace as $k => $line) {
104: $line = trim($line);
105: if (preg_match("@^[|\s]*>([\w:]+)@ism", $line, $matches)) {
106: $functions_trace[$matches[1]] = $matches[1];
107: }
108: }
109:
110: $found = 0;
111: foreach ($memory_funcs as $k => $name)
112: if (isset($functions_trace[$name]))
113: $found++;
114:
115: if ($found > 2)
116: printf("[026] More than %d memory functions have been recorded, that's strange.\n",
117: $found);
118:
119: mysqli_close($link);
120: @unlink($trace_file);
121: print "done!";
122: ?>
123: --CLEAN--
124: <?php
125: require_once("clean_table.inc");
126: ?>
127: --EXPECTF--
128: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>