Search in sources :

Example 1 with XaSqlConnection

use of cn.mycat.vertx.xa.XaSqlConnection in project Mycat2 by MyCATApache.

the class XaTestSuite method beginDoubleTargetInsertButStatementFail.

@Test
public void beginDoubleTargetInsertButStatementFail(VertxTestContext testContext) throws Exception {
    clearData();
    XaSqlConnection baseXaSqlConnection = factory.apply(mySQLManager, xaLog);
    baseXaSqlConnection.begin().onComplete(event -> {
        Assertions.assertTrue(event.succeeded());
        Future<NewMycatConnection> ds1 = baseXaSqlConnection.getConnection("ds1");
        Future<NewMycatConnection> ds2 = baseXaSqlConnection.getConnection("ds2");
        CompositeFuture all = CompositeFuture.join(ds1.compose(connection -> {
            Future<SqlResult> future = connection.insert("INSERT INTO db1.travelrecord (id)\n" + "                       VALUES\n" + "                       (1);");
            return future.compose(rowSet -> {
                Assertions.assertEquals(1, rowSet.getAffectRows());
                return Future.succeededFuture(connection);
            });
        }), ds2.compose(connection -> {
            Future<SqlResult> future = connection.insert("INSERT INTO  (id)\n" + "                       VALUES\n" + "                       (2/0);");
            return future.compose(rowSet -> {
                Assertions.assertEquals(1, rowSet.getAffectRows());
                return Future.succeededFuture(connection);
            });
        }));
        all.onComplete(event13 -> {
            Assertions.assertTrue(event13.failed());
            baseXaSqlConnection.rollback().onComplete(new Handler<AsyncResult<Void>>() {

                @Override
                public void handle(AsyncResult<Void> event) {
                    Assertions.assertTrue(event.succeeded());
                    Assertions.assertFalse(baseXaSqlConnection.isInTransaction());
                    Future<NewMycatConnection> connectionFuture = baseXaSqlConnection.getConnection("ds1");
                    connectionFuture.compose(sqlConnection -> sqlConnection.query("select id from db1.travelrecord")).onComplete(event1 -> {
                        Assertions.assertTrue(event1.succeeded());
                        Assertions.assertEquals(0, event1.result().size());
                        testContext.completeNow();
                    });
                }
            });
        });
    });
}
Also used : CompositeFuture(io.vertx.core.CompositeFuture) VertxTestContext(io.vertx.junit5.VertxTestContext) Connection(java.sql.Connection) RowSet(io.mycat.newquery.RowSet) BiFunction(java.util.function.BiFunction) XaLog(cn.mycat.vertx.xa.XaLog) Disabled(org.junit.jupiter.api.Disabled) Function(java.util.function.Function) CompositeFuture(io.vertx.core.CompositeFuture) SimpleConfig(cn.mycat.vertx.xa.SimpleConfig) SQLException(java.sql.SQLException) SqlConnection(io.vertx.sqlclient.SqlConnection) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Map(java.util.Map) AsyncResult(io.vertx.core.AsyncResult) MySQLManager(cn.mycat.vertx.xa.MySQLManager) JsonUtil(io.mycat.util.JsonUtil) NewMycatConnection(io.mycat.newquery.NewMycatConnection) XaLogImpl(cn.mycat.vertx.xa.impl.XaLogImpl) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) VertxExtension(io.vertx.junit5.VertxExtension) SqlResult(io.mycat.newquery.SqlResult) Future(io.vertx.core.Future) Test(org.junit.jupiter.api.Test) TimeUnit(java.util.concurrent.TimeUnit) List(java.util.List) XaSqlConnection(cn.mycat.vertx.xa.XaSqlConnection) DruidDataSource(com.alibaba.druid.pool.DruidDataSource) JdbcUtils(com.alibaba.druid.util.JdbcUtils) Row(io.vertx.sqlclient.Row) Assertions(org.junit.jupiter.api.Assertions) Handler(io.vertx.core.Handler) Collections(java.util.Collections) NewMycatConnection(io.mycat.newquery.NewMycatConnection) CompositeFuture(io.vertx.core.CompositeFuture) Future(io.vertx.core.Future) AsyncResult(io.vertx.core.AsyncResult) XaSqlConnection(cn.mycat.vertx.xa.XaSqlConnection) Test(org.junit.jupiter.api.Test)

Example 2 with XaSqlConnection

use of cn.mycat.vertx.xa.XaSqlConnection in project Mycat2 by MyCATApache.

the class XaTestSuite method beginCommit.

