﻿■　概要
このディレクトリはSVC のテストコードが入っています。
SVC をテストするために、複数のバイナリが生成されます。

■　ディレクトリ構成
* Tests
- 基本的な SVC の振る舞いを見るテストを行います。
- TestSvc.kip を生成します。

* TestSvc
- SVC の振る舞いを網羅的にテストします。
- 複数のバイナリがこのディレクトリのファイルを用いて生成されます。

* sMMU
- sMMU に関する基本的な振る舞いをテストします。

* BuildRules
- バイナリを生成するためのルールファイルが置かれています。
- １ファイル１バイナリに対応しています。

■　テスト用バイナリ
SVC をテストするために複数のバイナリが用意されています。

* TestSvc
- 基本的な SVC の振る舞いを見ます。

* TestSvcAll
- TestSvc のテストに加え、境界値などのテストが追加されています。

* TestSvcAll の内容を機能ごとに分類したバイナリ

- TestSvcCache
-- Cache に関する SVC のテスト

- TestSvcDeviceAddressSpace
-- DeviceAddressSpace に関する SVC のテスト
-- 現在は FS が SDMMC を利用している関係上、テストできないため、無効にしてあります。

- TestSvcEvent
-- Event に関する SVC のテスト

- TestSvcIpc
-- Ipc に関する SVC のテスト

- TestSvcMemory
-- メモリ に関する SVC のテスト

- TestSvcOther
-- カテゴリ分けがされていない SVC のテスト

- TestSvcProcess
-- プロセスに関する SVC のテスト

- TestSvcShared
-- 共有メモリに関する SVC のテスト

- TestSvcSync
-- 同期に関する SVC のテスト

- TestSvcThread
-- スレッドに関する SVC のテスト

- TestSvcDebugger
-- デバッガに関する SVC のテスト

- TestOutOfResource
-- リソースを限界まで取得するテスト

- TestTerminate
-- プロセス終了に関するテスト

* JTAG を利用するバイナリ
- TestJtagDebugProcess
-- JTAG を用いて、レジスタの値を確認しながらテストを行います。
-- ブレイクポイントを置く位置は、test_DebugProcess_Register_Server.cpp を参照してください。

* ロード用バイナリ
テスト内部で kip ファイルをロードし、クライアントプロセスとして動かすために用いられます。
名前が "Bin" から始まるバイナリがこれに相当し、直接実行されることを想定していません。

* 繰り返しテストを実行する場合
google test はテストを繰り返して実行することが可能です。
--gtest_repeat=-1 をプロセスを起動する際の引数に渡して実行すると、無限にテストを実行し続けます。

* 初期プロセスで動作させる場合
1. TestSvcAll 以外を実行する場合には、TestSvc/!.nact の対象となるテストのビルドルールを有効にしてください。
2. nact のユーザーオプションに testsvc-initial-process を指定してビルドしてください。
    例: nact -j 8 specs=NX platforms=NXFP2-a64 testsvc-initial-process

** 初期プロセス化したテストの実行方法
SIGLO_ROOT=siglo/sdk レポジトリのルートディレクトリ として以下の説明を読んでください。

# jetson-tk1 とjetson-tk2 の場合
$(SIGLO_ROOT)/Tests/Outputs/$(Target)-kernel/KernelFor${TestName}.init/Develop/ 以下にあるCODE_ENTRY とINITIAL_PROCESS を実行してください。

# NX の場合
powershell $(SIGLO_ROOT)/Integrate/Scripts/NX/Recovery/Write-Package2-Direct.ps1 -AddressPattern "192.168.0.10" -Package2 $(SIGLO_ROOT)/Tests/Outputs/$(Target)/SystemImages/Package2Images/Package2For${TestName}.init/Develop/Package2For${TestName}.init.package2.img を実行してください。

# 注意
初期プロセス化したテストは無限にテストを実行し続けます。
TestSvcAll の場合、中断する際　"### Finish ResourceLeak Test ###" という文字列が出ていることを確認してから中断してください。
無限ループしたくない場合には、TestSvc/test_TestCondition.h の中にある "TEST_INFINIT_LOOP"  をコメントアウトしてください。

