Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Circuits.GPIOはいかにテストされているか
Search
pojiro
July 23, 2022
Technology
0
110
Circuits.GPIOはいかにテストされているか
pojiro
July 23, 2022
Tweet
Share
More Decks by pojiro
See All by pojiro
Elixir で IoT 開発、 Nerves なら簡単にできる!?
pojiro
1
260
分野に潜むツールの紹介
pojiro
1
640
Raspberry Pi Mouse を Nerves で動かしてみた
pojiro
0
1.3k
Raspberry Pi で試す 組み込みLinux⼊⾨ Nerves の場合
pojiro
2
420
おいでよ! Nerves JP!
pojiro
1
270
描画ライブラリScenic紹介
pojiro
0
160
Nerves tips, /bin/sh & nerves_heart
pojiro
0
50
Elixir/NervesでどこまでできるのIoT?
pojiro
1
360
『推し』で仕事をする
pojiro
1
140
Other Decks in Technology
See All in Technology
AIツールでどこまでデザインを忠実に実装できるのか
oikon48
6
3k
三菱電機・ソニーグループ共同の「Agile Japan企業内サテライト」_2025
sony
0
110
LLM時代にデータエンジニアの役割はどう変わるか?
ikkimiyazaki
6
1.1k
空間を設計する力を考える / 20251004 Naoki Takahashi
shift_evolve
PRO
4
440
許しとアジャイル
jnuank
1
140
SREとソフトウェア開発者の合同チームはどのようにS3のコストを削減したか?
muziyoshiz
1
110
社内報はAIにやらせよう / Let AI handle the company newsletter
saka2jp
8
1.3k
M5製品で作るポン置きセルラー対応カメラ
sayacom
0
170
"プロポーザルってなんか怖そう"という境界を超えてみた@TSUDOI by giftee Tech #1
shilo113
0
160
Wasmのエコシステムを使った ツール作成方法
askua
0
100
OCI Network Firewall 概要
oracle4engineer
PRO
1
7.8k
やる気のない自分との向き合い方/How to Deal with Your Unmotivated Self
sanogemaru
0
440
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
75
5k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
19
1.2k
The World Runs on Bad Software
bkeepers
PRO
71
11k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6.1k
Why Our Code Smells
bkeepers
PRO
339
57k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
20k
Faster Mobile Websites
deanohume
310
31k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.5k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Transcript
Circuits.GPIOは いかにテストされているか 2022/07/23 NervesJP #27
What’s Circuits.GPIO? • Linux のGPIO(General-purpose input/output), 汎用入出力ピンを 操作するElixirのライブラリ • NervesでLチカをやったことがあれば使ったことがあるはず
◦ だけど、Nerves 専用のライブラリというわけではなく、 LinuxのGPIOを持ったマシンであれば、ピュア Elixirプロジェクトからも使用することができます。 iex> alias Circuits.GPIO iex> {:ok, pin} = GPIO.open(1, :output) iex> :ok = GPIO.write(pin, 1)
Circuits.GPIOの構成 • lib/gpio.ex ◦ ユーザ向けAPI用モジュール • lib/gpio_nif.ex ◦ nif用モジュール •
src/* ◦ gpio操作の低レイヤ実装 • test/cicuits_gpio_test.exs ◦ テスト用モジュール、 mix test で実行される ◦ ユーザ向けAPI用モジュールのテストを行う ちょっとだけ中身をのぞこう(時間あるかな?
Circuits.GPIOをテストするには? • Linuxマシン固有のテストは 実機でなければできない なので、 - 実機でなければテストできない部分 - 実機でなくてもテストできる部分 に分けてやれば、
後者はどんな環境でもテストを回すことができる どのように分け、後者のテストをしているか興味あり!!
ユーザのAPIコールからGPIO操作までの流れ Circuit.GPIO Circuit.GPIO.Nif gpio_nif.c gpio_nif.h hal_sysfs.c /sys/class/gpio/* を操作 iex> alias
Circuits.GPIO # /sys/class/gpio/1/direction を “out” iex> {:ok, pin} = GPIO.open(1, :output) # /sys/class/gpio/1/value を “1” iex> :ok = GPIO.write(pin, 1)
/sys/class/gpio/* なしでテストするために Circuit.GPIO Circuit.GPIO.Nif gpio_nif.c gpio_nif.h hal_sysfs.c hal_stab.c テスト用実装
ポイント Circuit.GPIO Circuit.GPIO.Nif gpio_nif.c gpio_nif.h hal_sysfs.c hal_stab.c テスト用実装 インタフェースを定 義
sysfs非依存の ロジックを実装 sysfsをシミュレートするので はなく、テストに必要な応答 のみをする薄い実装にする テスト範囲は ユーザ向けAPIの関数から、 インタフェース関数の呼び出しま で 操作実装の切り替えは Makefileで
このパターンは?見覚えが、、 • そう、Moxでやることと同じ ◦ Mox: Elixir のテストサポートライブラリ https://github.com/dashbitco/mox NervesJP.Behabiour NervesJP.Impl
NervesJP.Mock ビヘイビアで各関数の入出力、 インタフェースを定義する OSのファイル操作や外部のWeb APIなど 応答をコントロールできない関数を まとめたモジュール 応答をコントロール可能なMockに切り替え、 このインタフェースを呼び出す ロジックのテストを可能にする
まとめ • Circuits.GPIOがどのようにテストされているかを紹介しました • POINT: インタフェースを定義して、 その内部実装を切り替える方法はテストに限らず有効!なことを理解しました ◦ Cならヘッダファイルがインタフェースとして使える ◦
ElixirならBehaviourがインタフェースとして使える Have nice Nerves days!!! Thank you!!