これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションのXNUMXつを使用してOnWorks無料ホスティングプロバイダーで実行できるコマンドテッシュです。
プログラム:
NAME
tesh-テストシェル
SYNOPSIS
テシュ [オプション] ... [FILE] ...
DESCRIPTION
これはTESHツールです。 これは、テストシェル、つまり、に特化した一種のシェルを構成します。
テストを実行します。 実行するアクションのリストは、testsuiteと呼ばれるファイルファイルから解析されます。
OPTIONS
--cd some / directory:前に作業ディレクトリを切り替えるようにteshに依頼します
テストの開始
--setenv var = value:特定の環境変数を設定します
--cfg arg:各コマンドラインにパラメーター--cfg=argを追加します
--enable-coverage:「profiling:」で始まる出力行を無視します
テッシュ FILE 構文
これらのファイルの構文は次のとおりです。
各行の種類は最初の文字で指定されます(XNUMX番目の文字は空白にする必要があります。
無視されます):
フォアグラウンドで実行する`$'コマンド
バックグラウンドで実行する`&'コマンド
コマンドに渡す`<'入力
コマンドから期待される`>'出力
「!」 metacommandは、次のいずれかになります。
「タイムアウト」 |いいえ
「信号を期待する」
「リターンを期待する」
`出力'
`setenv = '
`p'印刷する文字列
`P'CRITICALレベルで出力する文字列(greppingのログ記録を容易にする)
期待される出力がコマンドが吐き出すものと一致しない場合、TESHはエラーを生成します
差分を表示します(以下の出力を参照)。
IO ORDERS
<行と>行は、現在のブロックで定義されているコマンドにIOを追加します(ブロックは分離されています)
空白行による)。 これらの行は、コマンドの後または前に配置できます。
次のXNUMXつのチャンクの違いは、主にテストスイートの外観です。
TESHは気にしません。 (IO-orders.teshを参照)
$猫
<TOTO
> TOTO
> TOTO
$猫
<TOTO
それでも、同じブロックに複数のコマンドを含めることは可能ですが、いずれもありません
任意の出力を持つことができます。 コマンドが取得すると言うことができるように、それは少し制限的に見えるかもしれません
次のコマンドまでのすべてのIOですが、次のようなエラーが発生するのではないかと心配しています。
$ cd トト
> TOTO
$mkfileファイル
TOTOはcdコマンドに渡され、ユーザーは明らかにそれをcdコマンドに渡します。
mkfile組み込みコマンド(以下を参照)。
STREAM リダイレクション
ストリームリダイレクト(shの> "、" <"、および" | "構造)は、まだteshに実装されていません。
これは少し制限がありますが、パッチを歓迎します...
主に問題となるのは、一時ファイルを作成することです。 The
解決策は、次の例のように、「mkfile」組み込みコマンドを使用することです。$ mkfile
myFile>一部のコンテンツ>ファイルへ
これにより、myFile(mkfileコマンドの最初の引数)というファイルが作成されます。 その内容
コマンドに提供されるすべての入力になります。
リターン CODE
子が戻りコードとして0を返さない場合、TESHは適切なエラーメッセージを出力します(cf.
catch-return.tesh)、コード+40自体を返します。
特定のコマンドが別の値を返す必要があることを指定することもできます。 このため、
引数として整数を取る「expectreturn」メタコマンドを使用します。 変更のみ
次のコマンドに適用します(set-return.teshを参照)。
信号
TESHは、子供が信号(segfaultsなど)によって殺されたことを検出し、
適切なエラーメッセージ(catch-signal.teshを参照)。
特定のコマンドが特定の信号を発生させる必要があることを指定することもできます。 このため、
「expectsignal」メタコマンドを使用します。 引数として信号名を取ります。 変更のみ
次のコマンドに適用します(set-signal.teshを参照)。
タイムアウト
デフォルトでは、すべてのコマンドの実行に5秒が与えられます(catch-timeout.teshを参照)。 あなたはできる
これを「timeout」で変更します。これは引数として整数を取ります。 変更は適用されるだけです
次のコマンドに移動します(set-timeout.teshを参照)。 引数として「no」を渡すと、コマンド
タイムアウトできません。
出力
デフォルトでは、コマンドの出力は予想されるものと一致し、エラーは次のようになります。
不一致で発生しました。 これを変更するメタコマンド:
「出力無視」->出力は完全に破棄されます
「出力表示」->出力が表示されます(ただし検証されていません)
「出力ソート」->検証する前に表示をソートします(以下を参照)
並べ替え 出力
出力の並べ替えは奇妙な考えのようですが、SimGridでは必須です。
プロセスは、任意のスケジューリングポイントで順不同で実行されます(つまり、で実行する準備ができているすべてのプロセス
シミュレートされた時間tは並行して実行されます)。 シミュレーターの出力が一致することを保証するために、
比較する前に、出力を並べ替える必要があります。
シミュレーターは、そのログフォーマット引数で実行されることを期待しています。
--log = root.fmt:[%10.6r]%e(%i:%P @%h)%e%m%n次に、teshは最初の19文字で文字列を並べ替えます
のみであり、行頭が等しい場合に安定します。 これにより、次のことが保証されます。
(1)テッシュは効果的です(誤検知なし、誤検知なし)
(2)スケジューリングポイントが互いに分離されている
(3)各スケジューリングポイントで、プロセスは互いに分離されます
(4)特定のスケジュールで特定のプロセスが言うことの順序
ポイントは保持されます。
これはもちろん非常にSimGrid指向であり、teshの一般性を破りますが、誰が気にしますか
実は?
ソートに使用されるプレフィックスの長さを変更する場合は、後に指定するだけです。
次のような出力ソートディレクティブ:
! 出力ソート22
ENVIRONMENT
setenv metaコマンドを使用して、テスト済みのプロセス環境にコンテンツを追加できます。
期待どおりに動作します。 例えば:
"setenv PATH =/ binに"
onworks.netサービスを使用してオンラインでteshを使用する
