17 Jun 2013, 13:57

cronとwatchrを使ってJenkinsからオレオレリポジトリ監視してみる

はじめに

Jenkinsを利用てリポジトリ監視をしたい。しかし、自分が利用しているSCMは社内独自ツールという、

(´・д・`)

なカンジなので、Jenkinsのプラグインがなかった。しかたがないので、こんな方法でなんとかならないか考えた。

  • cronを利用して、5分毎にローカルのリポジトリをアップデートする。
  • watchrを利用して、ファイルの変更を監視。
  • wgetを利用して、Jenkinsのジョブをキックする。

[toc]

今回利用するもの

  • CentOS
  • git
  • Jenkins
  • crontab
  • watchr

cronで定期リポジトリ更新

5分毎にローカルで持っているリポジトリを更新する。5分毎の定期実行はJenkinsを利用てもいいけど、これはバックグラウンドで動かしたいので、cronを利用しようと思う。

まずは、crontabに実行したいコマンドを記述する。以下のコマンドでエディタが開きます。

% crontab -e  

cronの記述方法は

「分」「時」「日」「月」「曜日」 [実行コマンド]

詳しくは、以下を参照。

crontabの書き方 — server-memo.net

「/」を利用すると、間隔を指定できる。たとえば、5分毎にコマンドを実行するには、以下のように書く。

*/5 * * * * git pull 

せっかくならば、JenkinsのJobを使ってもよい。その場合は、古いビルドの破棄にチェックを入れて、ビルドの最大保存数を制限する。Jenkinsで5分定期を動かす記法はcronと同じ。

*/5 * * * *

watchrを利用して、ファイルの変更を監視

ファイルに変更があったかどうかを監視するためのrubyスクリプトでwatchrというものがある。これで、ファイルの変更を見つけたらJenkins Jobをキックしてみる。(ちなみに、pythonだとwatchmedo)

[tsu-nera]% gem install watchr
Successfully installed watchr-0.7
Parsing documentation for watchr-0.7
1 gem installed

設定ファイルに監視のルールを書く。設定ファイルの書き方は、Readmeが参考になる。

以下のように、監視したいファイルを正規表現で、監視に引っかかったファイルに対して、実行したいコマンドを書く。

watch( 'test/test_.*\.rb' )  {|md| system("ruby #{md[0]}") }
watch( 'lib/(.*)\.rb' )      {|md| system("ruby test/test_#{md[1]}.rb") }

wathcrコマンドに設定ファイルを渡して実行する。

bash-4.1# watchr git.watchr &

wgetを利用して、Jenkinsのジョブをキック

wgetでURLを指定すると、Jenkinsのジョブを実行することができる。

$ wget --http-user=<ユーザ名> --http-password=<パスワード> http://yourserver.com/job/<ジョブ>/build?token=<トークン名>

以下の過去記事も参照。

今回はコレ。

wget --no-proxy --http-user=tsu-nera --http-password=*********** http://192.168.118.130:8080/job/vxUnit/build?token=vxunit_token

まとめると、watchrに渡す設定ファイルは以下のようになる。

watch( 'src/*.[ch]' )  {|md| system("wget --no-proxy --http-user=tsu-nera --http-password=********** http://localhost:8080/job/vxUnit/build?token=vxunit_token") }
watch( 'test/*.[ch]' )  {|md| system("wget --no-proxy --http-user=tsu-nera --http-password=********** http://localhost:8080/job/vxUnit/build?token=vxunit_token") }

16 Jun 2013, 23:01

CentOSで日本標準時の時刻をntpで取得するためのメモ

CentOSにntpサーバを入れて、日本標準時刻に自動的に合わせるためのメモです。

[toc]

NTPとは

NTPとは、NetWork Time Protocolの略。

時刻を問い合わせる機能を持ち、正確な時間をコンピュータに反映することができる。

NTPのインストール

% sudo yum -y install ntp

時刻を他サーバに問い合わせる

日本標準時プロジェクトというものがあり、ここから日本の正確な時刻を配信している。

日本標準時プロジェクト 公開NTP

ntp.nict.jpというサーバから正確な時刻を取得する。

% sudo ntpdate ntp.nict.jp
17 Jun 07:44:15 ntpdate[30214]: adjust time server 133.243.238.243 offset 0.005146 sec

ntpdデーモンを起動して、自動的に時刻同期させる

/etc/ntp.confの編集

デーモンを起動することで、時刻を自動同期できます。設定ファイルは、/etc/ntp.confです。

server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org

となっている部分を、以下のように編集。

server -4 ntp.nict.jp
server -4 ntp1.jst.mfeed.ad.jp
server -4 ntp2.jst.mfeed.ad.jp
server -4 ntp3.jst.mfeed.ad.jp

ntp1.jst.mfeed.ad.jpはntp.nict.jpと同期している別サーバ。

NTPサービス起動

設定が完了したら、サービスを起動。

sudo service ntpd start
ntpd を起動中:                                             [  OK  ]

ntpd -pでステータスを確認することができます。

ntpq -p
remote           refid      st t when poll reach   delay   offset  jitter
=============================================================================
ntp-b3.nict.go. .NICT.           1 u   45   64    1   51.180   36.062   0.004
ntp1.jst.mfeed. 172.29.3.50      2 u   45   64    1   46.038   35.957   0.004
ntp2.jst.mfeed. 172.29.2.50      2 u   44   64    1   37.927   31.670   0.004
ntp3.jst.mfeed. 172.29.3.50      2 u   43   64    1   41.949   30.128   0.004

自動起動の設定

最後に、自動起動の設定をして終了

% sudo chkconfig ntpd on
% chkconfig --list ntpd
ntpd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

環境

  • CentOS 6.4

参考

16 Jun 2013, 09:10

組込み開発の常識!?C-Kermitの使い方を調べたメモ

はじめに

シリアルケーブルを利用して組み込みターゲットに接続する時、kermitコマンドを使う。

仕事で、kermitコマンドしらなくて3人くらいにバカにされたので調べてみた。(´・ω・`)

