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.