AQAvit プロジェクトは「品質を確実に実現する」ために作られました。AQAvit 検証は、AQAvit テストスイートの所定のバージョン管理されたテストセットを実行して合格することで達成されます。https://www.eclipse.org/legal/eclipse-foundation-quality-verification-suite-license.php[Eclipse Foundation Quality Verification Software License (QVSL)^] では、製品を検証しようとする者に対して、検証を達成したテスト結果のサマリーを共有することを求めています。このドキュメントでは、AQAvit 検証テストの実行方法、検証合格の確認方法、および公開に必要なテスト結果の収集方法について説明します。
AQAvit 検証は、Adoptium Marketplace への掲載基準の一つです。Adoptium Marketplace に掲載されるバイナリの品質を AQAvit テストスイートで保証することは、品質に対する真剣な姿勢を消費者に示すだけでなく、Adoptium ワーキンググループメンバーの優れた検証実践を一元的な取り組みのもとに集約します。AQAvit は、ユーザーベースの変化する要件に合わせてテストスイートの標準を更新し続けています。
概要
AQAvit テストスイートは大規模なテスト集合であり、多くは AQAvit プロジェクトへの貢献によるもの、一部はさまざまなオープンソースプロジェクトから取り込んだものです。これらは OpenJDK バイナリの品質を検証するために使用されます。このスイートは、すべての サポートされているプラットフォーム 上で Java SE 8 以上のバージョンのテストに適しています。バイナリを検証するには、テスト担当者が aqa-tests GitHub リポジトリの指定されたリリース(https://github.com/adoptium/aqa-tests/releases[最新の安定リリース^])をクローンし、テスト環境を設定して、検証対象の各バイナリに対して必要なテストターゲットを実行・合格させ、QVSL に従ってテスト実行結果を公開します。
実行すべき AQAvit テストターゲット
テストはグループに分割され、そのグループは 3 つのレベルに分かれています。このテストの論理的な分類は柔軟性と細かい制御を提供し、グリッドで視覚的に表現できます。
現在の AQAvit リリースでは、実行が必要なトップレベルのテストターゲットは [sanity.functional, extended.functional, special.functional, sanity.openjdk, extended.openjdk, sanity.system, extended.system, sanity.perf, extended.perf] です。今後の AQAvit リリースでは、品質基準をさらに高めるためにターゲットが追加される予定です。
テスト実行の詳細
AQAvit はさまざまな CI/CD 環境でも、https://github.com/adoptium/aqa-tests/blob/master/doc/Prerequisites.md[テストの前提条件^] がインストールされたコンテナまたはテストマシン上でコマンドラインから直接実行することもできます。基本的な手順はどの環境でも同じです。
git clone --depth 1 --branch v0.9.6-release https://github.com/adoptium/aqa-tests.git
export TEST_JDK_HOME=
export USE_TESTENV_PROPERTIES=true
export JDK_VERSION=17
export JDK_IMPL=hotspot
export BUILD_LIST=functional
cd aqa-tests
./get.sh
./compile.sh
cd TKG
make _sanity.functional
…
make _extended.system
Collect *.tap file and metadata file
Archive .zip
Publish .zip
AQAvit プロジェクトは、ワークフローファイルから AQAvit テストスイートを実行できる Github アクションを作成しました。https://github.com/adoptium/run-aqa[run-aqa リポジトリ^] の run-aqa アクションを使用すると、ユーザーが検証用のカスタム OpenJDK バイナリを渡すことができます。以下は Github ランナーとして利用可能な 3 つのサポートプラットフォームで sanity レベルのターゲットを実行できるワークフローファイルの例です:
name: Run AQAvit
on:
workflow_dispatch: # Allows the job to be manually triggered
env: # Links to the JDK build under test and the native test libs
USE_TESTENV_PROPERTIES: true
BINARY_SDK: https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14.1%2B1/OpenJDK11U-jdk_x64_linux_hotspot_11.0.14.1_1.tar.gz
NATIVE_LIBS: https://ci.adoptium.net/job/build-scripts/job/jobs/job/jdk11u/job/jdk11u-linux-x64-hotspot/lastSuccessfulBuild/artifact/workspace/target/OpenJDK11U-testimage_x64_linux_hotspot_2022-02-12-17-06.tar.gz
jobs:
run_aqa:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target: [sanity, extended]
suite: [functional, openjdk, system, perf]
include:
- target: special
suite: functional
steps:
- name: Run AQA Tests - ${{ matrix.target }}.${{ matrix.suite }}
uses: adoptium/run-aqa@v2
with:
version: '11'
jdksource: 'customized'
customizedSdkUrl: ${{ env.BINARY_SDK }} ${{ env.NATIVE_LIBS }}
aqa-testsRepo: 'adoptium/aqa-tests:v0.9.6-release' # Make sure this branch is set to the latest release branch
build_list: ${{ matrix.suite }}
target: _${{ matrix.target }}.${{ matrix.suite }}
- uses: actions/upload-artifact@v2
if: always() # Always run this step (even if the tests failed)
with:
name: test_output
path: ./**/output_*/*.tap
aqa-tests リポジトリから利用可能な AQAvit Jenkins テストパイプラインコードを使用していて、https://github.com/adoptium/aqa-tests/blob/master/doc/userGuide.md#jenkins-setup-and-running[Jenkins のセットアップと実行^] セクションのドキュメントに記載されている場合、必要なテストターゲットを実行するために設定する追加パラメータは以下のとおりです。
# Set Jenkins job parameters
ADOPTOPENJDK_REPO=https://github.com/adoptium/aqa-tests.git
ADOPTOPENJDK_BRANCH=v0.9.6-release
USE_TESTENV_PROPERTIES=true
# Execute test targets
TARGET=sanity.functional and subsequently [extended.functional|special.functional|sanity.openjdk|extended.openjdk|sanity.system|extended.system|sanity.perf|extended.perf]
# Collect and publish results
Collect *.tap file and metadata file
Archive .zip
Publish .zip
.tap ファイルとメタデータファイルには、テスト対象バイナリに関するタイムスタンプと情報が含まれています。この情報は java -version の出力、リリースファイル情報、テスト実行中のシステムプロパティの照会から収集されます。該当する場合、この情報は Marketplace に掲載されているバイナリと一致する必要があります。
結果の検証
AQAvit テストスイートは、テスト実行終了後にテスト結果ファイルとメタデータファイルを生成します。9 つの必須テストターゲットをそれぞれ実行して合格したら、結果ファイルとメタデータファイルを収集して共有します。失敗を含むテストターゲットについては、失敗の根本原因を特定して対処し、ターゲットを再実行して更新されたテスト結果ファイルを作成・共有できます。
生成されるテスト結果ファイルは一定の命名規則に従い、シンプルな TAP (Test Anything Protocol) を使用します。トップレベルのターゲットを順次実行する場合、1 つの .tap ファイルが生成されます。例:
Test_openjdk11_hs_sanity.system_aarch64_linux.tap
ファイル名にはバージョン、実装/ディストリビューション、テストターゲット、プラットフォーム情報が含まれ、内容は次のようになります:
# Timestamp: Wed Mar 2 10:51:55 2022 UTC
1..168
ok 1 - MachineInfo_0
---
duration_ms: 581
...
ok 2 - ClassLoadingTest_5m_0
---
duration_ms: 304339
...
ok 3 - ClassLoadingTest_5m_1
---
duration_ms: 303883
...
etc.
...
ok 168 - MauveMultiThrdLoad_5m_1
---
duration_ms: 304296
...
この例では、トップレベルターゲット sanity.system に 168 のサブターゲットが含まれていることがわかります。期待されるサブターゲットのうち、特定のバージョンやプラットフォームに適用されないとしてフィルタリングされたものは「スキップ」される場合がありますが、失敗したものは一つもあってはなりません。tap ファイル内では、失敗した場合は「not ok」として表示されます。失敗したサブターゲットは個別に再実行でき、その個別実行で生成された tap ファイルを <results>.zip ファイルに含めることで、テスト対象バイナリがすべての期待ターゲットに合格できることを示すことができます。



