Skip to content

Commit b1ed485

Browse files
ztarvosTotktonada
authored andcommitted
jdbc: fix tests on tarantool 2.1
Updated jdbc tests following static SQL types introduction into tarantool 2.1. Closes #90
1 parent 935093d commit b1ed485

10 files changed

+513
-203
lines changed

src/test/java/org/tarantool/TestUtils.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,23 @@ public static void waitReplication(TarantoolClientImpl client, int timeout) {
7171
}
7272
}
7373

74+
public static String toHex(byte[] bytes) {
75+
StringBuilder sb = new StringBuilder(2 * bytes.length);
76+
for (byte b : bytes) {
77+
sb.append(String.format("%02x", b));
78+
}
79+
return sb.toString();
80+
}
81+
82+
public static byte[] fromHex(String hex) {
83+
assert hex.length() % 2 == 0;
84+
byte[] data = new byte[hex.length() / 2];
85+
for (int i = 0; i < data.length; i++) {
86+
data[i] = Integer.decode("0x" + hex.charAt(i*2) + hex.charAt(i*2+1)).byteValue();
87+
}
88+
return data;
89+
}
90+
7491
/**
7592
* See waitReplication(TarantoolClientImpl client, int timeout).
7693
*/

src/test/java/org/tarantool/jdbc/AbstractJdbcIT.java

Lines changed: 4 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,18 @@
77
import org.tarantool.TarantoolConnection;
88

99
import java.io.IOException;
10-
import java.math.BigDecimal;
11-
import java.math.BigInteger;
1210
import java.net.InetSocketAddress;
1311
import java.net.Socket;
1412
import java.sql.Connection;
15-
import java.sql.Date;
1613
import java.sql.DriverManager;
1714
import java.sql.SQLException;
18-
import java.sql.Time;
19-
import java.sql.Timestamp;
2015
import java.util.Arrays;
2116
import java.util.Collections;
2217
import java.util.List;
2318

2419
import static org.junit.jupiter.api.Assertions.assertNotNull;
2520
import static org.tarantool.TestUtils.makeInstanceEnv;
21+
import static org.tarantool.jdbc.SqlTestUtils.getCreateTableSQL;
2622

2723
import org.tarantool.TarantoolControl;
2824

