List:Commits« Previous MessageNext Message »
From:uwendel Date:March 15 2007 10:40am
Subject:PHP mysqlnd svn commit: r148 - trunk/ext/mysqli/tests
View as plain text  
Author: uwendel
Date: 2007-03-15 11:40:14 +0100 (Thu, 15 Mar 2007)
New Revision: 148

Added:
   trunk/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt
   trunk/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_mysqlnd.phpt
Modified:
   trunk/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt
Log:
Extracted the libmysql bug from the original test and created two new tests for the packet
size test/bug. mysqlnd is a bit more verbose and throws additional warnings - 
which I think is a good idea - but it's difficult to handle the additional warnings if you
run the test both against libmysql and mysqlnd.  However, the split makes the 
mysqlnd test results look a bit better.


Modified: trunk/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt
===================================================================
--- trunk/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt	2007-03-15 10:01:05 UTC (rev
147)
+++ trunk/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt	2007-03-15 10:40:14 UTC (rev
148)
@@ -75,49 +75,29 @@
 
     $id = 1;
     if (true !== mysqli_stmt_execute($stmt))
-        printf("[013] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));   
    
-        
-    if (floor($max_allowed_packet / 1024 / 2) <= 10240) {
-        // test with a blob smaller than 10M allows us to test 
-        // for too long packages without wasting too much memory
-        $limit = $max_allowed_packet - strlen($blob) + 1;
-        $blob2 = $blob;
-        for ($i = 0; $i < $limit; $i++)
-            $blob2 .= 'b';
-            
-        assert(strlen($blob2) > $max_allowed_packet);            
-            
-        if (false !== ($tmp = mysqli_stmt_send_long_data($stmt, 1, $blob2)))
-            printf("[014] Expecting boolean/false, got %s/%s. [%d] %s\n",
-                gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
-                            
-        $id = 2;
-        if (false !== ($tmp = mysqli_stmt_execute($stmt)))
-            printf("[015] Expecting boolean/false, got %s/%s, [%d] %s\n", 
-                gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
-    }   
+        printf("[013] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));   
     mysqli_stmt_close($stmt);
     
     if (!$res = mysqli_query($link, "SELECT id, label FROM test ORDER BY id"))
-        printf("[016] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+        printf("[014] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
         
     if (1 != ($tmp = mysqli_num_rows($res)))
-        printf("[017] Expecting 1 rows, mysqli_num_rows() reports %d rows. [%d] %s\n", 
+        printf("[015] Expecting 1 rows, mysqli_num_rows() reports %d rows. [%d] %s\n", 
             $tmp, mysqli_errno($link), mysqli_error($link));           
     
     if (!$row = mysqli_fetch_assoc($res))
-        printf("[018] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+        printf("[016] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
         
     mysqli_free_result($res);
         
     if (empty($row['id']) || empty($row['label']) || ($row['id'] != 1))
-        printf("[019] Record seems to be incomplete\n");
+        printf("[017] Record seems to be incomplete\n");
         
     if ($blob != $row['label'])
-        printf("[020] Blob value has not been stored properly!\n");   
+        printf("[018] Blob value has not been stored properly!\n");   
     
     if (NULL !== ($tmp = @mysqli_stmt_send_long_data($stmt, '')))
-        printf("[021] Expecting NULL, got %s/%s\n");        
+        printf("[019] Expecting NULL, got %s/%s\n");        
             
     mysqli_close($link);    
     print "done!";

Added: trunk/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt
===================================================================
--- trunk/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt	2007-03-15
10:01:05 UTC (rev 147)
+++ trunk/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_libmysql.phpt	2007-03-15
10:40:14 UTC (rev 148)
@@ -0,0 +1,90 @@
+--TEST--
+mysqli_stmt_send_long_data() - exceed packet size, libmysql
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+<?php 
+require_once('skipifemb.inc'); 
+if (stristr(mysqli_get_client_info(), 'mysqlnd'))
+    die("skip: test for libmysql");
+?>
+--FILE--
+<?php
+    include "connect.inc";
+    require('table.inc');       
+    
+    if (!$stmt = mysqli_stmt_init($link))
+        printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));   
+        
+    if (!mysqli_query($link, "DROP TABLE IF EXISTS test"))
+        printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+        
+    if (!mysqli_query($link, sprintf("CREATE TABLE test(id INT NOT NULL AUTO_INCREMENT,
label LONGBLOB, PRIMARY KEY(id)) ENGINE = %s", $engine)))
+        printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));        
+          
+    if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (?, ?)"))
+        printf("[004] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+        
+    $id = null;
+    $label = null;
+    if (!mysqli_stmt_bind_param($stmt, "ib", $id, $label))
+        printf("[005] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+    if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "max_allowed_packet"'))
+        printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));       
+        
+    if (!$row = mysqli_fetch_assoc($res))
+        printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+        
+    mysqli_free_result($res);
+    
+    if (0 === ($max_allowed_packet = (int)$row['Value']))
+        printf("[008] Cannot determine max_allowed_packet size and/or bogus
max_allowed_packet setting used.\n");    
+    
+    // let's ignore upper limits for LONGBLOB (2^32) ...
+    // maximum packet size up to which we test is 10M
+    $tmp = '';
+    $blob = '';
+    for ($i = 0; $i < 1024; $i++) {
+        $tmp .= 'a';
+    }
+    
+    $limit = min(floor($max_allowed_packet / 1024 / 2), 10240);    
+    for ($i = 0; $i < $limit; $i++)
+        $blob .= $tmp;   
+    
+    assert(strlen($blob) <= $max_allowed_packet);
+    
+    if (true !== ($tmp = mysqli_stmt_send_long_data($stmt, 1, $blob)))
+        printf("[009] Expecting boolean/true, got %s/%s. [%d] %s\n",
+            gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));    
+
+    $id = 1;
+    if (true !== mysqli_stmt_execute($stmt))
+        printf("[010] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));   
    
+        
+    if (floor($max_allowed_packet / 1024 / 2) <= 10240) {
+        // test with a blob smaller than 10M allows us to test 
+        // for too long packages without wasting too much memory
+        $limit = $max_allowed_packet - strlen($blob) + 1;
+        $blob2 = $blob;
+        for ($i = 0; $i < $limit; $i++)
+            $blob2 .= 'b';
+            
+        assert(strlen($blob2) > $max_allowed_packet);            
+            
+        if (false !== ($tmp = mysqli_stmt_send_long_data($stmt, 1, $blob2)))
+            printf("[011] Expecting boolean/false, got %s/%s. [%d] %s\n",
+                gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+                            
+        $id = 2;
+        if (false !== ($tmp = mysqli_stmt_execute($stmt)))
+            printf("[012] Expecting boolean/false, got %s/%s, [%d] %s\n", 
+                gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+    }   
+    mysqli_stmt_close($stmt);            
+    mysqli_close($link); 
+       
+    print "done!";
+?>
+--EXPECTF--
+done!
\ No newline at end of file

Added: trunk/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_mysqlnd.phpt
===================================================================
--- trunk/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_mysqlnd.phpt	2007-03-15
10:01:05 UTC (rev 147)
+++ trunk/ext/mysqli/tests/mysqli_stmt_send_long_data_packet_size_mysqlnd.phpt	2007-03-15
10:40:14 UTC (rev 148)
@@ -0,0 +1,94 @@
+--TEST--
+mysqli_stmt_send_long_data() - exceed packet size, mysqlnd
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+<?php 
+require_once('skipifemb.inc'); 
+if (!stristr(mysqli_get_client_info(), 'mysqlnd'))
+    die("skip: warnings only available in mysqlnd");
+
+?>
+--FILE--
+<?php
+    include "connect.inc";
+    require('table.inc');       
+    
+    if (!$stmt = mysqli_stmt_init($link))
+        printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));   
+        
+    if (!mysqli_query($link, "DROP TABLE IF EXISTS test"))
+        printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+        
+    if (!mysqli_query($link, sprintf("CREATE TABLE test(id INT NOT NULL AUTO_INCREMENT,
label LONGBLOB, PRIMARY KEY(id)) ENGINE = %s", $engine)))
+        printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));        
+          
+    if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (?, ?)"))
+        printf("[004] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+        
+    $id = null;
+    $label = null;
+    if (!mysqli_stmt_bind_param($stmt, "ib", $id, $label))
+        printf("[005] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+
+    if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "max_allowed_packet"'))
+        printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));       
+        
+    if (!$row = mysqli_fetch_assoc($res))
+        printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
+        
+    mysqli_free_result($res);
+    
+    if (0 === ($max_allowed_packet = (int)$row['Value']))
+        printf("[008] Cannot determine max_allowed_packet size and/or bogus
max_allowed_packet setting used.\n");    
+    
+    // let's ignore upper limits for LONGBLOB (2^32) ...
+    // maximum packet size up to which we test is 10M
+    $tmp = '';
+    $blob = '';
+    for ($i = 0; $i < 1024; $i++) {
+        $tmp .= 'a';
+    }
+    
+    $limit = min(floor($max_allowed_packet / 1024 / 2), 10240);    
+    for ($i = 0; $i < $limit; $i++)
+        $blob .= $tmp;   
+    
+    assert(strlen($blob) <= $max_allowed_packet);
+    
+    if (true !== ($tmp = mysqli_stmt_send_long_data($stmt, 1, $blob)))
+        printf("[009] Expecting boolean/true, got %s/%s. [%d] %s\n",
+            gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));    
+
+    $id = 1;
+    if (true !== mysqli_stmt_execute($stmt))
+        printf("[010] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));   
    
+        
+    if (floor($max_allowed_packet / 1024 / 2) <= 10240) {
+        // test with a blob smaller than 10M allows us to test 
+        // for too long packages without wasting too much memory
+        $limit = $max_allowed_packet - strlen($blob) + 1;
+        $blob2 = $blob;
+        for ($i = 0; $i < $limit; $i++)
+            $blob2 .= 'b';
+            
+        assert(strlen($blob2) > $max_allowed_packet);            
+            
+        if (false !== ($tmp = mysqli_stmt_send_long_data($stmt, 1, $blob2)))
+            printf("[011] Expecting boolean/false, got %s/%s. [%d] %s\n",
+                gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+                            
+        $id = 2;
+        if (false !== ($tmp = mysqli_stmt_execute($stmt)))
+            printf("[012] Expecting boolean/false, got %s/%s, [%d] %s\n", 
+                gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
+    }   
+    mysqli_stmt_close($stmt);            
+    mysqli_close($link); 
+       
+    print "done!";
+?>
+--EXPECTF--
+Warning: mysqli_stmt_send_long_data(): Skipped %d bytes. Last command STMT_SEND_LONG_DATA
hasn't consumed all the output from the server in %s on line %d
+
+Warning: mysqli_stmt_send_long_data(): There was an error while sending long data.
Probably max_allowed_packet_size is smaller than the data. You have to increase it or
send smaller chunks of data. Answer was %d bytes long. in %s on line %d
+done!
\ No newline at end of file

Thread
PHP mysqlnd svn commit: r148 - trunk/ext/mysqli/testsuwendel15 Mar