SlideShare a Scribd company logo
1 of 20
Download to read offline
SDN Lab環境での
Robot Framework実践活用
@ttsubo
2015.5.30
2
今後、最近のLinuxボックス等の活用が一般化してくると、
オープンソース系ネットワークプログラマブルなプロダクト
を動作させるユースケースがさらに増してくると思います。
一方、オープンソース系プロダクトの動作テストも
極力、従来の手作業ベースから、より網羅的なテスト自動化
ベースにシフトが進んでおり、テスト自動化を支える技術要
素にも注目されております。
そこで、Robot Frameworkに着目しました。実際に動かし
てみて、実践的な活用にチャレンジしてみたいと思います。
3
Robot Framework is a generic test automation framework for
acceptance testing and acceptance test-driven development
(ATDD). It has easy-to-use tabular test data syntax and utilizes
the keyword-driven testing approach. Its testing capabilities
can be extended by test libraries implemented either with
Python or Java, and users can create new keywords from
existing ones using the same syntax that is used for creating
test cases.
Robot Frameworkとは..
引用元: https://code.google.com/p/robotframework/
4
まずは、SDN Lab環境構築から..
「Robot Frameworkで何ができるのか?」を理解するには、
実際に使ってみるのが手っ取りばやいので、手軽にサンプル
TestCaseが動作できるSDN Lab環境をまず構築します。
実行環境は、
Ubuntu Server版を想定
5
PC2 PC1
AS65010 AS65011
BGP6 BGP4
BGP4
BGP1
BGP2
BGP3
192.168.2.101 192.168.1.102
172.16.0.0/24
SDN Lab環境でのトポロジ構成
・BGPルータは、各Dockerコンテナ上で動作しています。
- 主な特徴 -
・運用オペレーション(NW設定等)は、REST-APIで行います。
・BGPルータでは、WSGIサーバ(8080)が動作しています。
8080 8080 8080 8080
80808080
- 構築手順は、次ページ参照 -
6
$	
  git	
  clone	
  https://github.com/ttsubo/docker-­‐simpleRouter.git	
  
$	
  cd	
  docker-­‐simpleRouter	
  
$	
  git	
  checkout	
  TestAutomation	
  
$	
  git	
  branch	
  
*	
  TestAutomation	
  
	
  	
  master
1. docker-simpleRouterを入手する
$	
  ./simpleRouter.sh	
  install
2. dockerをインストールする
3. 再度ログイン後に、dockerバージョンを確認する
$	
  docker	
  version
$	
  docker	
  pull	
  ttsubo/simple-­‐router:latest	
  
$	
  docker	
  pull	
  ttsubo/pc-­‐term:latest	
  
$	
  docker	
  pull	
  ttsubo/test-­‐server:latest	
  
$	
  docker	
  images
4. Dockerイメージを入手する
$	
  sudo	
  pip	
  install	
  robotframework	
  
$	
  sudo	
  pip	
  install	
  robotframework-­‐requests	
  
$	
  sudo	
  pip	
  install	
  robotframework-­‐sshlibrary	
  
$	
  sudo	
  pip	
  install	
  requests
5. Robot Frameworkパッケージ関係を入手する
$	
  ./simpleRouter.sh	
  start
6. simpleRouterプログラムを起動する
$	
  docker	
  ps
7. Dockerコンテナの起動状況を確認する
→ 約5分程度したら起動完了
7
$	
 docker	
 ps	
 
CONTAINER	
 ID	
 	
 	
 	
 	
 	
 	
 	
 IMAGE	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 COMMAND	
 	
 	
 	
 	
 	
 …	
 	
 	
 PORTS	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 NAMES	
 
3b455cf31971	
 	
 	
 	
 	
 	
 	
 	
 ttsubo/test-server:latest	
 	
 	
 	
 	
 "/bin/bash"	
 	
 …	
 	
 	
 0.0.0.0:10080->8080/tcp	
 	
 	
 TestServer	
 	
 	
 
b0bd88248ee8	
 	
 	
 	
 	
 	
 	
 	
 ttsubo/simple-router:latest	
 	
 	
 "/bin/bash"	
 	
 …	
 	
 	
 0.0.0.0:8086->8080/tcp	
 	
 	
 	
 BGP6	
 	
 	
 	
 	
 	
 	
 	
 	
 