@Test
public void beginCommit(VertxTestContext testContext) {
    XaSqlConnection baseXaSqlConnection = factory.apply(mySQLManager, xaLog);
    baseXaSqlConnection.begin().onComplete(event -> baseXaSqlConnection.commit().onComplete(new Handler<AsyncResult<Void>>() {

        @Override
        public void handle(AsyncResult<Void> event) {
            Assertions.assertEquals(baseXaSqlConnection.isInTransaction(), false);
            baseXaSqlConnection.close();
            testContext.completeNow();
        }
    }));
}
Also used : Handler(io.vertx.core.Handler) AsyncResult(io.vertx.core.AsyncResult) XaSqlConnection(cn.mycat.vertx.xa.XaSqlConnection) Test(org.junit.jupiter.api.Test)

Example 3 with XaSqlConnection

use of cn.mycat.vertx.xa.XaSqlConnection in project Mycat2 by MyCATApache.

the class XaTestSuite method beginRollback.

@Test
public void beginRollback(VertxTestContext testContext) {
    XaSqlConnection baseXaSqlConnection = factory.apply(mySQLManager, xaLog);
    baseXaSqlConnection.begin().onComplete(event -> baseXaSqlConnection.rollback().onComplete(new Handler<AsyncResult<Void>>() {

        @Override
        public void handle(AsyncResult<Void> event) {
            Assertions.assertEquals(baseXaSqlConnection.isInTransaction(), false);
            baseXaSqlConnection.close();
            testContext.completeNow();
        }
    }));
}
Also used : Handler(io.vertx.core.Handler) AsyncResult(io.vertx.core.AsyncResult) XaSqlConnection(cn.mycat.vertx.xa.XaSqlConnection) Test(org.junit.jupiter.api.Test)

Example 4 with XaSqlConnection

use of cn.mycat.vertx.xa.XaSqlConnection in project Mycat2 by MyCATApache.

the class XaTestSuite method close.

@Test
public void close(VertxTestContext testContext) {
    XaSqlConnection baseXaSqlConnection = factory.apply(mySQLManager, xaLog);
    baseXaSqlConnection.close().onComplete(new Handler<AsyncResult<Void>>() {

        @Override
        public void handle(AsyncResult<Void> event) {
            Assertions.assertTrue(event.succeeded());
            Assertions.assertFalse(baseXaSqlConnection.isInTransaction());
            testContext.completeNow();
        }
    });
}
Also used : AsyncResult(io.vertx.core.AsyncResult) XaSqlConnection(cn.mycat.vertx.xa.XaSqlConnection) Test(org.junit.jupiter.api.Test)

Example 5 with XaSqlConnection

use of cn.mycat.vertx.xa.XaSqlConnection in project Mycat2 by MyCATApache.

the class XaTestSuite method commit.

@Test
public void commit(VertxTestContext testContext) {
    XaSqlConnection baseXaSqlConnection = factory.apply(mySQLManager, xaLog);
    baseXaSqlConnection.commit().onComplete(new Handler<AsyncResult<Void>>() {

        @Override
        public void handle(AsyncResult<Void> event) {
            Assertions.assertTrue(event.succeeded());
            Assertions.assertFalse(baseXaSqlConnection.isInTransaction());
            testContext.completeNow();
        }
    });
}
Also used : AsyncResult(io.vertx.core.AsyncResult) XaSqlConnection(cn.mycat.vertx.xa.XaSqlConnection) Test(org.junit.jupiter.api.Test)

Aggregations

XaSqlConnection (cn.mycat.vertx.xa.XaSqlConnection)34 AsyncResult (io.vertx.core.AsyncResult)26 Test (org.junit.jupiter.api.Test)26 Future (io.vertx.core.Future)21 NewMycatConnection (io.mycat.newquery.NewMycatConnection)20 Handler (io.vertx.core.Handler)18 MySQLManager (cn.mycat.vertx.xa.MySQLManager)17 RowSet (io.mycat.newquery.RowSet)16 XaLog (cn.mycat.vertx.xa.XaLog)15 VertxTestContext (io.vertx.junit5.VertxTestContext)15 BiFunction (java.util.function.BiFunction)15 SavepointSqlConnection (cn.mycat.vertx.xa.SavepointSqlConnection)14 SneakyThrows (lombok.SneakyThrows)14 Assert (org.junit.Assert)9 CompositeFuture (io.vertx.core.CompositeFuture)8 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)8 Function (java.util.function.Function)8 SqlResult (io.mycat.newquery.SqlResult)7 Row (io.vertx.sqlclient.Row)7 SqlConnection (io.vertx.sqlclient.SqlConnection)7