This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-samples.git


The following commit(s) were added to refs/heads/master by this push:
     new 305c77e36  add native test quick start (#1122)
305c77e36 is described below

commit 305c77e3681a687928f8a04e3f6fd532b21be1b6
Author: foghost <[email protected]>
AuthorDate: Tue Apr 2 14:22:04 2024 +0800

     add native test quick start (#1122)
---
 test/README-NATIVE.md | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++
 test/README.md        |   1 +
 2 files changed, 135 insertions(+)

diff --git a/test/README-NATIVE.md b/test/README-NATIVE.md
new file mode 100644
index 000000000..3343e7a23
--- /dev/null
+++ b/test/README-NATIVE.md
@@ -0,0 +1,134 @@
+
+## Dubbo Native Integration Test Quick Start
+
+### Building Test Image
+
+```shell
+cd dubbo-samples
+./test/build-native-test-image.sh
+```
+
+For users in China, mirror acceleration can be utilized:
+
+```shell
+docker pull ghcr.m.daocloud.io/graalvm/native-image-community:17-ol7
+docker tag ghcr.m.daocloud.io/graalvm/native-image-community:17-ol7 
ghcr.io/graalvm/native-image-community:17-ol7
+cd dubbo-samples
+./test/build-native-test-image.sh
+```
+
+### Running Test Cases
+
+The script `run-native-tests.sh` is used to execute a single test case, a list 
of test cases, or all test cases.
+
+The script `kill-tests.sh` is used to forcefully terminate all test cases, 
stop all dubbo containers, and all processes of run-native-tests.sh and 
scenario.sh.
+
+Note: After interrupting the execution of run-native-tests.sh with Ctrl+C, the 
kill-tests.sh script should be executed.
+
+#### Running Methods
+
+* Running a Single Test Case
+
+  ``` shell
+  ./test/run-native-tests.sh <project.basedir>
+  ```
+
+  For example, to run the dubbo-samples-native-image-registry test case:
+
+  ```shell
+  ./test/run-native-tests.sh 2-advanced/dubbo-samples-native-image-registry
+  ```
+
+* Running a Specified List of Test Cases
+
+  ```shell
+  TEST_CASE_FILE=testcases1.txt ./test/run-native-tests.sh
+  ```
+
+* Running All Test Cases
+
+  ```shell
+   ./test/run-native-tests.sh
+  ```
+
+The principle behind running all test cases with run-native-tests.sh:
+1. Search for all `native-case-configuration.yml` files.
+2. Fork multiple processes to run the test cases sequentially.
+
+### Adding Test Cases
+
+Ensure that the versions in case-versions.conf are correct: 
`dubbo.version=3.3.*, spring.version=6.*, java.version= >= 17`.
+
+The test case configuration file should be named native-case-configuration.yml 
and placed in the basedir of each project that requires testing.
+
+The basic usage should remain consistent with the 
[quick-start](./quick-start_cn.md) guide,
+with details directly referable to the official documentation on [Support for 
GraalVM Native 
Image](https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/performance/support-graalvm/).
+
+Note:
+
+* The `native-case-configuration.yml` file should add config `timeout: 600` 
because native testing requires packaging a native Image, which is 
time-consuming. The default timeout may not be sufficient for the packaging 
process, leading to premature timeouts.
+* Ensure that project dependencies meet the minimum version requirements. Use 
the latest version of maven-compiler-plugin to prevent unnecessary issues, and 
use the latest version of native-maven-plugin for better support. Refer to the 
example in 
2-advanced/dubbo-samples-native-image-registry/dubbo-samples-native-image-registry-provider
 for version details.
+* For normal application main startup classes, the pom.xml must include a 
profile named native, which will be used during the packaging and compilation 
phase. Projects that require running unit tests should have a nativeTest 
profile. Refer to the example in 
2-advanced/dubbo-samples-native-image-registry/dubbo-samples-native-image-registry-consumer.
+* The matching rule for test classes (includes) is "*IT.java",The default 
matching rule is:"**/*IT.class". In the native test scenario, this is activated 
through the configuration of the test plugin.
+    ```xml
+    <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <version>3.1.2</version>
+        <configuration>
+            <includes>
+                <include>${env.TEST_PATTERNS}</include>
+            </includes>
+        </configuration>
+    </plugin>
+    ```
+  Corresponding to the native-case-configuration.yml configuration is
+  ```yaml
+  dubbo-samples-native-image-registry-test:
+      type: nativeTest
+      basedir: dubbo-samples-native-image-registry-consumer
+      tests:
+          - "**/*IT.class" // Configure the matching rules of the test class, 
this is also the default value
+  ```
+    If the unit test runs incompletely you need to check these configurations
+
+* Examples that rely on zookeeper need to configure the zookeeper address in 
the native-maven-plugin channel, otherwise the actual zookeeper address may not 
be requested.
+    ```xml
+    <plugin>
+        <groupId>org.graalvm.buildtools</groupId>
+        <artifactId>native-maven-plugin</artifactId>
+        <version>${native-maven-plugin.version}</version>
+        <extensions>true</extensions>  <!-- required -->
+        <configuration>
+            <buildArgs>
+                -H:+ReportExceptionStackTraces
+            </buildArgs>
+            <systemProperties>
+                <zookeeper.address>${zookeeper.address}</zookeeper.address> 
<!-- external zookeeper address -->
+            </systemProperties>
+        </configuration>
+    </plugin>
+    ```
+  Correspondingly, it can be configured like this in application.yml
+    ```yaml
+      registry:
+        address: zookeeper://${zookeeper.address:127.0.0.1}:2181
+    ```
+  In the code, the environment variable can be used to retrieve the value:
+    ```java
+    private static String zookeeperHost = 
System.getProperty("zookeeper.address", "127.0.0.1");
+    ```
+* The test case running logs are stored in the directory specified by 
${basedir}/logs/${sampleName}/*.log. For example, in the case of 
dubbo-samples-native-image-registry:
+    ```text
+    dubbo-samples-native-image-registry // basedir
+    ├── logs
+    │   ├── dubbo-samples-native-image-registry-consumer.log // Consumer 
native build and runtime logs
+    │   ├── dubbo-samples-native-image-registry-provider.log // Provider 
native build and runtime logs
+    │   ├── dubbo-samples-native-image-registry-test.log // Native test build 
and runtime logs
+    │   ├── scenario-builder.log // Logs generated from 
native-case-configuration.yml
+    │   ├── scenario.log // Overall runtime logs for all cases under this 
basedir
+    │   └── zookeeper.log // ZooKeeper logs
+    ├── mvn.log // Logs for building the source code with mvn
+    ├── version-matrix.log // Logs for version matrix
+    └── version-matrix.txt // Actual dependency versions for running examples
+    ```
diff --git a/test/README.md b/test/README.md
index cba784065..0f13b38ff 100644
--- a/test/README.md
+++ b/test/README.md
@@ -289,3 +289,4 @@ A Junit test runner, execute a set of testcases, 
replacement for maven-safefail-
 Also include files for `dubbo-test-image`.
 
 
+For graalvm Native Image test Integration please refer to 
[README-NATIVE](./README-NATIVE.md)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to