daa2d1ba484b	
 	
 	
 	
 	
 	
 	
 	
 ttsubo/simple-router:latest	
 	
 	
 "/bin/bash"	
 	
 …	
 	
 	
 0.0.0.0:8085->8080/tcp	
 	
 	
 	
 BGP5	
 	
 	
 	
 	
 	
 	
 	
 	
 
f7e0ea2b9a5b	
 	
 	
 	
 	
 	
 	
 	
 ttsubo/simple-router:latest	
 	
 	
 "/bin/bash"	
 	
 …	
 	
 	
 0.0.0.0:8084->8080/tcp	
 	
 	
 	
 BGP4	
 	
 	
 	
 	
 	
 	
 	
 	
 
35dfe5046507	
 	
 	
 	
 	
 	
 	
 	
 ttsubo/simple-router:latest	
 	
 	
 "/bin/bash"	
 	
 …	
 	
 	
 0.0.0.0:8083->8080/tcp	
 	
 	
 	
 BGP3	
 	
 	
 	
 	
 	
 	
 	
 	
 
e9b9c5b95857	
 	
 	
 	
 	
 	
 	
 	
 ttsubo/simple-router:latest	
 	
 	
 "/bin/bash"	
 	
 …	
 	
 	
 0.0.0.0:8082->8080/tcp	
 	
 	
 	
 BGP2	
 	
 	
 	
 	
 	
 	
 	
 	
 
120a454e6ac3	
 	
 	
 	
 	
 	
 	
 	
 ttsubo/simple-router:latest	
 	
 	
 "/bin/bash"	
 	
 …	
 	
 	
 0.0.0.0:8081->8080/tcp	
 	
 	
 	
 BGP1	
 	
 	
 	
 	
 	
 	
 	
 	
 
13c062d72e11	
 	
 	
 	
 	
 	
 	
 	
 ttsubo/pc-term:latest	
 	
 	
 	
 	
 	
 	
 	
 	
 "/bin/bash"	
 	
 …	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 pc2	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 
3e4eaf915abd	
 	
 	
 	
 	
 	
 	
 	
 ttsubo/pc-term:latest	
 	
 	
 	
 	
 	
 	
 	
 	
 "/bin/bash"	
 	
 …	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 pc1	
 