@@ -41,50 +37,8 @@ public abstract class AbstractJdbcIT {
4137
private static String[] initSql = new String[] {
4238
"CREATE TABLE test(id INT PRIMARY KEY, val VARCHAR(100))",
4339
"INSERT INTO test VALUES (1, 'one'), (2, 'two'), (3, 'three')",
44-
45-
"CREATE TABLE test_types(" +
46-
"f1 INT PRIMARY KEY, " +
47-
"f2 CHAR(4), " +
48-
"f3 VARCHAR(100), " +
49-
"f4 LONGVARCHAR(100), " +
50-
"f5 NUMERIC, " +
51-
"f6 DECIMAL, " +
52-
"f7 BIT, " +
53-
"f8 TINYINT, " +
54-
"f9 SMALLINT, " +
55-
"f10 INTEGER, " +
56-
"f11 BIGINT," +
57-
"f12 REAL, " +
58-
"f13 FLOAT, " +
59-
"f14 BINARY(4), " +
60-
"f15 VARBINARY(128), " +
61-
"f16 LONGVARBINARY(2048), " +
62-
"f17 DATE, " +
63-
"f18 TIME, " +
64-
"f19 TIMESTAMP)",
65-
66-
"INSERT INTO test_types VALUES(" +
67-
"1," +
68-
"'abcd'," + //CHAR
69-
"'000000000000000000001'," + //VARCHAR
70-
"'0000000000000000000000000000000001'," + //LONGVARCHAR
71-
"100," + // NUMERIC
72-
"100.1," + // DECIMAL
73-
"1," + //BIT
74-
"7," + //TINYINT
75-
"1000," + //SMALLINT
76-
"100," + //INTEGER
77-
"100000000000000000," + //BIGINT
78-
"-100.2," + //REAL
79-
"100.3," + //FLOAT
80-
"X'01020304'," + //BINARY
81-
"X'0102030405'," +//VARBINARY
82-
"X'010203040506'," + //LONGVARBINARY
83-
"'1983-03-14'," + //DATE
84-
"'12:01:06'," + //TIME
85-
"129479994)", //TIMESTAMP
86-
87-
"CREATE TABLE test_compound(id1 INT, id2 INT, val VARCHAR(100), PRIMARY KEY (id2, id1))"
40+
"CREATE TABLE test_compound(id1 INT, id2 INT, val VARCHAR(100), PRIMARY KEY (id2, id1))",
41+
getCreateTableSQL("test_types", TntSqlType.values())
8842
};
8943

9044
private static String[] cleanSql = new String[] {
@@ -93,28 +47,6 @@ public abstract class AbstractJdbcIT {
9347
"DROP TABLE IF EXISTS test_compound"
9448
};
9549

96-
static Object[] testRow = new Object[] {
97-
1,
98-
"abcd",
99-
"000000000000000000001",
100-
"0000000000000000000000000000000001",
101-
BigDecimal.valueOf(100),
102-
BigDecimal.valueOf(100.1),
103-
Boolean.FALSE,
104-
(byte)7,
105-
(short)1000,
106-
100,
107-
100000000000000000L,
108-
-100.2f,
109-
100.3d,
110-
new BigInteger("01020304", 16).toByteArray(),
111-
new BigInteger("0102030405", 16).toByteArray(),
112-
new BigInteger("010203040506", 16).toByteArray(),
113-
Date.valueOf("1983-03-14"),
114-
Time.valueOf("12:01:06"),
115-
new Timestamp(129479994)
116-
};
117-
11850
protected static TarantoolControl control;
11951
Connection conn;
12052

@@ -151,7 +83,7 @@ public void tearDownConnection() throws SQLException {
15183
conn.close();
15284
}
15385

154-
private static void sqlExec(String[] text) {
86+
protected static void sqlExec(String... text) {
15587
TarantoolConnection con = makeConnection();
15688
try {
15789
for (String cmd : text)

src/test/java/org/tarantool/jdbc/JdbcDatabaseMetaDataIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ public void testGetAllTables() throws SQLException {
4646
assertEquals("TEST", rs.getString("TABLE_NAME"));
4747

4848
assertTrue(rs.next());
49-
assertEquals("TEST_TYPES", rs.getString("TABLE_NAME"));
49+
assertEquals("TEST_COMPOUND", rs.getString("TABLE_NAME"));
5050

5151
assertTrue(rs.next());
52-
assertEquals("TEST_COMPOUND", rs.getString("TABLE_NAME"));
52+
assertEquals("TEST_TYPES", rs.getString("TABLE_NAME"));
5353

5454
assertFalse(rs.next());
5555

src/test/java/org/tarantool/jdbc/JdbcPreparedStatementIT.java

Lines changed: 77 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.tarantool.jdbc;
22

3+
import org.junit.jupiter.api.Disabled;
34
import org.junit.jupiter.api.Test;
45
import org.junit.jupiter.api.AfterEach;
56
import org.junit.jupiter.api.function.Executable;
@@ -9,8 +10,6 @@
910
import java.sql.PreparedStatement;
1011
import java.sql.ResultSet;
1112
import java.sql.SQLException;
12-
import java.sql.Time;
13-
import java.sql.Timestamp;
1413

1514
import static org.junit.jupiter.api.Assertions.assertEquals;
1615
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -20,7 +19,7 @@
2019
import static org.junit.jupiter.api.Assertions.assertTrue;
2120
import static org.junit.jupiter.api.Assertions.fail;
2221

23-
public class JdbcPreparedStatementIT extends AbstractJdbcIT {
22+
public class JdbcPreparedStatementIT extends JdbcTypesIT {
2423
private PreparedStatement prep;
2524

2625
@AfterEach
@@ -73,68 +72,6 @@ public void testExecuteUpdate() throws Exception {
7372
assertEquals("thousand", getRow("test", 1000).get(1));
7473
}
7574

76-
@Test
77-
public void testSetParameter() throws SQLException {
78-
prep = conn.prepareStatement("INSERT INTO test_types VALUES (" +
79-
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
80-
assertNotNull(prep);
81-
82-
prep.setInt(1, 1000);//INT
83-
prep.setString(2, (String)testRow[1]);//CHAR
84-
prep.setString(3, (String)testRow[2]);//VARCHAR
85-
prep.setString(4, (String)testRow[3]);//LONGVARCHAR
86-
prep.setBigDecimal(5, (BigDecimal)testRow[4]);//NUMERIC
87-
prep.setBigDecimal(6, (BigDecimal)testRow[5]);//DECIMAL
88-
prep.setBoolean(7, (Boolean)testRow[6]);//BIT
89-
prep.setByte(8, (Byte)testRow[7]);//TINYINT
90-
prep.setShort(9, (Short)testRow[8]);//SMALLINT
91-
prep.setInt(10, (Integer)testRow[9]);//INTEGER
92-
prep.setLong(11, (Long)testRow[10]);//BIGINT
93-
prep.setFloat(12, (Float)testRow[11]);//REAL
94-
prep.setDouble(13, (Double)testRow[12]);//FLOAT
95-
prep.setBytes(14, (byte[])testRow[13]);//BINARY
96-
prep.setBytes(15, (byte[])testRow[14]);//VARBINARY
97-
prep.setBytes(16, (byte[])testRow[15]);//LONGVARBINARY
98-
prep.setDate(17, (Date)testRow[16]);//DATE
99-
prep.setTime(18, (Time)testRow[17]);//TIME
100-
prep.setTimestamp(19, (Timestamp)testRow[18]);//TIMESTAMP
101-
102-
int count = prep.executeUpdate();
103-
assertEquals(1, count);
104-
105-
prep.close();
106-
107-
prep = conn.prepareStatement("SELECT * FROM test_types WHERE f1 = ?");
108-
prep.setInt(1, 1000);
109-
110-
ResultSet rs = prep.executeQuery();
111-
assertNotNull(rs);
112-
113-
assertTrue(rs.next());
114-
assertEquals(1000, rs.getInt(1));//INT
115-
assertEquals(testRow[1], rs.getString(2));//CHAR
116-
assertEquals(testRow[2], rs.getString(3));//VARCHAR
117-
assertEquals(testRow[3], rs.getString(4)); //LONGVARCHAR
118-
assertEquals(testRow[4], rs.getBigDecimal(5));//NUMERIC
119-
assertEquals(testRow[5], rs.getBigDecimal(6));//DECIMAL
120-
assertEquals(testRow[6], rs.getBoolean(7));//BIT
121-
assertEquals(testRow[7], rs.getByte(8));//TINYINT
122-
assertEquals(testRow[8], rs.getShort(9));//SMALLINT
123-
assertEquals(testRow[9], rs.getInt(10));//INTEGER
124-
assertEquals(testRow[10], rs.getLong(11));//BIGINT
125-
assertEquals((Float)testRow[11], rs.getFloat(12), 1e-10f);//REAL
126-
assertEquals((Double)testRow[12], rs.getDouble(13), 1e-10d);//FLOAT
127-
//Issue#45
128-
//assertTrue(Arrays.equals((byte[])testRow[13], rs.getBytes(14)));//BINARY
129-
//assertTrue(Arrays.equals((byte[])testRow[14], rs.getBytes(15)));//VARBINARY
130-
//assertTrue(Arrays.equals((byte[])testRow[15], rs.getBytes(16)));//LONGVARBINARY
131-
assertEquals(testRow[16], rs.getDate(17));//DATE
132-
assertEquals(testRow[17], rs.getTime(18));//TIME
133-
assertEquals(testRow[18], rs.getTimestamp(19));//TIMESTAMP
134-
135-
rs.close();
136-
}
137-
13875
@Test
13976
public void testExecuteReturnsResultSet() throws SQLException {
14077
prep = conn.prepareStatement("SELECT val FROM test WHERE id=?");
@@ -224,4 +161,79 @@ public void execute() throws Throwable {
224161
}
225162
assertEquals(3, i);
226163
}
164+
165+
@Test
166+
public void testSetByte() throws SQLException {
167+
makeHelper(Byte.class)
168+
.setColumns(TntSqlType.INT, TntSqlType.INTEGER)
169+
.setValues(BYTE_VALS)
170+
.testSetParameter();
171+
}
172+
173+
@Test
174+
public void testSetInt() throws SQLException {
175+
makeHelper(Integer.class)
176+
.setColumns(TntSqlType.INT, TntSqlType.INTEGER)
177+
.setValues(INT_VALS)
178+
.testSetParameter();
179+
}
180+
181+
@Test
182+
public void testSetLong() throws SQLException {
183+
makeHelper(Long.class)
184+
.setColumns(TntSqlType.INT, TntSqlType.INTEGER)
185+
.setValues(LONG_VALS)
186+
.testSetParameter();
187+
}
188+
189+
@Test
190+
public void testSetString() throws SQLException {
191+
makeHelper(String.class)
192+
.setColumns(TntSqlType.CHAR, TntSqlType.VARCHAR, TntSqlType.TEXT)
193+
.setValues(STRING_VALS)
194+
.testSetParameter();
195+
}
196+
197+
@Test
198+
public void testSetFloat() throws SQLException {
199+
makeHelper(Float.class)
200+
.setColumns(TntSqlType.REAL)
201+
.setValues(FLOAT_VALS)
202+
.testSetParameter();
203+
}
204+
205+
@Test
206+
public void testSetDouble() throws SQLException {
207+
makeHelper(Double.class)
208+
.setColumns(TntSqlType.FLOAT, TntSqlType.DOUBLE)
209+
.setValues(DOUBLE_VALS)
210+
.testSetParameter();
211+
}
212+
213+
@Test
214+
public void testSetBigDecimal() throws SQLException {
215+
makeHelper(BigDecimal.class)
216+
.setColumns(TntSqlType.DECIMAL, TntSqlType.DECIMAL_PREC, TntSqlType.DECIMAL_PREC_SCALE,
217+
TntSqlType.NUMERIC, TntSqlType.NUMERIC_PREC, TntSqlType.NUMERIC_PREC_SCALE,
218+
TntSqlType.NUM, TntSqlType.NUM_PREC, TntSqlType.NUM_PREC_SCALE)
219+
.setValues(BIGDEC_VALS)
220+
.testSetParameter();
221+
}
222+
223+
@Disabled("Issue#45. Binary string is reported back as char string by tarantool")
224+
@Test
225+
public void testSetByteArray() throws SQLException {
226+
makeHelper(byte[].class)
227+
.setColumns(TntSqlType.BLOB)
228+
.setValues(BINARY_VALS)
229+
.testSetParameter();
230+
}
231+
232+
@Test
233+
public void testSetDate() throws SQLException {
234+
makeHelper(Date.class)
235+
.setColumns(TntSqlType.INT, TntSqlType.INTEGER)
236+
.setValues(DATE_VALS)
237+
.testSetParameter();
238+
}
227239
}

0 commit comments

Comments
 (0)