シナリオ開発ストーリー - katataku/webserv GitHub Wiki
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になるようにする |
-
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を返す。
- テストなし
- Exec:ResponseBuilder.Build(string body)を直接使って、Responseを返す。
-
Logging
- 特に作業なし
-
CGI
- 特に作業なし
-
統合テスト
- 特に作業なし
-
Config
- 設定ファイルの読み込みは./default.confから読み込むこととする。(ハードコーディング)
- WebserverConfigのパース処理(lexer, parser)
- WebserverConfigの値を元にCreateServerLocations()を動かす
- 設定ファイルの読み込みは./default.confから読み込むこととする。(ハードコーディング)
-
Webserv
- 特に作業なし
-
Socket
- 特に作業なし
-
HTTP
- Request Parseを使って、正しいRequestオブジェクトを作成する(lexerはなくても良さそう)
-
Transaction
- GetFileExecutor(req, sl): ファイルを取得し、bodyにつめてResponseオブジェクトを作る。
- ファイルパスをURIから変換するタスクもあるかも
-
Logging
- 特に作業なし
-
CGI
- 特に作業なし
-
Config
-
Webserv
-
Socket
-
HTTP
-
Transaction
-
Exec:ResponseBuilderを直接使って、Responseを返す。
-
Logging
- 特に作業なし
-
CGI