Ubuntu母艦より、Dockerコンテナ上で動作しているBGPルータの
WSGIサーバ(8080)にREST経由でアクセスするには、青文字のポート
番号を使用します
注意事項:
外部からWSGIサーバにアクセスするには?
8
実際に、運用オペレーションを試してみる
9
まずは、ルーティング情報を追加してみる
PC2 PC1
AS65010 AS65011
BGP6 BGP4
BGP4
BGP1
BGP2
BGP3
192.168.2.101 192.168.1.102
172.16.0.0/24
8080
REST-API
BGP6のdockerコンテナ上から
ルーティング情報 172.16.0.0/24 を追加する。
10
$ docker exec -it BGP6 bash
root@BGP6:~# cd simpleRouter/rest-client/
root@BGP6:~/simpleRouter/rest-client# ./post_route.sh 172.16.0.0 255.255.255.0 192.168.2.101 65010:101
======================================================================
create_route
======================================================================
/openflow/0000000000000001/route
{
"route": {
"destination": "172.16.0.0",
"netmask": "255.255.255.0",
"nexthop": "192.168.2.101",
"vrf_routeDist": "65010:101"
}
}
----------
reply: 'HTTP/1.1 200 OKrn'
header: Content-Type: application/json; charset=UTF-8
header: Content-Length: 152
header: Date: Fri, 29 May 2015 23:44:40 GMT
----------
{
"route": {
"vrf_routeDist": "65010:101",
"netmask": "255.255.255.0",
"nexthop": "192.168.2.101",
"destination": "172.16.0.0"
},
"id": "0000000000000001"
}
BGP6でのルーティング情報追加の処理結果
Request
(POST)
Response
確認ポイント1
Returnコードは正常
どおり 200 だった
11
隣接ルータでルーティング情報を確認してみる
PC2 PC1
AS65010 AS65011
BGP6 BGP4
BGP4
BGP1
BGP2
BGP3
192.168.2.101 192.168.1.102
172.16.0.0/24
8080
REST-API
BGP4のdockerコンテナ上から
ルーティング情報を確認する。
12
$ docker exec -it BGP4 bash
root@BGP4:~# cd simpleRouter/rest-client/
root@BGP4:~/simpleRouter/rest-client# ./get_rib_kai.sh
======================================================================
get_rib
======================================================================
/openflow/0000000000000001/rib
----------
reply: 'HTTP/1.1 200 OKrn'
header: Content-Type: application/json; charset=UTF-8
header: Content-Length: 560
header: Date: Sat, 30 May 2015 00:00:19 GMT
----------
{
"rib": "Status codes: * valid, > bestnOrigin codes: i - IGP, e - EGP, ? - incompleten
Network Labels Next Hop Reason Metric LocPrf Pathn
*> 65010:101:172.16.0.0/24 [601] 192.168.107.101 Only Path 100 ?n
*> 65010:101:192.168.2.101/32 [600] 192.168.107.101 Only Path 100 ?n
*> 65010:101:192.168.1.102/32 [300] 192.168.101.102 Only Path 100 65011 ?n”,
"id": "0000000000000001",
"time": "2015/05/30 00:00:19"
}
Request(GET)
Response
BGP4でのルーティング情報確認の処理結果
確認ポイント2
さきほど追加した
ルーティング情報が
確かに含まれていた
13
ここから、Robot Frameworkの話に
なります。さきほどの運用オペレーション
を素材にして、TestCase化してみます。
(TestCase化する運用オペレーション)
・BGP6でルーティング情報 172.16.0.0/24 を追加する
・BGP4で 172.16.0.0/24 のルーティング情報を確認する
14
*** settings ***
Resource Resources/create_route.robot
Resource Resources/get_event.robot
Resource Resources/get_rib.robot
*** Variables ***
${DESTINATION} 172.16.0.0
${NETMASK} 255.255.255.0
${NEXTHOP} 192.168.2.101
${VRF_ROUTEDIST} 65010:101
${myhost} BGP6
${myport} 8086
${peerhost} BGP4
${peerport} 8084
${check_prefix} 65010:101:172.16.0.0/24
${expected_value} OK
*** TestCases ***
(1-1) Create prefix(172.16.0.0/24) in vrf(65010:101) in Router(BGP6)
${route}= Create Dictionary destination=${DESTINATION}
... netmask=${NETMASK}
... nexthop=${NEXTHOP}
... vrf_routeDist=${VRF_ROUTEDIST}
Create Route ${route} ${myhost} ${myport}
(1-2) Check previous prefix in RoutingTable in Peer Router(BGP4)
Wait Until Keyword Succeeds 60s 10s
... Check Rib_prefix information
... ${peerhost}
... ${peerport}
... ${check_prefix}
… snip
Test/test1_create_route.robot
: TestCase名を定義
: ルーティング情報の辞書を作成
: Create Routeを呼び出す
: TestCase名を定義
: Check Rib_prefix Informationを呼び出す
: TestCase終了の判定条件(Timeout 10秒、最大60秒)
15
*** settings ***
Library Lib.conversions
Library RequestsLibrary
Library Collections
*** Keywords ***
Create Route
[Arguments] ${route} ${host} ${port}
${headers}= Create Dictionary Content-Type=application/json
Create Session ${host} http://127.0.0.1:${port} ${headers}
${data}= Create Dictionary route=${route}
${data}= Get Json From Dict ${data}
${result} = Post ${host} /openflow/0000000000000001/route ${data}
Log ${result.status_code}
Log ${result.json()['route']}
Should Be Equal As Strings ${result.status_code} 200
Resources/create_route.robot
確認ポイント1
Returnコードは正常どおり
200 か否かを判定する
: 引数パラメータを定義
: httpのhead情報を定義
: httpのURIを定義
: POSTメソッドの入力データに整形する
: POSTメソッド実行
: 処理結果をログ化
: 処理結果の判定
{"route": {
"destination": "172.16.0.0",
"netmask": "255.255.255.0",
"nexthop": "192.168.2.101",
"vrf_routeDist": "65010:101"
}}
入力データ完成形
16
*** settings ***
Library RequestsLibrary
Library Collections
*** Keywords ***
Get Rib
[Arguments] ${host} ${port}
${headers}= Create Dictionary Content-Type=application/json
Create Session ${host} http://127.0.0.1:${port} ${headers}
${result} = Get Request ${host} /openflow/0000000000000001/rib
Log ${result.status_code}
Log ${result.json()['rib']}
Should Be Equal As Strings ${result.status_code} 200
[return] ${result.json()['rib']}
Check Rib_med information
[Arguments] ${host} ${port} ${check_med}
${result}= Get Rib ${host} ${port}
Should Contain ${result} ${check_med}
Check Rib_prefix information
[Arguments] ${host} ${port} ${check_prefix}
${result}= Get Rib ${host} ${port}
Should Contain ${result} ${check_prefix}
Check Rib_no_prefix information
[Arguments] ${host} ${port} ${check_prefix}
${result}= Get Rib ${host} ${port}
Should Not Contain ${result} ${check_prefix}
Resources/get_rib.robot
確認ポイント2
さきほど追加したルーティング情報
が含まれているか否かを判定する
: 処理結果の判定
: GETメソッド実行
: 引数パラメータを定義
: 処理結果をログ化
: Get Ribを呼び出す
: 引数パラメータを定義
: httpのhead情報を定義
: httpのURIを定義
: 呼び出し元に処理結果を戻す
: 処理結果の判定
17
test1_create_route.robot
を実行してみる
$ cd Robot_Framework/
$ pybot Tests/test1_create_route.robot
==============================================================================
Test1 Create Route
==============================================================================
(1-1) Create prefix(172.16.0.0/24) in vrf(65010:101) in Router(BGP6) | PASS |
------------------------------------------------------------------------------
(1-2) Check previous prefix in RoutingTable in Peer Router(BGP4) | PASS |
------------------------------------------------------------------------------
(1-3) check reachability from pc1(192.168.1.102) to pc2(172.16.0.101) | PASS |
------------------------------------------------------------------------------
Test1 Create Route | PASS |
3 critical tests, 3 passed, 0 failed
3 tests total, 3 passed, 0 failed
==============================================================================
Output: /home/tsubo/devel/docker-simpleRouter/Robot_Framework/output.xml
Log: /home/tsubo/devel/docker-simpleRouter/Robot_Framework/log.html
Report: /home/tsubo/devel/docker-simpleRouter/Robot_Framework/report.html
コマンドラインからTestcaseを実行して、
テスト結果が「良好」になりました。
18
さきほどのテスト結果ログを確認することもできます。
19
参考)Robot Framework RIDE
Robot FrameworkのIDE環境を活用すれば、画面上から
Testcase編集・テスト実行を操作できて、たいへん便利です。
20
ここで紹介したTestcaseは、ほんの一部機能
しか活用しておりません。
詳しくは、
http://robotframework.org

