FuegoでRaspberry Piをテストする
Fuegoとは
Fuegoとは組み込みLinux用テストフレームワークです。ターゲットにSSH接続してターゲット上でテストを実行し,Jenkinsでテストを管理することができます。
ターゲット上で動作するソフトの単体テストを実行するものではなく,組み込みシステムとしてのテストを実行するものです。
スペイン語で炎という意味です。(炎上しそうですね)
Fuego wikiのArchitectureのページに詳しく載っていますが,
Fuego = (Jenkins + abstraction scripts + pre-packed tests) inside a container
ということでJenkinsとテスト実行のためのスクリプト群,よく使いそうなテストの記述がDockerコンテナとして提供されています。
今回はFuegoのインストールとサンプルのテストの実行までやってみます。
構成
Fuegoの構成は上のような感じになっています。ホストPCからターゲット(ここではRaspberry Pi)に対してSSH接続できるようになっている必要があります。
ホストPCではJenkinsとFuegoのスクリプトが含まれるDockerコンテナが起動し,Jenkinsからテストを実行できます。
テストプログラムはホストPC上でクロスコンパイルされ,Raspberry Piに転送されます。Raspberry Pi上で実行されたテストが標準出力上に結果を返し,この結果によってテストの成功・失敗を判定します。なにをもって成功とするかはテストの設定ファイルに記述します。
テストの設定ファイルはFuegoのインストールディレクトリ内に含まれ,Fuegoのコンテナが起動するときにReadOnlyでコンテナにマウントされます。
開発時には以下のものを操作しながら作業することになります。
- JenkinsのWebUI操作
- Fuegoコンテナのコンソール操作
- Fuegoインストールディレクトリ内のファイル編集
参考情報
公式のWikiを読むとだいたい使えるようになります。
環境
以下の環境を使いました。
- ホストPC : ubuntu 18.04 LTS
- ターゲット : Raspberry Pi 3 (Raspbian Buster Lite)
- Fuego (Commit eeb3c08c...)
Fuegoのインストールとテスト実行
Quick Start Guideに記載されているコマンドを実行していきます。
大まかに以下のような流れです。
- ホストPCにFuegoをインストールする
- Raspberry Piの設定をする
- ホストPCでJenkinsにジョブを登録する
Fuegoのインストール
ホストPC上で以下のコマンドを実行し,必要なパッケージをインストールする。
sudo apt-get update sudo apt-get install git docker.io
ホストPCで以下のコマンドを実行し,Fuegoのリポジトリをクローンする。
git clone https://bitbucket.org/fuegotest/fuego.git
fuegoディレクトリに移動し,インストール用スクリプトを実行する。
(数十分かかります)
cd fuego ./install.sh
インストールが終了したら以下のコマンドを実行する。
./start.sh
start.sh
を実行すると以下のように,Fuegoコンテナのコンソールにアタッチされる。
http://localhost:8090/fuegoを開き,以下のような画面が表示されればOK
Raspberry Pi側の準備
既存のユーザー(piなど)でテストを実行しても良いと思いますが,ここでは以下のコマンドを実行し,ユーザーfuegoを作成します。
sudo su mkdir /home/fuego adduser fuego (fuegoのパスワード等設定)
rootでの接続が必要な場合
テストによってはrootでの実行が必要かもしれません。
rootでのSSH接続が必要な場合は/etc/ssh/sshd_configのPermitRootLogin
をyesに変更し,SSHサーバーを再起動します。
sudo vi /etc/ssh/sshd_config (PermitRootLogin をyesに変更) sudo systemctl restart sshd
ボードファイルの作成
テストの実行対象を設定するボードファイルを作成します。 fuego/fuego-ro/boards内にraspberrypi3.boardがすでにあるので,これをmyboard.boardにコピーして編集します。
cd fuego/fuego-ro/boards cp raspberrypi3.board myboard.board
myboard.boardは以下のように修正しました。(修正箇所のみ載せています)
IPADDRはRaspberry PiのIPアドレス,SRV_IPはホストPCのIPアドレスを設定します。また,PASSWORDはRaspberry Piに作成したユーザーfuegoのパスワードを指定します。
IPADDR="192.168.0.10 SSH_PORT="22" SRV_IP="192.168.0.11" LOGIN="fuego" BOARD_TESTDIR="/home/fuego/" PASSWORD="****" TOOLCHAIN="debian-armhf" #TARGET_SETUP_LINK="fuego-lava-target-setup" #TARGET_TEARDOWN_LINK="fuego-lava-target-teardown"
クロス開発用ツールチェインのインストール
Fuegoコンテナのコンソールで以下のコマンドを実行します。
cd /fuego-ro/toolchains ./install_cross_toolchain.sh
Jenkinsにジョブを登録
Fuegoコンテナのコンソールで以下のコマンドを実行し,Jenkinsにノードを登録します。上で作成したmyboard.boardの内容が登録されます。
ftc add-nodes -b myboard
Fuegoコンテナのコンソールで以下のコマンドを実行し,ジョブを登録します。
ftc add-jobs -b myboard -t Functional.hello_world
テストの実行
Jenkinsでビルドの実行をクリックするとテストがビルドされ,Raspberry Piに転送されたあと実行されます。
Functional.hello_worldはデフォルトでは常に成功します。
FuegoからRaspberry Pi上でテストを実行させることができました。次回はテストの記述方法です。