package testsuite.simple; /* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. The MySQL Connector/J is licensed under the terms of the GPLv2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most MySQL Connectors. There are special exceptions to the terms and conditions of the GPLv2 as it is applied to this software, see the FLOSS License Exception <http://www.mysql.com/about/legal/licensing/foss-exception.html>. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.sql.Connection; import java.sql.Statement; import java.util.Properties; import testsuite.BaseTestCase; public class CompressionTest extends BaseTestCase { public CompressionTest(String name) { super(name); // TODO Auto-generated constructor stub } /** * Tests if useCompress works. * * @throws Exception * if the test fails */ public void testUseCompress() throws Exception { // Original test // Properties props = new Properties(); // props.put("useCompression", "true"); // props.put("traceProtocol", "true"); // Connection conn1 = getConnectionWithProps(props); // Statement stmt1 = conn1.createStatement(); // ResultSet rs1 = stmt1.executeQuery("SELECT VERSION()"); // rs1.next(); // rs1.getString(1); // stmt1.close(); // conn1.close(); File testBlobFile = null; int requiredSize = 0; Properties props = new Properties(); props.put("useCompression", "true"); Connection conn1 = getConnectionWithProps(props); Statement stmt1 = conn1.createStatement(); // Get real value this.rs = stmt1 .executeQuery("SHOW VARIABLES LIKE 'max_allowed_packet'"); this.rs.next(); // Create smaller than maximum allowed BLOB for testing requiredSize = this.rs.getInt(2) / 8; System.out.println("Required size: " + requiredSize); this.rs.close(); // http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_allowed_packet // setting GLOBAL variable during test is not ok // The protocol limit for max_allowed_packet is 1GB. if (testBlobFile == null || testBlobFile.length() != requiredSize) { if (testBlobFile != null && testBlobFile.length() != requiredSize) { testBlobFile.delete(); } testBlobFile = File.createTempFile("cmj-testblob", ".dat"); testBlobFile.deleteOnExit(); cleanupTempFiles(testBlobFile, "cmj-testblob"); BufferedOutputStream bOut = new BufferedOutputStream( new FileOutputStream(testBlobFile)); int dataRange = Byte.MAX_VALUE - Byte.MIN_VALUE; for (int i = 0; i < requiredSize; i++) { bOut.write((byte) ((Math.random() * dataRange) + Byte.MIN_VALUE)); } bOut.flush(); bOut.close(); } createTable("BLOBTEST", "(pos int PRIMARY KEY auto_increment, blobdata LONGBLOB)"); BufferedInputStream bIn = new BufferedInputStream(new FileInputStream( testBlobFile)); this.pstmt = conn1 .prepareStatement("INSERT INTO BLOBTEST(blobdata) VALUES (?)"); this.pstmt.setBinaryStream(1, bIn, (int) testBlobFile.length()); this.pstmt.execute(); this.pstmt.clearParameters(); this.rs = stmt1.executeQuery("SELECT blobdata from BLOBTEST LIMIT 1"); this.rs.next(); if (bIn != null) { bIn.close(); } } }