More Related Content

What's hot

さくらのクラウドでVyOS使ってみた
さくらのクラウドでVyOS使ってみたさくらのクラウドでVyOS使ってみた
さくらのクラウドでVyOS使ってみたSAKURA Internet Inc.
 
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編Masaru Oki
 
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Tomoya Hibi
 
Technical report for IPv6 Routing w/ bgp4+ (part2)
Technical report for IPv6 Routing w/ bgp4+ (part2)Technical report for IPv6 Routing w/ bgp4+ (part2)
Technical report for IPv6 Routing w/ bgp4+ (part2)Toshiki Tsuboi
 
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry PiNetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pitokudahiroshi
 
Xen4.0 and vt-d Network Performance Benchmark
Xen4.0 and vt-d Network Performance BenchmarkXen4.0 and vt-d Network Performance Benchmark
Xen4.0 and vt-d Network Performance BenchmarkMitsutoshi Kiuchi
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Tomoya Hibi
 
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
MastodonインスタンスをセットアップできるスタートアップスクリプトについてMastodonインスタンスをセットアップできるスタートアップスクリプトについて
Mastodonインスタンスをセットアップできるスタートアップスクリプトについてさくらインターネット株式会社
 
10分で作るクラスライブラリ
10分で作るクラスライブラリ10分で作るクラスライブラリ
10分で作るクラスライブラリ_norin_
 
FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話Masaru Oki
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Tomoya Hibi
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたいKenichiro MATOHARA
 
SDN Japan: ovs-hw
SDN Japan: ovs-hwSDN Japan: ovs-hw
SDN Japan: ovs-hwykuga
 

What's hot (20)

さくらのクラウドでVyOS使ってみた
さくらのクラウドでVyOS使ってみたさくらのクラウドでVyOS使ってみた
さくらのクラウドでVyOS使ってみた
 
V6 unix vol.2 in okinawa
V6 unix vol.2 in okinawaV6 unix vol.2 in okinawa
V6 unix vol.2 in okinawa
 
Vyatta 改造入門
Vyatta 改造入門Vyatta 改造入門
Vyatta 改造入門
 
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編
 
Lagopus 0.2.2
Lagopus 0.2.2Lagopus 0.2.2
Lagopus 0.2.2
 
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
 
