You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by wu...@apache.org on 2018/06/08 12:54:23 UTC
[incubator-servicecomb-java-chassis] 01/05: [SCB-484] make vertx
unit test easier
This is an automated email from the ASF dual-hosted git repository.
wujimin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit b1c2fabaa9fd10fb167d1ac3ba1d3dfd34b8f9f0
Author: wujimin <wu...@huawei.com>
AuthorDate: Mon Jun 4 00:50:04 2018 +0800
[SCB-484] make vertx unit test easier
---
.../main/java/io/vertx/core/impl/SyncContext.java | 80 ++++++++++++++++++++++
.../main/java/io/vertx/core/impl/SyncVertx.java | 50 ++++++++++++++
2 files changed, 130 insertions(+)
diff --git a/foundations/foundation-test-scaffolding/src/main/java/io/vertx/core/impl/SyncContext.java b/foundations/foundation-test-scaffolding/src/main/java/io/vertx/core/impl/SyncContext.java
new file mode 100644
index 0000000..7eecbfd
--- /dev/null
+++ b/foundations/foundation-test-scaffolding/src/main/java/io/vertx/core/impl/SyncContext.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.vertx.core.impl;
+
+import java.util.concurrent.Executor;
+
+import io.vertx.core.AsyncResult;
+import io.vertx.core.Future;
+import io.vertx.core.Handler;
+import io.vertx.core.spi.metrics.PoolMetrics;
+
+public class SyncContext extends EventLoopContext {
+ public SyncContext() {
+ this(null);
+ }
+
+ public SyncContext(VertxInternal vertx) {
+ super(vertx, null, null, null, null, null, null);
+ if (SyncVertx.class.isInstance(vertx)) {
+ ((SyncVertx) vertx).setContext(this);
+ }
+ }
+
+ @Override
+ public void runOnContext(Handler<Void> task) {
+ task.handle(null);
+ }
+
+ public static <T> void syncExecuteBlocking(Handler<Future<T>> blockingCodeHandler,
+ Handler<AsyncResult<T>> asyncResultHandler) {
+ Future<T> res = Future.future();
+
+ try {
+ blockingCodeHandler.handle(res);
+ } catch (Throwable e) {
+ res.fail(e);
+ return;
+ }
+
+ res.setHandler(asyncResultHandler);
+ }
+
+ @Override
+ public <T> void executeBlocking(Action<T> action, Handler<AsyncResult<T>> resultHandler) {
+ syncExecuteBlocking((future) -> {
+ try {
+ future.complete(action.perform());
+ } catch (Throwable e) {
+ future.fail(e);
+ }
+ }, resultHandler);
+ }
+
+ @Override
+ public <T> void executeBlocking(Handler<Future<T>> blockingCodeHandler, boolean ordered,
+ Handler<AsyncResult<T>> asyncResultHandler) {
+ syncExecuteBlocking(blockingCodeHandler, asyncResultHandler);
+ }
+
+ @Override
+ <T> void executeBlocking(Action<T> action, Handler<Future<T>> blockingCodeHandler,
+ Handler<AsyncResult<T>> resultHandler,
+ Executor exec, TaskQueue queue, PoolMetrics metrics) {
+ syncExecuteBlocking(blockingCodeHandler, resultHandler);
+ }
+}
diff --git a/foundations/foundation-test-scaffolding/src/main/java/io/vertx/core/impl/SyncVertx.java b/foundations/foundation-test-scaffolding/src/main/java/io/vertx/core/impl/SyncVertx.java
new file mode 100644
index 0000000..5fada59
--- /dev/null
+++ b/foundations/foundation-test-scaffolding/src/main/java/io/vertx/core/impl/SyncVertx.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.vertx.core.impl;
+
+import io.vertx.core.AsyncResult;
+import io.vertx.core.Handler;
+import io.vertx.core.Vertx;
+import io.vertx.core.VertxOptions;
+
+/**
+ * after test finished, need to invoke vertx.close
+ */
+public class SyncVertx extends VertxImpl {
+ private ContextImpl context = new SyncContext(this);
+
+ public SyncVertx() {
+ this(null, null);
+ }
+
+ protected SyncVertx(VertxOptions options, Handler<AsyncResult<Vertx>> resultHandler) {
+ }
+
+ @Override
+ public ContextImpl getContext() {
+ return context;
+ }
+
+ public void setContext(ContextImpl context) {
+ this.context = context;
+ }
+
+ @Override
+ public ContextImpl getOrCreateContext() {
+ return context;
+ }
+}
--
To stop receiving notification emails like this one, please contact
wujimin@apache.org.