[KYUUBI #888] Add scala version suffix on scala modules

<!--
Thanks for sending a pull request!

Here are some tips for you:
  1. If this is your first time, please read our contributor guidelines: https://kyuubi.readthedocs.io/en/latest/community/contributions.html
  2. If the PR is related to an issue in https://github.com/apache/incubator-kyuubi/issues, add '[KYUUBI #XXXX]' in your PR title, e.g., '[KYUUBI #XXXX] Your PR title ...'.
  3. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP][KYUUBI #XXXX] Your PR title ...'.
-->

### _Why are the changes needed?_
<!--
Please clarify why the changes are needed. For instance,
  1. If you add a feature, you can talk about the use case of it.
  2. If you fix a bug, you can clarify why it is a bug.
-->
- Add scala version suffix on scala modules to match the name pattern.
- Enable `kyuubi-extension-spark-3-1` in daily publish snapshot

### _How was this patch tested?_
- [ ] Add some test cases that check the changes thoroughly including negative and positive cases if possible

- [ ] Add screenshots for manual tests if appropriate

- [ ] [Run test](https://kyuubi.readthedocs.io/en/latest/tools/testing.html#running-tests) locally before make a pull request

Closes #888 from pan3793/scala.

Closes #888

571eb9c3 [Cheng Pan] comments
16cb263a [Cheng Pan] remove hardcode scala version in pom
6090c798 [Cheng Pan] Fix shade
5178847f [Cheng Pan] Fixup
a1547753 [Cheng Pan] Fix engine jar name
2cf4793e [Cheng Pan] fix
cac96531 [Cheng Pan] Enable kyuubi-extension-spark-3-1 in daily publish snapshot
1ca31de5 [Cheng Pan] Add scala version suffix on scala modules

Authored-by: Cheng Pan <chengpan@apache.org>
Signed-off-by: ulysses-you <ulyssesyou18@gmail.com>
This commit is contained in:
Cheng Pan 2021-08-04 09:31:19 +08:00 committed by ulysses-you
parent f6d5069bb6
commit 4fecf13902
21 changed files with 79 additions and 76 deletions

View File

@ -137,7 +137,7 @@ jobs:
${{ runner.os }}-maven-io-
- name: Run TPC-DS Tests
run: |
./build/mvn clean install -Pspark-3.1 -DskipTests -pl :kyuubi-spark-sql-engine,:kyuubi-common,:kyuubi-ha,:kyuubi-zookeeper,:kyuubi-spark-monitor
./build/mvn clean install -Pspark-3.1 -DskipTests -pl :kyuubi-spark-sql-engine_2.12,:kyuubi-common_2.12,:kyuubi-ha_2.12,:kyuubi-zookeeper_2.12,:kyuubi-spark-monitor_2.12
./build/mvn test -Pspark-3.1 -Dtest=none -DwildcardSuites=org.apache.kyuubi.operation.tpcds -Dmaven.plugin.scalatest.exclude.tags=''
minikube-it:
name: Minikube Integration Test

View File

@ -11,7 +11,7 @@ jobs:
strategy:
matrix:
profiles:
- '-Pspark-master -pl :kyuubi-spark-sql-engine,:kyuubi-common,:kyuubi-ha,:kyuubi-zookeeper,:kyuubi-spark-monitor'
- '-Pspark-master -pl :kyuubi-spark-sql-engine_2.12,:kyuubi-common_2.12,:kyuubi-ha_2.12,:kyuubi-zookeeper_2.12,:kyuubi-spark-monitor_2.12'
env:
SPARK_LOCAL_IP: localhost
steps:

View File

@ -36,4 +36,4 @@ jobs:
ASF_PASSWORD: ${{ secrets.NEXUS_PW }}
run: |
rm -rf ~/.m2/repository/org/apache/kyuubi
./build/mvn clean deploy -DskipTests -Pspark-provided -s ./build/release/asf-settings.xml
./build/mvn clean deploy -DskipTests -Pkyuubi-extension-spark-3-1,spark-provided -s ./build/release/asf-settings.xml

View File

@ -32,7 +32,7 @@ DEP="${PWD}"/dev/dependencyList
function build_classpath() {
$MVN dependency:build-classpath -pl :kyuubi-assembly |\
$MVN dependency:build-classpath -pl :kyuubi-assembly_2.12 |\
grep -v "INFO" | \
tr ":" "\n" | \
awk -F '/' '{

View File

@ -191,22 +191,22 @@ echo "Build flags: $@" >> "$DISTDIR/RELEASE"
cp -r "$KYUUBI_HOME/kyuubi-assembly/target/scala-$SCALA_VERSION/jars/" "$DISTDIR/jars"
# Copy spark engines
cp "$KYUUBI_HOME/externals/kyuubi-spark-sql-engine/target/kyuubi-spark-sql-engine-$VERSION.jar" "$DISTDIR/externals/engines/spark"
cp "$KYUUBI_HOME/externals/kyuubi-spark-sql-engine/target/kyuubi-spark-sql-engine_${SCALA_VERSION}-${VERSION}.jar" "$DISTDIR/externals/engines/spark"
# Copy kyuubi tools
if [[ -f "$KYUUBI_HOME/tools/spark-block-cleaner/target/spark-block-cleaner-$VERSION.jar" ]]; then
if [[ -f "$KYUUBI_HOME/tools/spark-block-cleaner/target/spark-block-cleaner_${SCALA_VERSION}-${VERSION}.jar" ]]; then
mkdir -p "$DISTDIR/tools/spark-block-cleaner/kubernetes"
mkdir -p "$DISTDIR/tools/spark-block-cleaner/jars"
cp -r "$KYUUBI_HOME/tools/spark-block-cleaner/kubernetes/" "$DISTDIR/tools/spark-block-cleaner/"
cp "$KYUUBI_HOME/tools/spark-block-cleaner/target/spark-block-cleaner-$VERSION.jar" "$DISTDIR/tools/spark-block-cleaner/jars/"
cp "$KYUUBI_HOME/tools/spark-block-cleaner/target/spark-block-cleaner_${SCALA_VERSION}-${VERSION}.jar" "$DISTDIR/tools/spark-block-cleaner/jars/"
fi
# Copy Kyuubi extension
SPARK_EXTENSION_VERSIONS=('3-1')
for SPARK_EXTENSION_VERSION in ${SPARK_EXTENSION_VERSIONS[@]}; do
if [[ -f $"$KYUUBI_HOME/dev/kyuubi-extension-spark-$SPARK_EXTENSION_VERSION/target/kyuubi-extension-spark-$SPARK_EXTENSION_VERSION-$VERSION.jar" ]]; then
if [[ -f $"$KYUUBI_HOME/dev/kyuubi-extension-spark-$SPARK_EXTENSION_VERSION/target/kyuubi-extension-spark-$SPARK_EXTENSION_VERSION_${SCALA_VERSION}-${VERSION}.jar" ]]; then
mkdir -p "$DISTDIR/extension"
cp "$KYUUBI_HOME/dev/kyuubi-extension-spark-$SPARK_EXTENSION_VERSION/target/kyuubi-extension-spark-$SPARK_EXTENSION_VERSION-$VERSION.jar" "$DISTDIR/extension"
cp "$KYUUBI_HOME/dev/kyuubi-extension-spark-$SPARK_EXTENSION_VERSION/target/kyuubi-extension-spark-$SPARK_EXTENSION_VERSION_${SCALA_VERSION}-${VERSION}.jar" "$DISTDIR/extension"
fi
done

View File

@ -27,50 +27,50 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kyuubi-codecov</artifactId>
<artifactId>kyuubi-codecov_2.12</artifactId>
<packaging>pom</packaging>
<name>Kyuubi Project Dev Code Coverage</name>
<dependencies>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-ctl</artifactId>
<artifactId>kyuubi-ctl_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-zookeeper</artifactId>
<artifactId>kyuubi-zookeeper_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-ha</artifactId>
<artifactId>kyuubi-ha_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-metrics</artifactId>
<artifactId>kyuubi-metrics_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-server</artifactId>
<artifactId>kyuubi-server_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-spark-sql-engine</artifactId>
<artifactId>kyuubi-spark-sql-engine_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>

View File

@ -27,7 +27,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kyuubi-extension-spark-3-1</artifactId>
<artifactId>kyuubi-extension-spark-3-1_2.12</artifactId>
<packaging>jar</packaging>
<name>Kyuubi Project Dev Spark Extensions (for Spark 3.1)</name>

View File

@ -27,7 +27,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kyuubi-tpcds</artifactId>
<artifactId>kyuubi-tpcds_2.12</artifactId>
<packaging>jar</packaging>
<name>Kyuubi Project Dev TPCDS Generator</name>

View File

@ -27,14 +27,14 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kyuubi-spark-monitor</artifactId>
<artifactId>kyuubi-spark-monitor_2.12</artifactId>
<packaging>jar</packaging>
<name>Kyuubi Project Spark Monitor</name>
<dependencies>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>

View File

@ -27,26 +27,26 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kyuubi-spark-sql-engine</artifactId>
<artifactId>kyuubi-spark-sql-engine_2.12</artifactId>
<name>Kyuubi Project Engine Spark SQL</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-ha</artifactId>
<artifactId>kyuubi-ha_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-spark-monitor</artifactId>
<artifactId>kyuubi-spark-monitor_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
@ -165,7 +165,7 @@
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-zookeeper</artifactId>
<artifactId>kyuubi-zookeeper_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
@ -182,9 +182,9 @@
<shadedArtifactAttached>false</shadedArtifactAttached>
<artifactSet>
<includes>
<include>org.apache.kyuubi:kyuubi-common</include>
<include>org.apache.kyuubi:kyuubi-ha</include>
<include>org.apache.kyuubi:kyuubi-spark-monitor</include>
<include>org.apache.kyuubi:kyuubi-common_${scala.binary.version}</include>
<include>org.apache.kyuubi:kyuubi-ha_${scala.binary.version}</include>
<include>org.apache.kyuubi:kyuubi-spark-monitor_${scala.binary.version}</include>
<include>org.apache.curator:curator-client</include>
<include>org.apache.curator:curator-framework</include>
<include>org.apache.curator:curator-recipes</include>

View File

@ -26,32 +26,32 @@
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>kubernetes-integration-tests_2.12</artifactId>
<name>Kyuubi Kubernetes Integration Tests</name>
<modelVersion>4.0.0</modelVersion>
<artifactId>kubernetes-integration-tests</artifactId>
<dependencies>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<scope>test</scope>
</dependency>
<!-- for hive driver related dependency -->
<dependency>
<groupId>org.apache.kyuubi</groupId>

View File

@ -28,38 +28,38 @@
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>kyuubi-assembly</artifactId>
<artifactId>kyuubi-assembly_2.12</artifactId>
<packaging>pom</packaging>
<name>Kyuubi Project Assembly</name>
<dependencies>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-ha</artifactId>
<artifactId>kyuubi-ha_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-metrics</artifactId>
<artifactId>kyuubi-metrics_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-server</artifactId>
<artifactId>kyuubi-server_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-ctl</artifactId>
<artifactId>kyuubi-ctl_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>

View File

@ -27,7 +27,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_2.12</artifactId>
<packaging>jar</packaging>
<name>Kyuubi Project Common</name>

View File

@ -27,19 +27,19 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kyuubi-ctl</artifactId>
<artifactId>kyuubi-ctl_2.12</artifactId>
<packaging>jar</packaging>
<name>Kyuubi Project Control</name>
<dependencies>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-ha</artifactId>
<artifactId>kyuubi-ha_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
@ -85,7 +85,7 @@
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
@ -105,7 +105,7 @@
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-zookeeper</artifactId>
<artifactId>kyuubi-zookeeper_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>

View File

@ -27,14 +27,14 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kyuubi-ha</artifactId>
<artifactId>kyuubi-ha_2.12</artifactId>
<packaging>jar</packaging>
<name>Kyuubi Project High Availability</name>
<dependencies>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
@ -55,7 +55,7 @@
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
@ -75,7 +75,7 @@
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-zookeeper</artifactId>
<artifactId>kyuubi-zookeeper_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>

View File

@ -26,6 +26,9 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<!--
A scala-free module in runtime scope.
-->
<artifactId>kyuubi-hive-jdbc</artifactId>
<name>Kyuubi Project Hive JDBC Client</name>
<packaging>jar</packaging>
@ -64,20 +67,20 @@
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-spark-sql-engine</artifactId>
<artifactId>kyuubi-spark-sql-engine_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-spark-sql-engine</artifactId>
<artifactId>kyuubi-spark-sql-engine_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
</dependency>

View File

@ -26,15 +26,14 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kyuubi-metrics</artifactId>
<artifactId>kyuubi-metrics_2.12</artifactId>
<packaging>jar</packaging>
<name>Kyuubi Project Metrics</name>
<dependencies>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
@ -90,7 +89,7 @@
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>

View File

@ -26,32 +26,32 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kyuubi-server</artifactId>
<artifactId>kyuubi-server_2.12</artifactId>
<name>Kyuubi Project Server</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-ha</artifactId>
<artifactId>kyuubi-ha_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-zookeeper</artifactId>
<artifactId>kyuubi-zookeeper_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-metrics</artifactId>
<artifactId>kyuubi-metrics_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
@ -68,7 +68,7 @@
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
@ -84,7 +84,7 @@
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-spark-sql-engine</artifactId>
<artifactId>kyuubi-spark-sql-engine_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>

View File

@ -65,7 +65,8 @@ class SparkProcessBuilder(
override def mainResource: Option[String] = {
// 1. get the main resource jar for user specified config first
val jarName = s"$module-$KYUUBI_VERSION.jar"
// TODO use SPARK_SCALA_VERSION instead of SCALA_COMPILE_VERSION
val jarName = s"${module}_$SCALA_COMPILE_VERSION-$KYUUBI_VERSION.jar"
conf.get(ENGINE_SPARK_MAIN_RESOURCE).filter { userSpecified =>
// skip check exist if not local file.
val uri = new URI(userSpecified)

View File

@ -26,14 +26,14 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kyuubi-zookeeper</artifactId>
<artifactId>kyuubi-zookeeper_2.12</artifactId>
<name>Kyuubi Project Embedded Zookeeper</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
@ -51,7 +51,7 @@
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>

View File

@ -26,20 +26,20 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spark-block-cleaner</artifactId>
<artifactId>spark-block-cleaner_2.12</artifactId>
<name>Kyuubi Project Spark Block Cleaner</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kyuubi</groupId>
<artifactId>kyuubi-common</artifactId>
<artifactId>kyuubi-common_${scala.binary.version}</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>