Technical report for IPv6 Routing w/ bgp4+ (part2)
Technical report for IPv6 Routing w/ bgp4+ (part2)Technical report for IPv6 Routing w/ bgp4+ (part2)
Technical report for IPv6 Routing w/ bgp4+ (part2)
 
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry PiNetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pi
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
Xen4.0 and vt-d Network Performance Benchmark
Xen4.0 and vt-d Network Performance BenchmarkXen4.0 and vt-d Network Performance Benchmark
Xen4.0 and vt-d Network Performance Benchmark
 
ASAMAP 開発秘話
ASAMAP 開発秘話ASAMAP 開発秘話
ASAMAP 開発秘話
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
 
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
MastodonインスタンスをセットアップできるスタートアップスクリプトについてMastodonインスタンスをセットアップできるスタートアップスクリプトについて
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
 
ZynqMP勉強会
ZynqMP勉強会ZynqMP勉強会
ZynqMP勉強会
 
10分で作るクラスライブラリ
10分で作るクラスライブラリ10分で作るクラスライブラリ
10分で作るクラスライブラリ
 
FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
 
SDN Japan: ovs-hw
SDN Japan: ovs-hwSDN Japan: ovs-hw
SDN Japan: ovs-hw
 

Similar to SDN Lab環境でのRobotFramework実践活用

「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)Kazuyuki Sato
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座Masahito Zembutsu
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Tech Summit 2016
 
20130315 abc firefox_os
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_osTomoaki Konno
 
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...ksk_ha
 
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKensuke Maeda
 
