tshell_blog

ソフトウェアと車輪がついた乗り物のはなし

FuegoでRaspberry Piをテストする

Fuegoとは

Fuegoとは組み込みLinux用テストフレームワークです。ターゲットにSSH接続してターゲット上でテストを実行し,Jenkinsでテストを管理することができます。
ターゲット上で動作するソフトの単体テストを実行するものではなく,組み込みシステムとしてのテストを実行するものです。
スペイン語で炎という意味です。(炎上しそうですね)

Fuego wikiArchitectureのページに詳しく載っていますが,

Fuego = (Jenkins + abstraction scripts + pre-packed tests) inside a container

ということでJenkinsとテスト実行のためのスクリプト群,よく使いそうなテストの記述がDockerコンテナとして提供されています。

今回はFuegoのインストールとサンプルのテストの実行までやってみます。

構成

f:id:tshell:20191201091340p:plain

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に記載されているコマンドを実行していきます。

大まかに以下のような流れです。

  1. ホストPCにFuegoをインストールする
  2. Raspberry Piの設定をする
  3. ホスト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コンテナのコンソールにアタッチされる。

f:id:tshell:20191201093726p:plain

http://localhost:8090/fuegoを開き,以下のような画面が表示されればOK

f:id:tshell:20191201093828p:plain

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 PiIPアドレス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はデフォルトでは常に成功します。

f:id:tshell:20191201095833p:plain

FuegoからRaspberry Pi上でテストを実行させることができました。次回はテストの記述方法です。

tshell.hatenablog.com