組込みソフト開発では常識っぽ。

kermitとは

kermitとは、通信用プロトコルの種類の一つ。ようはsshやtelnetの兄弟。

kermitのインストール

WindowsだとMS-kermit、Unix系だとC-kermit/G-kermitなどがあるらしい。今回はLinux上で利用するのでC-kermitを試す。

C-Kermit Binaries

インストールは、ソースを落としてきてコンパイルするようだ。ソースのアーカイブはココ

最新版を落としてくる。ckuってやつがそれっぽい。

bash-4.1# mkdir kermit
bash-4.1# cd kermit/
bash-4.1# wget ftp://kermit.columbia.edu/kermit/archives/cku302.tar.gz
bash-4.1# tar zxvf cku302.tar.gz

make targetは環境によって異なるようだ。makefileに書いてある。今回はCentOSなので、linuxをつける。

bash-4.1# make linux
bash-4.1# make install

エラーした(´・ω・`)

MANDIR=/usr/local/man/man1
Creating /usr/local/man/man1...
mkdir: ディレクトリ `/usr/local/man/man1' を作成できません: そのようなファイルやディレクトリはありません
make: *** [install] エラー 1

ディレクトリを作りなおして、リトライ。

bash-4.1# mkdir -p /usr/local/man/man1
bash-4.1# make install

kermitの使い方

公式ドキュメントは以下。

kermitと入力すると、対話モードで起動

[tsu-nera]% kermit
C-Kermit 9.0.302 OPEN SOURCE:, 20 Aug 2011, for Linux
 Copyright (C) 1985, 2011,
  Trustees of Columbia University in the City of New York.
Type ? or HELP for help.
(/home/tsu-nera/) C-Kermit>

接続デバイスと接続速度をそれぞれ設定して接続する。

# デバイスを設定 /dev/ttyS0がシリアル#0 /dev/ttyUSB0がUSBケーブル
C-Kermit> set line /dev/ttyS0
# 接続スピード デバイスごと
C-Kermit> set speed 9600
# 接続する connectでもよい
C-Kermit> c

.kermrcに初期設定をしておけば、kermit起動時に読み込まれる。

いろいろオプションがあるけれども、シリアルケーブルに接続するためには、-lをつける。

kermit -l /dev/ttyS0

.kermrc以外の設定ファイルを読みこむときは、-y (arg)で。色々と作っておいて、呼び分ける。

kermit -y ~/.kermrc0
kermit -y ~/.kermrc1

参考

16 Jun 2013, 06:38

畜生、ブログエディタ変更だ!Windows上のMarkDownPadで編集してWordPressに投稿する

はじめに

今までは、WordPress投稿用のエディタはWindows Live Writerを利用していた。

ブログを独自ドメインに変更してテーマの更新を実行したら、テーマが反映されなくなってしまった。

解決方法は場合場合によって違うようで、ネット上の方法をすべて試してみたけれども、ダメだった。

畜生、エディタ変更だ!ヽ(`Д´)

Markdown記法というのがシンプルで強力ときいたため、これでブログがかけたらいいなと思った。

というわけで、今日はWordPressでMarkdownを利用する方法を調査しました。

[toc]

Markdown on Save Improved を導入

WordPressの投稿エディタでMarkDownを利用するためのプラグイン、Markdown on Save Improvedを入れる。インストールは、プラグインの検索からいつもの方法で。

WordPress › Markdown on Save Improved « WordPress Plugins

プラグインを有効化して新規投稿をしようとすると、デフォルトのエディタがMarkdown用のエディタになる。

MarkDownでかかれた記事は保存するときにHTMLに変換されるという仕組み。

WordPressプラグインが利用するタグを埋め込む場合

MarkDown中に、WordPressの機能のタグを利用したくなることがある。たとえば、目次を自動生成するためのTOCタグだったり、HyntaxHighwriterのタグだったり。

普通に生でタグを記入をすると、HTML変換時に、消されてしまう。

こういう時は、<div> </div>で囲むとよいみたい。

参考:

色やフォント、画像が使いたい時

MarkDown中に、HTMLを直接かける。なので、色を変えたい場所や、大きさを調整したい前後で

<font> </font>をつければよい。

MarkDownPad2もいっしょにつかう

まだMardDown記法自体に慣れていないため、頭のなかで完成された記事が描けない。そこで、MarkDownをリアルタイムプレビューしてくれるWindowsクライアントも探してみた。以下の記事が参考になった。

Windows向けMarkdownエディタまとめ | ぶろゲ

世界で一番有名そうなWindows用MarkDownクライアントソフト「MarkDownPad2」を入れてみる。

ダウンロードは以下のサイトから。

MarkdownPad – The Markdown Editor for Windows

起動するとこんな感じ。

リアルタイムプレビューができるところが嬉しい。また、日本語翻訳されていて利用していて不具合はない。

このMarkdownをそのままWordPressに貼り付けても、プレビュー通りにならない。MarkDownっぽいスタイルシートを適用する。

  • git://github.com/nicolashery/markdownpad-github.git

おわりに

まだ、実験段階なので、これが自分のスタイルになるかどうかはわからない。

このままだと、いちいちWebページを開かないと記事の投稿ができない。これは面倒だ。

次は、Emacsのorg2blogからWordPressにポストすることを試してみる。

一番いいのは、Windows Live Writerが使えようになることなんだけど、なんとかならないかな。。。

もう3時間くらい調べた気がする。。。はあ。(´。・ω・。`)

追記

Windows Live Writerのテーマがようやく更新できた。

原因は、index.htmlのPHPがバグってた!!!

でも、良い機会なので、MarkDownをもう少しいじってみる。

16 Jun 2013, 04:13

いつ独自ドメインに移行するの?今でしょ!独自ドメインを取得しWordPressサイトを移行したまとめ

このブログも開設してから1年以上経ちました。初めは半年もてばいいやとか思っていましたが、ブログを書くことがけっこう勉強のモチベーションになっていたりもします。

今後もずっと続けていこうとおもったので、思い切ってfuturismo.bizという独自ドメインを取得しました。.bizといいつつも、ビジネス用途ではないが、これしかなかった。

今はしょぼいアクセス数だけど、これから爆発的にアクセス数があがる(希望的観測 (-_-;)オンリーワンなサイトを目指すのだ。いつ移行するの?今でしょ!

あと、futurismoという単語で取得できるドメインがけっこうないことに焦った。(futurismoはイタリア語で未来派という意味)いつ移行するの?今でしょ!

Googleのページランクも!はてなブックマークも!被リンクも!
すべてをかなぐり捨てて、移行します。゚(゚´ω`゚)゚。

とはいえ、301リダイレクト機能を使って、リスクを避けようかと思います。

環境

  • ロリポップサーバ
  • WordPress

[toc]

サイトのバックアップをとる

これは、以下の記事を参照してください。

WordPress完全バックアップマニュアル(BackWPupでバックアップ) | Futurismo

独自ドメインを取得する

今回は、ムームードメインというサービスで取得しました。ここも省略。

ロリポップに独自ドメインを設定する

管理画面(https://user.lolipop.jp/)にログインして、左のツールバーより

  • 独自ドメイン -> 独自ドメイン設定 -> 独自ドメイン設定

を選択。登録画面が現れるので、設定する独自ドメインと公開フォルダを設定する。これで、公開フォルダにアクセスしたものと同じ記事が、独自ドメインにアクセスすると見れるようになる。設定反映には、しばらく(1時間くらい?)かかるみたい。

WordPressで独自ドメインに移行する

一時間くらい立って、独自ドメインにアクセスすると、ブログのトップが表示される!

http://futurismo.biz/

しかし、トップページだけが独自ドメインに移行できたが、配下のページは旧URLのままだ。WordPressの設定で、旧URL配下のページも独自ドメインの新URL配下に移動させる。管理画面から、

  • 設定 -> 一般設定 -> WordPressアドレス/サイトアドレス

に、取得したドメインをいれればよい。

Googleアナリティクスのリアルタイム解析で、訪問者がいなくなることを今か今かと待つ。ここぞという瞬間を狙い、今だ(*`・д・)ノ

これで、移行完了?

旧URLから301リダイレクトで新URLに転送する

このままだと、Google検索から旧URLにやってきた人は、ページが404 Not Foundになってみつからなくなる。

image

旧URLを訪れたひとは自動的に新URLに転送する。これを、リダイレクトという。

wordpressでリダイレクト設定をするには、.htaccessというファイルを編集する。以下を追記した。書き方は、ロリポップの記事を参考にされたし。

URLの書き換え / ホームページ / マニュアル – ロリポップ!

RewriteEngine On
# http://futurismo.bizにURLを統一
RewriteCond %{HTTP_HOST} ^hmi-me.ciao.jp
RewriteRule ^(.*) http://futurismo.biz/$1 [R=301,L]

追記:このやりかたでリダイレクトが動く場合と動かない場合がある。調査中。。。

# 301リダイレクトする
Redirect 301 /wordpress/ http://futurismo.biz/

ちなみに、redirectionというwordpressのツールを試したが、これダメダった。

http://wordpress.org/plugins/redirection/

同一ドメイン内ならば転送してくれるが、ドメインが異なる場合は、元のURL配下に飛ばそうとする。(http;//hogehoge.com/http://uhauha.com みたいな)

その他、細かいなにか

  • ページ内リンクの置換

MySQLのデータベースを一気に置換します。phpMyAdminにログインして、エクスポート メニューからエクスポート。自分は、Backwpupでバックアップしたsqlデータを利用する。

.sqlファイルをエディタで開いて、旧URLを新URLに置換する。(1600くらい!こんなに置換して大丈夫?)

あとは、インポートからアップロードする。以下の記事も参照。

BackWPupのbackwpup_db_restore.phpが消えた!それでもリストアする場合の方法メモ | Futurismo

 

サブディレクトリ構成では、設定 -> アドレス変更では、メニューが現れなかった。ルート レベルのドメインのみに制限されている。しかたがないので、再登録した。へんなペナルティがつかないといいな。

  • はてなブックマークウィジェット再設定

http://b.hatena.ne.jp/guide/blogparts.select?type=widget

  • Googleサイト内検索の再設定
  • (カノニカルタグ)の導入

重複するコンテンツを一つのURLに統一することを、URLの正規化という。(カノニカルタグ)を挿入することで、そのサイトが検索サービスで優先的に上位にくる。

設定しようと思ったら、これはすでにAll in One SEO プラグインに含まれてた。

  • ZenBackの再設定

ZenBackからやってくるユーザ数もバカにできないので、確実に設定しておく。

 

参考

16 Jun 2013, 01:23

BackWPupのbackwpup_db_restore.phpが消えた!それでもリストアする場合の方法メモ

WordPressのバックアップには、BackWPupというプラグインを利用している。リストアが必要になったのに、サイトにアクセスしてみたら、

404 Not Found ….

な・ん・だ・と  (o´・Д・`)ノ

バックアップのツールなのに、リストアできないとは悲惨。色々調べたら、phpMyAdminからリストアする方法があるようだ。以下、方法をメモ

phpMyAdminからのSQLデータインポート方法

phpMyAdminにアクセスして、インポートを選択。

リストアしたいsqlファイルをアップロードする。あとは、デフォルト設定で実行を選択。数分で完了する。

skitch

すごい簡単ラクチン\(^o^)/。
こんなにサクッとデキるならば、backwpup_db_restore.phpはいらないね。

15 Jun 2013, 15:57

ドメイン移行しました

独自ドメインに移行しました。

このブログは、自分がプログラマである限り一生続けていくつもりです。

一生続けるために、独自ドメインを取得しました。

また、futurismoという名がつく独自ドメインで年1000円代のものが、あと1つしかなかったという焦りもありました。

いずれにしろ、今後とも、ごひいきごひきたて、何卒よろしくおねがいします。

RSSの再登録も、よろしくおねがいします。

 

10 Jun 2013, 23:35

ソースコードの全体を俯瞰デキる!Eclipse用minimapプラグイン 「Overview plugin for Eclipse」

Eclipseでminimapの機能が使えたらいいなといろいろ探してていたら、

見つけた\(^o^)/ 

Overview plugin for Eclipse | Eclipse Plugins, Bundles and Products – Eclipse Marketplace

minimapとは

minimapとは、コードの全体姿を俯瞰的に見ることができる、ビューのこと。BirdView/Code Outlineともいうらしい。Emacsにはあるので、Eclipseにもきっとあるはずとおもった。

http://www.emacswiki.org/emacs/MiniMap

また、以下のサイトの記事でminimapプラグインが現る!と紹介されていたけれども、バグっていそうなので、手を出せてなかった。

遂にEclipse用「MiniMap」プラグイン現る! | 情報科学屋さんを目指す人のメモ

Overview plugin for Eclipseの使い方

まずは、EclipseマーケットプレイスからOverview pluginを検索して、インストール。

インストールが完了したら、ツールバーの

  • ウィンドウ -> ビューの表示 -> その他 -> 概要 -> 概要

を選択して、ビューを表示させる。

skitch

ビューを右か左に縦長に配置すれば完成。ソースコードの縮図が画面横に映し出される。

クリックするとズームアップも可能だ。Ctrl + o でアウトラインビューと組み合わせて、より効率的に画面を移動できそうだ。なにより、カッコイイ(・∀・)。

09 Jun 2013, 12:48

CMockでモック関数を自動生成する!なんてピーターパン症候群だった。。。手動生成やっつけダミー地獄に落ちたメモ

以前、こんな記事を書きました。

恐るべきレガシーコードの救世主になるか?!ドロドロ依存なモジュールたちを『CMock』ですっ裸にする | Futurismo

 

どんなコードに対しても、テストが簡単にかけるみたいな、素敵なことを夢想したわけだが、それは空虚な夢幻だった。ピーターパンだった。これを、仕事で実践しようとしたときに、現実は冷酷だった。

自動生成してもコンパイル通らない(´。・ω・。`)

結局ドロドロな手動ダミー関数地獄に落ちていき、忙殺されたのだった。今日は、そんな苦労のなかで見つけたTipsをメモします。

[toc]

 

64bit対応

コンパイルオプションに以下のデファインを追加すればいいっぽい。

UNITY_INCLUDE_64

//を/* */に置き換え

そもそも、//を利用してコメントするとコンパイルエラー。。手強い。/* */に変換した。

UNITY_OUTPUT_CHARで標準出力関数を置き換え

Unityでは標準出力のために、putcharを利用している。

//-------------------------------------------------------
// Output Method
//-------------------------------------------------------

#ifndef UNITY_OUTPUT_CHAR
//Default to using putchar, which is defined in stdio.h above
#define UNITY_OUTPUT_CHAR(a) putchar(a)
#else
//If defined as something else, make sure we declare it here so it's ready for use
extern int UNITY_OUTPUT_CHAR(int);
#endif

 

自分の環境(vxWorks)では、putcharが使えなかった。printfは利用できるようだった。そこで、UNITY_OUTPUT_CHARを自分で定義しななおして、標準出力関数を置き換えた。

//-------------------------------------------------------
// Output Method
//-------------------------------------------------------

#define UNITY_OUTPUT_CHAR(a) printf("%c",(a))

#if 0
#ifndef UNITY_OUTPUT_CHAR
//Default to using putchar, which is defined in stdio.h above
#define UNITY_OUTPUT_CHAR(a) putchar(a)
#else
//If defined as something else, make sure we declare it here so it's ready for use
extern int UNITY_OUTPUT_CHAR(int);
#endif
#endif

インクルードファイルの挿入

OSのファイルを先頭に取り込まないと行けない場合がある。自分の場合は、仕事でvxWorksを利用しているので、”vxWorks.h”。Windowsだと、”Windows.h”みたいな。生成されたモックファイルたちにも、ソースの頭で読みこむ必要かあった。

cmock/lib/cmock_config.hの以下のパラメータにヘッダファイルを入れることで自動生成するものに挿入してくれる。

    :includes_h_pre_orig_header  => nil,

    :includes_h_post_orig_header => nil,

    :includes_c_pre_header       => nil,

    :includes_c_post_header      => nil

たとえば、Cソースの頭にヘッダファイルを挿入したい場合は、

    :includes_c_pre_header  => [‘hogehog_internal.h’] (ここは配列)

とする。すると、以下のように生成される。

#include

#include

#include

#include “unity.h”

#include “cmock.h”

#include “hogehoge.h”

#include “CMock_hogehoge.h”

string.h、stdlib.h、setjmp.h、unity.h、cmock.hのあとに挿入される。自分の場合は、 の前に挿入したかったので、lib/cmock_generater.rbを直接編集をしてしまったorz。

とりあえず、hogehoge_internal.hを先頭に挿入して、あとはコンパイルエラーが出る度に、hogehoge_internal.hに場当たり的にいろいろ定義していった。

extern宣言している関数をモックする

ヘッダファイルにextern宣言されている関数はモックで自動生成されなかった。調べたら、ヘッダファイルにexternを書くことは、なんの意味もないらしい!(グローバル変数は別)

CMockの場合、デフォルトではextern宣言されている関数のモック作成はしないが、オプションを変更することで可能。

lib/cmock_config.rbの:treat_externs のオプションを:excludeら:includeに変更する。

=begin

    :treat_externs            => :exclude,       
=end

    :treat_externs            => :include,      

困るのが、extern宣言されている関数が複数箇所で宣言されている場合。これは妥協して手動でどちらかの関数を#if 0した。

extern宣言しているグローバル変数の扱い

グローバル変数の場合、extern宣言はヘッダファイルに書いて、実体はCソース書くことがルール。テストをするときに、テストをするときに、テストコードに実体を宣言して利用していたが、このグローバル変数の実体を自動生成してくれないかなとおもった。調べると、こんな記事を発見。

CMock / Discussion / CMock Forum:Mocking extern functions

これによると、自分のテストファイルに変数を宣言しなさいとある。はい、そうします。

自動生成されたモックと手動生成したモックの使い分け

とりあえず、接頭語をMock_とCMock_で分ける。

MakefileでどちらのCMock_(自動生成)かMock_(手動生成)のどちらを利用するかを選ぶ。ある関数は自動生成を利用したいけど、別関数は自前の関数を利用したいなんてこともある。

そのときは、callbackオプションを利用する。

    :plugins                  => [‘callback’],

これで、hogehoge()に対して、hogehoge_StubWithCallbackという関数が生成される。この関数に、自前のモック関数をセットすればよい。

例えば、Mock_hogehoge { return 2;}を使って、こんな風に書く。

#include "Mock_hogehoge.h"

TEST(hogehoge,second)
{
  hogehoge_StubWithCallback(Mock_hogehoge());
  TEST_ASSERT_EQUAL( 2, (hogehoge() + 1) );
}

しかし、この宣言をいちいち記述するのも面倒なので、よく呼ばれる関数は、ダミーかフェイクを自前で作ったほうがよいとおもった。(OSの関数はモックするべきでなかったとおもった)

モック関数としてではなくて、フェイク関数として使う場合

Ignore関数を呼ぶとよい。;pluginにignoreオプションを追加でモック関数が生成される。パラメータチェックや何回呼ばれたかのチェックがされなくなる。

    :plugins                  => [‘ignore’],

モードが2種類あり、呼ばれた回数はチェックする場合とそうでない場合。ignoreオプションで選ぶ。(args_and_call / args_only)

staticなし関数をかってにexternでみてる場合

ヘッダファイルに宣言されていないが、static宣言もない、他のファイルの関数を勝手に使ってる。これは、対処の方法がわからなかった。手動生成。

最後に

CMockは痒いところに手が届く、使い勝手がよいツールなので調べればいい手が見つかるかもしれない。Rakeをもう少し使いこなして、このへんの処理をやりたいことろだ。まあ、地獄に落ちつつも後先考えないやっつけ仕事でテスト環境はとりあえずできたので、よいのだけれども。

09 Jun 2013, 09:30

UnityやCMockをEclipseで使うときに役立つ設定まとめ

最近はようやくUnityやCMockの使い方が分かってきた感じだ。今日は、Eclipseでの便利な設定を試してみた。元ネタ、本家公式サイトからの抜粋。

TEST_IGNOREタグの設定

Eclipseは指定したタグを検索して、タスク・ビューに表示させる機能がある。これに、UnityでのTEST_IGNOREを加えることで、これからするテストに対するリマインダを設定できる。以下を選択。

  • ツールバー
    • ウィンドウ -> 設定
      • C/C++ -> タスク・タグ -> 新規

TEST_IGNOREを追加する。その後、プロジェクトを右クリックして、

  • インデックス -> 全てのファイルを更新

することで、再度タグの検索が走り、TEST_IGNOREがタスクビューに表示される。

SunShade Pluginでテストコードとソースコード間をいったりきたり

SunShade プラグインを入れると、テストコードとソースコード間をいったりきたりできる。通常は、2画面で並べて作業しているので、出番は少なめかもしれない。

The Sunshade suite of eclipse plugins

ツールバー -> ヘルプ -> 新規ソフトウェアのインストール -> 追加 でhttp://sunshade.sourceforge.net/updateを追加してインストールする。

起動するとエラーした(´・ω・`)SWTエラーが発生しましただと。

Cannot initialize Drop

pluginsディレクトリのnet.sourceforge.sunshade.filedrag_3.4.0というディレクトリを削除したらエラーしなくなった。こんな対処で大丈夫か?

機能を利用するためには、ツールバー -> ウィンドウ -> 設定 -> Sunshade -> Scripted Actionsを選択。たとえば、src/*\**.cとtest/Test**.cの間を行き来するためには、以下のように書く。

importPackage(java.lang, Packages.org.eclipse.ui);
importPackage(Packages.net.sourceforge.sunshade.util);
var wb = PlatformUI.getWorkbench(); // IWorkbench API
var editor = // IEditorPart API
  wb.getActiveWorkbenchWindow().getActivePage().getActiveEditor(); 
if (editor)
{
  var input = editor.getEditorInput(); // IEditorInput API
  var path = input.getPath(); // IPath API
  var filename = path.toOSString();
  if (filename.indexOf("Test") == -1) // ここを書き換え
    filename = filename.replace("src\\","test\\Test"); // ここを書き換え
  else
    filename = filename.replace("test\\Test","src\\"); // ここを書き換え
  //alert("Filename: " + filename);
  FileUtil.openEclipseEditorForFile(filename);
}

Test拡張子以外に対応する場合でも、例えばMock拡張子でも、すこしコードを書き換えれば利用できる。

このSunshadeにはErrorlinkというツールがあるけれども、こっちはうまく動かない。

コードテンプレートの設定

Eclipseのコードテンプレート機能を利用すれば、Ctrl + Spaceでテストのテンプレートを呼び出すことができる。

レッツ メタプログラミング(^O^)/

ツールバー -> ウィンドウ -> 設定 -> C/C++ -> エディタ- -> テンプレートを選択。

新規を選択して、テスト用のテンプレートを記述する。たとえば、Unityのフィクスチャ機能のテンプレートは以下。

TEST(${test_group_name},${test_case_name})
{
  ${line_selection}${cursor}

  TEST_IGNORE_MESSAGE("${test_case_name} Needs Definition.");
}

RUN_TEST_CASE(${test_group_name}, ${test_case_name});

別にテンプレートを利用しなくても、testまで書いて Ctrl + Spaceである程度の自動補完はできる。

最近はようやくUnityやCMockの使い方が分かってきた感じだ。今日は、Eclipseでの便利な設定を試してみた。元ネタ、本家公式サイトからの抜粋。

Throw The Switch! – White Papers – Using Eclipse IDE

TEST_IGNOREタグの設定

Eclipseは指定したタグを検索して、タスク・ビューに表示させる機能がある。これに、UnityでのTEST_IGNOREを加えることで、これからするテストに対するリマインダを設定できる。以下を選択。

  • ツールバー
    • ウィンドウ -> 設定
      • C/C++ -> タスク・タグ -> 新規

TEST_IGNOREを追加する。その後、プロジェクトを右クリックして、

  • インデックス -> 全てのファイルを更新

することで、再度タグの検索が走り、TEST_IGNOREがタスクビューに表示される。

SunShade Pluginでテストコードとソースコード間をいったりきたり

SunShade プラグインを入れると、テストコードとソースコード間をいったりきたりできる。通常は、2画面で並べて作業しているので、出番は少なめかもしれない。

The Sunshade suite of eclipse plugins

ツールバー -> ヘルプ -> 新規ソフトウェアのインストール -> 追加 でhttp://sunshade.sourceforge.net/updateを追加してインストールする。

起動するとエラーした(´・ω・`)SWTエラーが発生しましただと。

Cannot initialize Drop

pluginsディレクトリのnet.sourceforge.sunshade.filedrag_3.4.0というディレクトリを削除したらエラーしなくなった。こんな対処で大丈夫か?

機能を利用するためには、ツールバー -> ウィンドウ -> 設定 -> Sunshade -> Scripted Actionsを選択。たとえば、src/*\**.cとtest/Test**.cの間を行き来するためには、以下のように書く。

importPackage(java.lang, Packages.org.eclipse.ui);
importPackage(Packages.net.sourceforge.sunshade.util);
var wb = PlatformUI.getWorkbench(); // IWorkbench API
var editor = // IEditorPart API
  wb.getActiveWorkbenchWindow().getActivePage().getActiveEditor(); 
if (editor)
{
  var input = editor.getEditorInput(); // IEditorInput API
  var path = input.getPath(); // IPath API
  var filename = path.toOSString();
  if (filename.indexOf("Test") == -1) // ここを書き換え
    filename = filename.replace("src\\","test\\Test"); // ここを書き換え
  else
    filename = filename.replace("test\\Test","src\\"); // ここを書き換え
  //alert("Filename: " + filename);
  FileUtil.openEclipseEditorForFile(filename);
}

Test拡張子以外に対応する場合でも、例えばMock拡張子でも、すこしコードを書き換えれば利用できる。

このSunshadeにはErrorlinkというツールがあるけれども、こっちはうまく動かない。

コードテンプレートの設定

Eclipseのコードテンプレート機能を利用すれば、Ctrl + Spaceでテストのテンプレートを呼び出すことができる。

レッツ メタプログラミング(^O^)/

ツールバー -> ウィンドウ -> 設定 -> C/C++ -> エディタ- -> テンプレートを選択。

新規を選択して、テスト用のテンプレートを記述する。たとえば、Unityのフィクスチャ機能のテンプレートは以下。

TEST(${test_group_name},${test_case_name})
{
  ${line_selection}${cursor}
  
  TEST_IGNORE_MESSAGE("${test_case_name} Needs Definition.");
}

RUN_TEST_CASE(${test_group_name}, ${test_case_name});

別にテンプレートを利用しなくても、testまで書いて Ctrl + Spaceである程度の自動補完はできる。