EchoyaGinhanazeSu_inoka.pptx
EchoyaGinhanazeSu_inoka.pptxEchoyaGinhanazeSu_inoka.pptx
EchoyaGinhanazeSu_inoka.pptxkeink
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始めtetsusat
 
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングKiwamu Okabe
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよnpsg
 
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~ [Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~ Shuichi Gojuki
 
SAS Visual Analytics 6.3 を使った DELL VRTX の評価
SAS Visual Analytics 6.3 を使った DELL VRTX の評価SAS Visual Analytics 6.3 を使った DELL VRTX の評価
SAS Visual Analytics 6.3 を使った DELL VRTX の評価Dell TechCenter Japan
 
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfacePostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfaceKohei KaiGai
 

Similar to SDN Lab環境でのRobotFramework実践活用 (20)

「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動
 
20130315 abc firefox_os
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_os
 
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKibanaでsysstatを可視化する
Kibanaでsysstatを可視化する
 
Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
EchoyaGinhanazeSu_inoka.pptx
EchoyaGinhanazeSu_inoka.pptxEchoyaGinhanazeSu_inoka.pptx
EchoyaGinhanazeSu_inoka.pptx
 
Hadoop on LXC
Hadoop on LXCHadoop on LXC
Hadoop on LXC
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
 
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミング
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~ [Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
 
SAS Visual Analytics 6.3 を使った DELL VRTX の評価
SAS Visual Analytics 6.3 を使った DELL VRTX の評価SAS Visual Analytics 6.3 を使った DELL VRTX の評価
SAS Visual Analytics 6.3 を使った DELL VRTX の評価
 
about dakota6.7 gui
about dakota6.7 guiabout dakota6.7 gui
about dakota6.7 gui
 
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfacePostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join Interface
 
Lxc on cloud
Lxc on cloudLxc on cloud
Lxc on cloud
 
Openstack+Ceph設定ガイド
Openstack+Ceph設定ガイドOpenstack+Ceph設定ガイド
Openstack+Ceph設定ガイド
 

More from Toshiki Tsuboi

SDNアプローチによるBGP経路監視の提案
SDNアプローチによるBGP経路監視の提案SDNアプローチによるBGP経路監視の提案
SDNアプローチによるBGP経路監視の提案Toshiki Tsuboi
 
RyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみた
RyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみたRyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみた
RyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみたToshiki Tsuboi
 
InterAS MPLS-VPN with RyuBgp
InterAS MPLS-VPN with RyuBgpInterAS MPLS-VPN with RyuBgp
InterAS MPLS-VPN with RyuBgpToshiki Tsuboi
 
OpenFlow in Raspberry Pi
OpenFlow in Raspberry PiOpenFlow in Raspberry Pi
OpenFlow in Raspberry PiToshiki Tsuboi
 
Evaluation of OpenFlow in RB750GL
Evaluation of OpenFlow in RB750GLEvaluation of OpenFlow in RB750GL
Evaluation of OpenFlow in RB750GLToshiki Tsuboi
 
Echo server implementation for Python
Echo server implementation for PythonEcho server implementation for Python
Echo server implementation for PythonToshiki Tsuboi
 
OpenStack with OpenFlow
OpenStack with OpenFlowOpenStack with OpenFlow
OpenStack with OpenFlowToshiki Tsuboi
 

More from Toshiki Tsuboi (9)

SDNアプローチによるBGP経路監視の提案
SDNアプローチによるBGP経路監視の提案SDNアプローチによるBGP経路監視の提案
SDNアプローチによるBGP経路監視の提案
 
RyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみた
RyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみたRyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみた
RyuBGPSpeakerを活用したOpenFlow簡易ルータを試してみた
 
InterAS MPLS-VPN with RyuBgp
InterAS MPLS-VPN with RyuBgpInterAS MPLS-VPN with RyuBgp
InterAS MPLS-VPN with RyuBgp
 
OpenFlow in Raspberry Pi
OpenFlow in Raspberry PiOpenFlow in Raspberry Pi
OpenFlow in Raspberry Pi
 
Evaluation of OpenFlow in RB750GL
Evaluation of OpenFlow in RB750GLEvaluation of OpenFlow in RB750GL
Evaluation of OpenFlow in RB750GL
 
Echo server implementation for Python
Echo server implementation for PythonEcho server implementation for Python
Echo server implementation for Python
 
OpenStack with OpenFlow
OpenStack with OpenFlowOpenStack with OpenFlow
OpenStack with OpenFlow
 
OpenFlow Group Table
OpenFlow Group TableOpenFlow Group Table
OpenFlow Group Table
 
TremaDay #2
TremaDay #2TremaDay #2
TremaDay #2
 

Recently uploaded

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 

Recently uploaded (7)

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 

SDN Lab環境でのRobotFramework実践活用

  • 3. 3 Robot Framework is a generic test automation framework for acceptance testing and acceptance test-driven development (ATDD). It has easy-to-use tabular test data syntax and utilizes the keyword-driven testing approach. Its testing capabilities can be extended by test libraries implemented either with Python or Java, and users can create new keywords from existing ones using the same syntax that is used for creating test cases. Robot Frameworkとは.. 引用元: https://code.google.com/p/robotframework/
  • 5. 5 PC2 PC1 AS65010 AS65011 BGP6 BGP4 BGP4 BGP1 BGP2 BGP3 192.168.2.101 192.168.1.102 172.16.0.0/24 SDN Lab環境でのトポロジ構成 ・BGPルータは、各Dockerコンテナ上で動作しています。 - 主な特徴 - ・運用オペレーション(NW設定等)は、REST-APIで行います。 ・BGPルータでは、WSGIサーバ(8080)が動作しています。 8080 8080 8080 8080 80808080 - 構築手順は、次ページ参照 -
  • 6. 6 $  git  clone  https://github.com/ttsubo/docker-­‐simpleRouter.git   $  cd  docker-­‐simpleRouter   $  git  checkout  TestAutomation   $  git  branch   *  TestAutomation      master 1. docker-simpleRouterを入手する $  ./simpleRouter.sh  install 2. dockerをインストールする 3. 再度ログイン後に、dockerバージョンを確認する $  docker  version $  docker  pull  ttsubo/simple-­‐router:latest   $  docker  pull  ttsubo/pc-­‐term:latest   $  docker  pull  ttsubo/test-­‐server:latest   $  docker  images 4. Dockerイメージを入手する $  sudo  pip  install  robotframework   $  sudo  pip  install  robotframework-­‐requests   $  sudo  pip  install  robotframework-­‐sshlibrary   $  sudo  pip  install  requests 5. Robot Frameworkパッケージ関係を入手する $  ./simpleRouter.sh  start 6. simpleRouterプログラムを起動する $  docker  ps 7. Dockerコンテナの起動状況を確認する → 約5分程度したら起動完了
  • 7. 7 $ docker ps CONTAINER ID IMAGE COMMAND … PORTS NAMES 3b455cf31971 ttsubo/test-server:latest "/bin/bash" … 0.0.0.0:10080->8080/tcp TestServer b0bd88248ee8 ttsubo/simple-router:latest "/bin/bash" … 0.0.0.0:8086->8080/tcp BGP6 daa2d1ba484b ttsubo/simple-router:latest "/bin/bash" … 0.0.0.0:8085->8080/tcp BGP5 f7e0ea2b9a5b ttsubo/simple-router:latest "/bin/bash" … 0.0.0.0:8084->8080/tcp BGP4 35dfe5046507 ttsubo/simple-router:latest "/bin/bash" … 0.0.0.0:8083->8080/tcp BGP3 e9b9c5b95857 ttsubo/simple-router:latest "/bin/bash" … 0.0.0.0:8082->8080/tcp BGP2 120a454e6ac3 ttsubo/simple-router:latest "/bin/bash" … 0.0.0.0:8081->8080/tcp BGP1 13c062d72e11 ttsubo/pc-term:latest "/bin/bash" … pc2 3e4eaf915abd ttsubo/pc-term:latest "/bin/bash" … pc1 Ubuntu母艦より、Dockerコンテナ上で動作しているBGPルータの WSGIサーバ(8080)にREST経由でアクセスするには、青文字のポート 番号を使用します 注意事項: 外部からWSGIサーバにアクセスするには?
  • 9. 9 まずは、ルーティング情報を追加してみる PC2 PC1 AS65010 AS65011 BGP6 BGP4 BGP4 BGP1 BGP2 BGP3 192.168.2.101 192.168.1.102 172.16.0.0/24 8080 REST-API BGP6のdockerコンテナ上から ルーティング情報 172.16.0.0/24 を追加する。
  • 10. 10 $ docker exec -it BGP6 bash root@BGP6:~# cd simpleRouter/rest-client/ root@BGP6:~/simpleRouter/rest-client# ./post_route.sh 172.16.0.0 255.255.255.0 192.168.2.101 65010:101 ====================================================================== create_route ====================================================================== /openflow/0000000000000001/route { "route": { "destination": "172.16.0.0", "netmask": "255.255.255.0", "nexthop": "192.168.2.101", "vrf_routeDist": "65010:101" } } ---------- reply: 'HTTP/1.1 200 OKrn' header: Content-Type: application/json; charset=UTF-8 header: Content-Length: 152 header: Date: Fri, 29 May 2015 23:44:40 GMT ---------- { "route": { "vrf_routeDist": "65010:101", "netmask": "255.255.255.0", "nexthop": "192.168.2.101", "destination": "172.16.0.0" }, "id": "0000000000000001" } BGP6でのルーティング情報追加の処理結果 Request (POST) Response 確認ポイント1 Returnコードは正常 どおり 200 だった
  • 11. 11 隣接ルータでルーティング情報を確認してみる PC2 PC1 AS65010 AS65011 BGP6 BGP4 BGP4 BGP1 BGP2 BGP3 192.168.2.101 192.168.1.102 172.16.0.0/24 8080 REST-API BGP4のdockerコンテナ上から ルーティング情報を確認する。
  • 12. 12 $ docker exec -it BGP4 bash root@BGP4:~# cd simpleRouter/rest-client/ root@BGP4:~/simpleRouter/rest-client# ./get_rib_kai.sh ====================================================================== get_rib ====================================================================== /openflow/0000000000000001/rib ---------- reply: 'HTTP/1.1 200 OKrn' header: Content-Type: application/json; charset=UTF-8 header: Content-Length: 560 header: Date: Sat, 30 May 2015 00:00:19 GMT ---------- { "rib": "Status codes: * valid, > bestnOrigin codes: i - IGP, e - EGP, ? - incompleten Network Labels Next Hop Reason Metric LocPrf Pathn *> 65010:101:172.16.0.0/24 [601] 192.168.107.101 Only Path 100 ?n *> 65010:101:192.168.2.101/32 [600] 192.168.107.101 Only Path 100 ?n *> 65010:101:192.168.1.102/32 [300] 192.168.101.102 Only Path 100 65011 ?n”, "id": "0000000000000001", "time": "2015/05/30 00:00:19" } Request(GET) Response BGP4でのルーティング情報確認の処理結果 確認ポイント2 さきほど追加した ルーティング情報が 確かに含まれていた
  • 14. 14 *** settings *** Resource Resources/create_route.robot Resource Resources/get_event.robot Resource Resources/get_rib.robot *** Variables *** ${DESTINATION} 172.16.0.0 ${NETMASK} 255.255.255.0 ${NEXTHOP} 192.168.2.101 ${VRF_ROUTEDIST} 65010:101 ${myhost} BGP6 ${myport} 8086 ${peerhost} BGP4 ${peerport} 8084 ${check_prefix} 65010:101:172.16.0.0/24 ${expected_value} OK *** TestCases *** (1-1) Create prefix(172.16.0.0/24) in vrf(65010:101) in Router(BGP6) ${route}= Create Dictionary destination=${DESTINATION} ... netmask=${NETMASK} ... nexthop=${NEXTHOP} ... vrf_routeDist=${VRF_ROUTEDIST} Create Route ${route} ${myhost} ${myport} (1-2) Check previous prefix in RoutingTable in Peer Router(BGP4) Wait Until Keyword Succeeds 60s 10s ... Check Rib_prefix information ... ${peerhost} ... ${peerport} ... ${check_prefix} … snip Test/test1_create_route.robot : TestCase名を定義 : ルーティング情報の辞書を作成 : Create Routeを呼び出す : TestCase名を定義 : Check Rib_prefix Informationを呼び出す : TestCase終了の判定条件(Timeout 10秒、最大60秒)
  • 15. 15 *** settings *** Library Lib.conversions Library RequestsLibrary Library Collections *** Keywords *** Create Route [Arguments] ${route} ${host} ${port} ${headers}= Create Dictionary Content-Type=application/json Create Session ${host} http://127.0.0.1:${port} ${headers} ${data}= Create Dictionary route=${route} ${data}= Get Json From Dict ${data} ${result} = Post ${host} /openflow/0000000000000001/route ${data} Log ${result.status_code} Log ${result.json()['route']} Should Be Equal As Strings ${result.status_code} 200 Resources/create_route.robot 確認ポイント1 Returnコードは正常どおり 200 か否かを判定する : 引数パラメータを定義 : httpのhead情報を定義 : httpのURIを定義 : POSTメソッドの入力データに整形する : POSTメソッド実行 : 処理結果をログ化 : 処理結果の判定 {"route": { "destination": "172.16.0.0", "netmask": "255.255.255.0", "nexthop": "192.168.2.101", "vrf_routeDist": "65010:101" }} 入力データ完成形
  • 16. 16 *** settings *** Library RequestsLibrary Library Collections *** Keywords *** Get Rib [Arguments] ${host} ${port} ${headers}= Create Dictionary Content-Type=application/json Create Session ${host} http://127.0.0.1:${port} ${headers} ${result} = Get Request ${host} /openflow/0000000000000001/rib Log ${result.status_code} Log ${result.json()['rib']} Should Be Equal As Strings ${result.status_code} 200 [return] ${result.json()['rib']} Check Rib_med information [Arguments] ${host} ${port} ${check_med} ${result}= Get Rib ${host} ${port} Should Contain ${result} ${check_med} Check Rib_prefix information [Arguments] ${host} ${port} ${check_prefix} ${result}= Get Rib ${host} ${port} Should Contain ${result} ${check_prefix} Check Rib_no_prefix information [Arguments] ${host} ${port} ${check_prefix} ${result}= Get Rib ${host} ${port} Should Not Contain ${result} ${check_prefix} Resources/get_rib.robot 確認ポイント2 さきほど追加したルーティング情報 が含まれているか否かを判定する : 処理結果の判定 : GETメソッド実行 : 引数パラメータを定義 : 処理結果をログ化 : Get Ribを呼び出す : 引数パラメータを定義 : httpのhead情報を定義 : httpのURIを定義 : 呼び出し元に処理結果を戻す : 処理結果の判定
  • 17. 17 test1_create_route.robot を実行してみる $ cd Robot_Framework/ $ pybot Tests/test1_create_route.robot ============================================================================== Test1 Create Route ============================================================================== (1-1) Create prefix(172.16.0.0/24) in vrf(65010:101) in Router(BGP6) | PASS | ------------------------------------------------------------------------------ (1-2) Check previous prefix in RoutingTable in Peer Router(BGP4) | PASS | ------------------------------------------------------------------------------ (1-3) check reachability from pc1(192.168.1.102) to pc2(172.16.0.101) | PASS | ------------------------------------------------------------------------------ Test1 Create Route | PASS | 3 critical tests, 3 passed, 0 failed 3 tests total, 3 passed, 0 failed ============================================================================== Output: /home/tsubo/devel/docker-simpleRouter/Robot_Framework/output.xml Log: /home/tsubo/devel/docker-simpleRouter/Robot_Framework/log.html Report: /home/tsubo/devel/docker-simpleRouter/Robot_Framework/report.html コマンドラインからTestcaseを実行して、 テスト結果が「良好」になりました。
  • 19. 19 参考)Robot Framework RIDE Robot FrameworkのIDE環境を活用すれば、画面上から Testcase編集・テスト実行を操作できて、たいへん便利です。