1 /* 2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License, version 2.0, 6 * as published by the Free Software Foundation. 7 * 8 * This program is also distributed with certain software (including 9 * but not limited to OpenSSL) that is licensed under separate terms, 10 * as designated in a particular file or component or in included license 11 * documentation. The authors of MySQL hereby grant you an additional 12 * permission to link the program and your derivative works with the 13 * separately licensed software that they have included with MySQL. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License, version 2.0, for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 23 */ 24 25 package testsuite.clusterj; 26 27 import java.sql.PreparedStatement; 28 import java.sql.ResultSet; 29 import java.sql.SQLException; 30 import java.util.List; 31 32 import testsuite.clusterj.model.IdBase; 33 import testsuite.clusterj.model.VarbinaryTypes; 34 35 /** Test that Timestamps can be read and written. 36 * case 1: Write using JDBC, read using NDB. 37 * case 2: Write using NDB, read using JDBC. 38 * Schema 39 * 40 drop table if exists varbinarytypes; 41 create table varbinarytypes ( 42 id int not null primary key, 43 44 binary1 varbinary(1), 45 binary2 varbinary(2), 46 binary4 varbinary(4), 47 binary8 varbinary(8), 48 binary16 varbinary(16), 49 binary32 varbinary(32), 50 binary64 varbinary(64), 51 binary128 varbinary(128), 52 binary256 varbinary(256), 53 binary512 varbinary(512), 54 binary1024 varbinary(1024), 55 binary2048 varbinary(2048) 56 57 ) ENGINE=ndbcluster DEFAULT CHARSET=latin1; 58 59 */ 60 public class VarbinaryTypesTest extends AbstractClusterJModelTest { 61 62 static int NUMBER_OF_INSTANCES = 10; 63 64 @Override getDebug()65 protected boolean getDebug() { 66 return false; 67 } 68 69 @Override getNumberOfInstances()70 protected int getNumberOfInstances() { 71 return NUMBER_OF_INSTANCES; 72 } 73 74 @Override getTableName()75 protected String getTableName() { 76 return "varbinarytypes"; 77 } 78 79 /** Subclasses override this method to provide the model class for the test */ 80 @Override getModelClass()81 Class<? extends IdBase> getModelClass() { 82 return VarbinaryTypes.class; 83 } 84 85 /** Subclasses override this method to provide values for rows (i) and columns (j) */ 86 @Override getColumnValue(int i, int j)87 protected Object getColumnValue(int i, int j) { 88 // first calculate the length of the data 89 int length = (int)Math.pow(2, j); 90 byte[] data = new byte[length]; 91 // fill in the data, increasing by one for each row, column, and byte in the byte[] 92 for (int d = 0; d < length; ++d) { 93 data[d] = (byte)(i + j + d); 94 } 95 return data; 96 } 97 98 /** Verify that the actual results match the expected results. If not, use the multiple error 99 * reporting method errorIfNotEqual defined in the superclass. 100 * @param where the location of the verification of results, normally the name of the test method 101 * @param expecteds the expected results 102 * @param actuals the actual results 103 */ 104 @Override verify(String where, List<Object[]> expecteds, List<Object[]> actuals)105 protected void verify(String where, List<Object[]> expecteds, List<Object[]> actuals) { 106 for (int i = 0; i < expecteds.size(); ++i) { 107 Object[] expected = expecteds.get(i); 108 Object[] actual = actuals.get(i); 109 errorIfNotEqual(where + " got failure on id for row " + i, i, actual[0]); 110 for (int j = 1; j < expected.length; ++j) { 111 // verify each object in the array 112 byte[] expectedColumn = (byte[])(expected)[j]; 113 byte[] actualColumn = (byte[])(actual)[j]; 114 errorIfNotEqual(where + " got failure on length of data for row " + i, 115 expectedColumn.length, actualColumn.length); 116 if (expectedColumn.length == actualColumn.length) { 117 // now compare byte by byte 118 for (j = 0; j < expectedColumn.length; ++j) 119 errorIfNotEqual(where + " got failure on comparison of data for row " 120 + i + " column " + j, 121 expectedColumn[j], actualColumn[j]); 122 } 123 } 124 } 125 } 126 testWriteJDBCReadNDB()127 public void testWriteJDBCReadNDB() { 128 writeJDBCreadNDB(); 129 failOnError(); 130 } 131 testWriteNDBReadJDBC()132 public void testWriteNDBReadJDBC() { 133 writeNDBreadJDBC(); 134 failOnError(); 135 } 136 137 static ColumnDescriptor binary1 = new ColumnDescriptor 138 ("binary1", new InstanceHandler() { 139 public void setFieldValue(IdBase instance, Object value) { 140 ((VarbinaryTypes)instance).setBinary1((byte[])value); 141 } 142 public Object getFieldValue(IdBase instance) { 143 return ((VarbinaryTypes)instance).getBinary1(); 144 } 145 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 146 throws SQLException { 147 preparedStatement.setBytes(j, (byte[])value); 148 } 149 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 150 return rs.getBytes(j); 151 } 152 }); 153 154 static ColumnDescriptor binary2 = new ColumnDescriptor 155 ("binary2", new InstanceHandler() { 156 public void setFieldValue(IdBase instance, Object value) { 157 ((VarbinaryTypes)instance).setBinary2((byte[])value); 158 } 159 public Object getFieldValue(IdBase instance) { 160 return ((VarbinaryTypes)instance).getBinary2(); 161 } 162 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 163 throws SQLException { 164 preparedStatement.setBytes(j, (byte[])value); 165 } 166 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 167 return rs.getBytes(j); 168 } 169 }); 170 171 static ColumnDescriptor binary4 = new ColumnDescriptor 172 ("binary4", new InstanceHandler() { 173 public void setFieldValue(IdBase instance, Object value) { 174 ((VarbinaryTypes)instance).setBinary4((byte[])value); 175 } 176 public Object getFieldValue(IdBase instance) { 177 return ((VarbinaryTypes)instance).getBinary4(); 178 } 179 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 180 throws SQLException { 181 preparedStatement.setBytes(j, (byte[])value); 182 } 183 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 184 return rs.getBytes(j); 185 } 186 }); 187 188 static ColumnDescriptor binary8 = new ColumnDescriptor 189 ("binary8", new InstanceHandler() { 190 public void setFieldValue(IdBase instance, Object value) { 191 ((VarbinaryTypes)instance).setBinary8((byte[])value); 192 } 193 public Object getFieldValue(IdBase instance) { 194 return ((VarbinaryTypes)instance).getBinary8(); 195 } 196 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 197 throws SQLException { 198 preparedStatement.setBytes(j, (byte[])value); 199 } 200 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 201 return rs.getBytes(j); 202 } 203 }); 204 205 static ColumnDescriptor binary16 = new ColumnDescriptor 206 ("binary16", new InstanceHandler() { 207 public void setFieldValue(IdBase instance, Object value) { 208 ((VarbinaryTypes)instance).setBinary16((byte[])value); 209 } 210 public Object getFieldValue(IdBase instance) { 211 return ((VarbinaryTypes)instance).getBinary16(); 212 } 213 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 214 throws SQLException { 215 preparedStatement.setBytes(j, (byte[])value); 216 } 217 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 218 return rs.getBytes(j); 219 } 220 }); 221 222 static ColumnDescriptor binary32 = new ColumnDescriptor 223 ("binary32", new InstanceHandler() { 224 public void setFieldValue(IdBase instance, Object value) { 225 ((VarbinaryTypes)instance).setBinary32((byte[])value); 226 } 227 public Object getFieldValue(IdBase instance) { 228 return ((VarbinaryTypes)instance).getBinary32(); 229 } 230 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 231 throws SQLException { 232 preparedStatement.setBytes(j, (byte[])value); 233 } 234 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 235 return rs.getBytes(j); 236 } 237 }); 238 239 static ColumnDescriptor binary64 = new ColumnDescriptor 240 ("binary64", new InstanceHandler() { 241 public void setFieldValue(IdBase instance, Object value) { 242 ((VarbinaryTypes)instance).setBinary64((byte[])value); 243 } 244 public Object getFieldValue(IdBase instance) { 245 return ((VarbinaryTypes)instance).getBinary64(); 246 } 247 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 248 throws SQLException { 249 preparedStatement.setBytes(j, (byte[])value); 250 } 251 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 252 return rs.getBytes(j); 253 } 254 }); 255 256 static ColumnDescriptor binary128 = new ColumnDescriptor 257 ("binary128", new InstanceHandler() { 258 public void setFieldValue(IdBase instance, Object value) { 259 ((VarbinaryTypes)instance).setBinary128((byte[])value); 260 } 261 public Object getFieldValue(IdBase instance) { 262 return ((VarbinaryTypes)instance).getBinary128(); 263 } 264 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 265 throws SQLException { 266 preparedStatement.setBytes(j, (byte[])value); 267 } 268 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 269 return rs.getBytes(j); 270 } 271 }); 272 273 static ColumnDescriptor binary256 = new ColumnDescriptor 274 ("binary256", new InstanceHandler() { 275 public void setFieldValue(IdBase instance, Object value) { 276 ((VarbinaryTypes)instance).setBinary256((byte[])value); 277 } 278 public Object getFieldValue(IdBase instance) { 279 return ((VarbinaryTypes)instance).getBinary256(); 280 } 281 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 282 throws SQLException { 283 preparedStatement.setBytes(j, (byte[])value); 284 } 285 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 286 return rs.getBytes(j); 287 } 288 }); 289 290 static ColumnDescriptor binary512 = new ColumnDescriptor 291 ("binary512", new InstanceHandler() { 292 public void setFieldValue(IdBase instance, Object value) { 293 ((VarbinaryTypes)instance).setBinary512((byte[])value); 294 } 295 public Object getFieldValue(IdBase instance) { 296 return ((VarbinaryTypes)instance).getBinary512(); 297 } 298 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 299 throws SQLException { 300 preparedStatement.setBytes(j, (byte[])value); 301 } 302 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 303 return rs.getBytes(j); 304 } 305 }); 306 307 static ColumnDescriptor binary1024 = new ColumnDescriptor 308 ("binary1024", new InstanceHandler() { 309 public void setFieldValue(IdBase instance, Object value) { 310 ((VarbinaryTypes)instance).setBinary1024((byte[])value); 311 } 312 public Object getFieldValue(IdBase instance) { 313 return ((VarbinaryTypes)instance).getBinary1024(); 314 } 315 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 316 throws SQLException { 317 preparedStatement.setBytes(j, (byte[])value); 318 } 319 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 320 return rs.getBytes(j); 321 } 322 }); 323 324 static ColumnDescriptor binary2048 = new ColumnDescriptor 325 ("binary2048", new InstanceHandler() { 326 public void setFieldValue(IdBase instance, Object value) { 327 ((VarbinaryTypes)instance).setBinary2048((byte[])value); 328 } 329 public Object getFieldValue(IdBase instance) { 330 return ((VarbinaryTypes)instance).getBinary2048(); 331 } 332 public void setPreparedStatementValue(PreparedStatement preparedStatement, int j, Object value) 333 throws SQLException { 334 preparedStatement.setBytes(j, (byte[])value); 335 } 336 public Object getResultSetValue(ResultSet rs, int j) throws SQLException { 337 return rs.getBytes(j); 338 } 339 }); 340 341 protected static ColumnDescriptor[] columnDescriptors = new ColumnDescriptor[] { 342 binary1, 343 binary2, 344 binary4, 345 binary8, 346 binary16, 347 binary32, 348 binary64, 349 binary128, 350 binary256, 351 binary512, 352 binary1024, 353 binary2048 354 }; 355 356 @Override getColumnDescriptors()357 protected ColumnDescriptor[] getColumnDescriptors() { 358 return columnDescriptors; 359 } 360 361 } 362