use of io.vertx.sqlclient.RowSet in project raml-module-builder by folio-org.
the class PostgresClientIT method postgresClientQueryReturnBadResults.
/**
* @return a PostgresClient where invoking SQLConnection::queryWithParams will return null ResultSet
*/
private PostgresClient postgresClientQueryReturnBadResults() {
PgConnection pgConnection = new PgConnection() {
@Override
public PgConnection notificationHandler(Handler<PgNotification> handler) {
return null;
}
@Override
public PgConnection cancelRequest(Handler<AsyncResult<Void>> handler) {
return this;
}
@Override
public int processId() {
return 0;
}
@Override
public int secretKey() {
return 0;
}
@Override
public PgConnection prepare(String s, Handler<AsyncResult<PreparedStatement>> handler) {
return null;
}
@Override
public Future<PreparedStatement> prepare(String s) {
return null;
}
@Override
public SqlConnection prepare(String sql, PrepareOptions options, Handler<AsyncResult<PreparedStatement>> handler) {
return null;
}
@Override
public Future<PreparedStatement> prepare(String sql, PrepareOptions options) {
return null;
}
@Override
public PgConnection exceptionHandler(Handler<Throwable> handler) {
return null;
}
@Override
public PgConnection closeHandler(Handler<Void> handler) {
return null;
}
@Override
public void begin(Handler<AsyncResult<Transaction>> handler) {
}
@Override
public Future<Transaction> begin() {
return null;
}
@Override
public boolean isSSL() {
return false;
}
@Override
public void close(Handler<AsyncResult<Void>> handler) {
}
@Override
public Query<RowSet<Row>> query(String s) {
return null;
}
@Override
public PreparedQuery<RowSet<Row>> preparedQuery(String s) {
return null;
}
@Override
public PreparedQuery<RowSet<Row>> preparedQuery(String sql, PrepareOptions options) {
return preparedQuery(sql);
}
@Override
public Future<Void> close() {
return null;
}
@Override
public DatabaseMetadata databaseMetadata() {
return null;
}
};
PgPool client = new PgPoolBase() {
@Override
public Future<SqlConnection> getConnection() {
return Future.succeededFuture(pgConnection);
}
};
try {
PostgresClient postgresClient = new PostgresClient(vertx, TENANT);
postgresClient.setClient(client);
return postgresClient;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
use of io.vertx.sqlclient.RowSet in project raml-module-builder by folio-org.
the class PostgresClientMockTest method testGetById.
@Test
public void testGetById(TestContext context) {
String table = "a";
String id = UUID.randomUUID().toString();
PostgresClient pc = spy(PostgresClient.testClient());
// mock empty query result
@SuppressWarnings("unchecked") RowSet<Row> mockRowSet = mock(RowSet.class);
when(mockRowSet.size()).thenReturn(0);
@SuppressWarnings("unchecked") PreparedQuery<RowSet<Row>> mockPreparedQuery = mock(PreparedQuery.class);
when(mockPreparedQuery.execute(any(Tuple.class))).thenReturn(Future.succeededFuture(mockRowSet));
PgConnection mockPgConnection = mock(PgConnection.class);
when(mockPgConnection.preparedQuery(anyString())).thenReturn(mockPreparedQuery);
PgPool mockPgPool = mock(PgPool.class);
when(mockPgPool.getConnection()).thenReturn(Future.succeededFuture(mockPgConnection));
when(pc.getClient()).thenReturn(mockPgPool);
SQLConnection mockSQLConnection = new SQLConnection(mockPgConnection, null, null);
AsyncResult<SQLConnection> mockConn = Future.succeededFuture(mockSQLConnection);
// tests
pc.getByIdAsString(table, id, context.asyncAssertSuccess());
pc.getByIdAsString(mockConn, table, id, context.asyncAssertSuccess());
pc.getByIdAsStringForUpdate(mockConn, table, id, context.asyncAssertSuccess());
pc.getById(table, id, context.asyncAssertSuccess());
pc.getById(mockConn, table, id, context.asyncAssertSuccess());
pc.getByIdForUpdate(mockConn, table, id, context.asyncAssertSuccess());
pc.getById(table, id, Map.class, context.asyncAssertSuccess());
pc.getById(mockConn, table, id, Map.class, context.asyncAssertSuccess());
pc.getByIdForUpdate(mockConn, table, id, Map.class, context.asyncAssertSuccess());
// mock query result
String jsonString = "{\"id\": \"abc\"}";
when(mockRowSet.size()).thenReturn(1);
@SuppressWarnings("unchecked") RowIterator<Row> mockRowIterator = mock(RowIterator.class);
Row mockRow = mock(Row.class);
when(mockRowSet.iterator()).thenReturn(mockRowIterator);
when(mockRowIterator.next()).thenReturn(mockRow);
when(mockRow.getValue(anyInt())).thenReturn(jsonString);
// tests
pc.getByIdAsString(table, id, assertGetByIdAsString(context));
pc.getByIdAsString(mockConn, table, id, assertGetByIdAsString(context));
pc.getByIdAsStringForUpdate(mockConn, table, id, assertGetByIdAsString(context));
pc.getById(table, id, assertGetByIdAsJson(context));
pc.getById(mockConn, table, id, assertGetByIdAsJson(context));
pc.getByIdForUpdate(mockConn, table, id, assertGetByIdAsJson(context));
pc.getById(table, id, Map.class, assertGetByIdAsObject(context));
pc.getById(mockConn, table, id, Map.class, assertGetByIdAsObject(context));
pc.getByIdForUpdate(mockConn, table, id, Map.class, assertGetByIdAsObject(context));
// test exceptions
pc.getByIdAsString(Future.failedFuture("fail"), table, id, context.asyncAssertFailure());
when(mockPgPool.getConnection()).thenReturn(Future.failedFuture("fail"));
pc.getByIdAsString(table, id, context.asyncAssertFailure());
when(mockPreparedQuery.execute(any(Tuple.class))).thenReturn(Future.failedFuture("fail"));
pc.getByIdAsString(mockConn, table, id, context.asyncAssertFailure());
when(mockPreparedQuery.execute(any(Tuple.class))).thenReturn(Future.succeededFuture(mockRowSet));
when(mockRow.getValue(anyInt())).thenThrow(new RuntimeException("fail"));
pc.getByIdAsString(mockConn, table, id, context.asyncAssertFailure());
pc.getByIdAsString(mockConn, table, "1", context.asyncAssertFailure());
}
use of io.vertx.sqlclient.RowSet in project raml-module-builder by folio-org.
the class PostgresClientTransactionsIT method postgresClientMonitor.
private PostgresClient postgresClientMonitor(AtomicInteger open, AtomicInteger active) {
try {
PostgresClient postgresClient = new PostgresClient(vertx, tenant);
PgPool ePool = postgresClient.getClient();
PgPool client = new PgPoolBase() {
@Override
public Future<SqlConnection> getConnection() {
return ePool.getConnection().map(conn -> new MonitorPgConnection((PgConnection) conn, open, active));
}
@Override
public Query<RowSet<Row>> query(String s) {
return ePool.query(s);
}
@Override
public PreparedQuery<RowSet<Row>> preparedQuery(String s) {
return ePool.preparedQuery(s);
}
@Override
public Future<Void> close() {
return ePool.close();
}
};
postgresClient.setClient(client);
return postgresClient;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
use of io.vertx.sqlclient.RowSet in project raml-module-builder by folio-org.
the class PostgresClientIT method maxPoolSize.
/**
* Each connection runs pg_sleep(1) that takes 1 second.
* Setting maxPoolSize=90 runs them in parallel so that it
* completes within 5 seconds.
*
* <p>If you want to test with a higher maxPoolSize you
* need to increase max_connections so that maxPoolSize is within
* (max_connections - superuser_reserved_connections):
* <a href="https://www.postgresql.org/docs/current/runtime-config-connection.html">
* https://www.postgresql.org/docs/current/runtime-config-connection.html</a>
*/
// milliseconds
@Test(timeout = 5000)
public void maxPoolSize(TestContext context) {
int maxPoolSize = 90;
postgresClient = createA(context, TENANT);
JsonObject configuration = postgresClient.getConnectionConfig().copy().put("maxPoolSize", maxPoolSize);
postgresClient.setClient(PostgresClient.createPgPool(vertx, configuration));
List<Future> futures = new ArrayList<>();
for (int i = 0; i < maxPoolSize; i++) {
futures.add(Future.<RowSet<Row>>future(promise -> postgresClient.execute("SELECT pg_sleep(1)", promise)));
}
CompositeFuture.all(futures).onComplete(context.asyncAssertSuccess());
}
use of io.vertx.sqlclient.RowSet in project raml-module-builder by folio-org.
the class PostgresClientIT method saveBatchJson.
@Test
public void saveBatchJson(TestContext context) {
String id = randomUuid();
JsonArray array = new JsonArray().add("{ \"x\" : \"a\" }").add("{ \"y\" : \"z\", \"id\": \"" + id + "\" }").add("{ \"z\" : \"'\" }");
createFoo(context).saveBatch(FOO, array, context.asyncAssertSuccess(res -> {
// iterate over all RowSets in batch result to get total count
RowSet<Row> resCurrent = res;
int total = 0;
while (resCurrent != null) {
total += resCurrent.size();
resCurrent = resCurrent.next();
}
context.assertEquals(3, total);
context.assertEquals("id", res.columnsNames().get(0));
// second set
Row row = res.next().iterator().next();
context.assertEquals(id, row.getValue("id").toString());
postgresClient.getById(FOO, id, context.asyncAssertSuccess(get -> {
context.assertEquals("z", get.getString("y"));
}));
}));
}
Aggregations