シナリオ開発ストーリー - katataku/webserv GitHub Wiki

シナリオ開発ストーリー

サマリー

  1. 正常系シナリオ
  2. 異常系シナリオ
  3. ストレステストシナリオ

正常系シナリオ

No. シナリオ名 できること 開発イメージ
1-1 固定レスポンス どのようなリクエストに対しても、200 OKの固定のレスポンスを返す。とりあえず動く感じにする。 Socketを完成させる。それ以外は固定値でハードコーディング。

このタイミングで統合テストOFFにする。(nginxの挙動と相違点が多く、意味のあるテストにならない。)
1-2 ファイル取得処理 任意の場所へのGETリクエストに対して、200 OKのレスポンスとファイルの内容を返す。 configでドキュメントrootを変えられたりという、サーバの設定変更の機能もここで組み込む。RequestのURLからファイルのパスも取得する。GetFile処理を完成させる。

この時点で統合テストをONにする。(GETだけは正しい挙動になるべきだし、そのことを保証していくべき。)
1-3 オートインデックス configファイルでautoindex onとした場合に、Listページが表示される。 ConfigでAutoIndexの設定を読み込めるようにする。ListDirectory処理を完成させる。 Transactionで繋ぎ込みを行う。
1-4 configで複数Location設定可能 configファイルで設定した複数のロケーションごとに、異なる動作をさせる。(autoindex on/offなど)。 ServerLocationFacadeの処理を完成させる。 Configで複数Locationを読み込めるようにする。
1-5 リダイレクト configファイルで設定したリダイレクト先に、リダイレクトされる。 Configでreturn設定を読み込めるようにParseを修正。Transactionモジュールでの前処理を組み込んでいく。
1-6 chunkedリクエスト transfer-encoding = chunkedの形式に対応できる。
1-7 複数仮想サーバ起動 複数の仮想サーバを設定し、hostヘッダの値に従って、異なる動作を実行できる。 Configでserver_nameの値を読み込めるよう修正。hostヘッダの値により、ServerLocationFacadeで使用するServerLocationを設定する。
1-8 CGI起動 cgi-binパスへのアクセスに対して、cgiの起動を行い、レスポンスを返す。(ファイルアップロード処理は不要。あくまで起動だけ。) Configでcgi_extensionの設定を読み込めるようにする。
1-9 ファイルアップロード cgi-binパスへのアクセスに対して、cgiの起動を行い、201レスポンスを返す。POSTで送られたファイルをサーバに保存する。
1-10 ファイル削除 cgi-binパスへのアクセスに対して、cgiの起動を行い、200レスポンスを返す。Deleteで指示されたファイルを削除する。
1-11 LimitClientBody処理 LimitClientBody処理ができる。
1-12 errorページ errorページを設定して、errorページを表示できるようにする。る。 ConfigでError_pageの設定を読み込めるようにする。Transactionの中で、errorページを返すように設定する。
1-X HEAD処理 HEAD処理ができる。 Responseでbodyを送らないようにだし分けられるようにする。

異常系シナリオ

No. シナリオ名 できること 開発イメージ
2-X 403 Forbidden 当該エラーをレスポンドする。指定されたエラーページを表示できる。 ConfigでLimitExceptの設定を読み込めるようにする。
2-X 404 Not Found 当該エラーをレスポンドする。指定されたエラーページを表示できる。
2-X 413 Payload Too Large 当該エラーをレスポンドする。指定されたエラーページを表示できる。
2-X 414 URI Too Long 当該エラーをレスポンドする。指定されたエラーページを表示できる。
2-X 500 Internal Server Error 当該エラーをレスポンドする。指定されたエラーページを表示できる。
2-X 501 Not Implemented 当該エラーをレスポンドする。指定されたエラーページを表示できる。
2-X 505 HTTP Version Not Supported 当該エラーをレスポンドする。指定されたエラーページを表示できる。
2-X configのパース失敗 configファイルが存在しなかったり、形式不正など。起動失敗として、異常終了させる。
2-X FILE操作失敗 GETするファイルが存在しなかったり、権限不足など。どうなるんだ・・・?
2-X hostヘッダのないリクエスト対応 400エラーを返す。
2-X Socket.send()でのシステムコール失敗 500エラーを返す。

ストレステストシナリオ

No. シナリオ名 できること 開発イメージ
3-X テスターを動かす テスターを動かしてOKが出ること
3-X レビュー項目 レビュー項目を確認してストレステストの項目がOKになるようにする

1-1

  • Config

    • ServerLocationFacade.Choose()でダミーの値の入ったServerLocationを返す
    • WebservConfig.CreateServerLocations()でダミーの値の入った値を返す
    • ServerLocationにメンバ変数を追加する
    • configファイルの読み込みは行わない
    • 固定値についてテスト
  • Webserv

    • 特に作業なし
  • Socket

    • IOMultiplexerの全部
    • Socketクラスを使って、send/recvができる。
      • テストなし
  • HTTP

    • Request.ParseでダミーのRequestを返すように
    • Requestにメンバ変数を追加
    • ResponseBuilderで200OK用のダミーのResponseを返すように
    • Responseにメンバ変数を追加
    • Response.Writeができるように
    • ダミーデータに応じたHTTP Responseを返すように(+α)
      • Response, Requestのテスト
  • Transaction

    • Exec:ResponseBuilder.Build(string body)を直接使って、Responseを返す。
      • テストなし
  • Logging

    • 特に作業なし
  • CGI

    • 特に作業なし
  • 統合テスト

    • 特に作業なし

1-2

  • Config

    • 設定ファイルの読み込みは./default.confから読み込むこととする。(ハードコーディング)
      • WebserverConfigのパース処理(lexer, parser)
    • WebserverConfigの値を元にCreateServerLocations()を動かす
  • Webserv

    • 特に作業なし
  • Socket

    • 特に作業なし
  • HTTP

    • Request Parseを使って、正しいRequestオブジェクトを作成する(lexerはなくても良さそう)
  • Transaction

    • GetFileExecutor(req, sl): ファイルを取得し、bodyにつめてResponseオブジェクトを作る。
    • ファイルパスをURIから変換するタスクもあるかも
  • Logging

    • 特に作業なし
  • CGI

    • 特に作業なし

1-3

  • Config

  • Webserv

  • Socket

  • HTTP

  • Transaction

  • Exec:ResponseBuilderを直接使って、Responseを返す。

  • Logging

    • 特に作業なし
  • CGI

⚠️ **GitHub.com Fallback** ⚠️