/** * personium.io * Copyright 2014 FUJITSU LIMITED * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.fujitsu.dc.test.jersey.cell; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.Calendar; import java.util.HashMap; import javax.ws.rs.core.MediaType; import org.apache.http.Header; import org.apache.http.HttpHeaders; import org.apache.http.HttpStatus; import org.apache.http.protocol.HTTP; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.categories.Category; import org.odata4j.core.ODataConstants; import org.odata4j.core.ODataVersion; import com.fujitsu.dc.core.DcCoreException; import com.fujitsu.dc.test.categories.Integration; import com.fujitsu.dc.test.categories.Regression; import com.fujitsu.dc.test.categories.Unit; import com.fujitsu.dc.test.jersey.AbstractCase; import com.fujitsu.dc.test.jersey.DcResponse; /** * JerseyTestFrameworkを利用したユニットテスト. */ @Category({Unit.class, Integration.class, Regression.class }) public class ReadTest extends AbstractCase { /** レスポンスヘッダ. */ private static final String[] RESPONSE_HEADERS = {HTTP.CONTENT_TYPE, ODataConstants.Headers.DATA_SERVICE_VERSION}; /** レスポンスヘッダの値. */ private static final String[] RESPONSE_HEADER_VALUES = {MediaType.APPLICATION_JSON, ODataVersion.V2.asString}; /** レスポンスヘッダのHashMap. */ private HashMap<String, String> responseHeaderMap; /** テストに使用するCellのId. */ private String cellId; /** Cellを削除したかどうかのフラグ. */ private boolean deleteCell = false; /** * コンストラクタ. テスト対象のパッケージをsuperに渡す必要がある */ public ReadTest() { super("com.fujitsu.dc.core.rs"); this.responseHeaderMap = new HashMap<String, String>(); for (int i = 0; i < RESPONSE_HEADERS.length; i++) { this.responseHeaderMap.put(RESPONSE_HEADERS[i], RESPONSE_HEADER_VALUES[i]); } } /** * すべてのテストで必ず1度実行される処理. */ @BeforeClass public static void beforeClass() { } /** * テスト完了時にelasticsearchのノードをクローズする. */ @AfterClass public static void afterClass() { } /** * すべてのテストで必ず1度実行される処理. */ @Before public final void initCell() { // DBサーバーを共有した際、同時にテストを行うと、同じCell名では409となってしまうため、一意にするため、Cell名に時間をセット String cellName = "cellName"; cellName = cellName + Long.toString(Calendar.getInstance().getTimeInMillis()); // Cellを作成 DcResponse res; res = createCell(cellName); // Cell作成のレスポンスチェック // 201になることを確認 assertEquals(HttpStatus.SC_CREATED, res.getStatusCode()); // LOCATIONヘッダを取得 Header[] resHeaders = res.getResponseHeaders(HttpHeaders.LOCATION); // レスポンスヘッダにLOCATIONが含まれているかチェック assertNotNull(resHeaders); // LOCATIONヘッダが複数存在する場合もNGとする assertEquals(1, resHeaders.length); // 作成したCellのIDを抽出 this.cellId = resHeaders[0].getValue().split("'")[1]; } /** * testの後に実行する. */ @After public final void afterCell() { if (!this.deleteCell) { this.settleCell(); } } /** * 登録したCellをすぐに取得するテスト. */ @Test public final void Cell登録直後にCellが参照できること() { // Cellを作成 DcResponse res; res = createCell("testSoonGetCell"); assertEquals(HttpStatus.SC_CREATED, res.getStatusCode()); // Cell作成のレスポンスチェック // LOCATIONヘッダを取得 Header[] resHeaders = res.getResponseHeaders(HttpHeaders.LOCATION); // 作成したCellのIDを抽出 String createdcellId = resHeaders[0].getValue().split("'")[1]; // Cellを取得 res = this.restGet(getUrl(createdcellId)); // Cellを取得できることを確認 assertEquals(HttpStatus.SC_OK, res.getStatusCode()); // 作成したCellを削除 res = restDelete(getUrl(createdcellId)); // 削除された事を確認するため、取得を行い、404になる事を確認 res = this.restGet(getUrl(createdcellId)); assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); } /** * test用に作成したCellを削除する. */ private void settleCell() { // test用に作成したCellを削除 this.setHeaders(null); DcResponse res = restDelete(getUrl(this.cellId)); assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); // 削除された事を確認するため、取得を行い、404になる事を確認 res = this.restGet(getUrl(this.cellId)); assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); this.deleteCell = true; } /** * Cellの取得の正常系のテスト. $format → なし Accept → なし */ @Test public final void Cellの取得の正常系のテスト() { // $format なし // Acceptヘッダ なし String url = getUrl(this.cellId); DcResponse res = this.restGet(url); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); // レスポンスボディのパース this.checkCellResponse(res.bodyAsJson(), url); } /** * Cell名にクオート無しの数値型式名を指定した場合400エラーとなること. */ @Test public final void Cell名にクオート無しの数値型式名を指定した場合400エラーとなること() { // $format なし // Acceptヘッダ なし String cellName = "123456"; String url = getUrlWithOutQuote(cellName, null); DcResponse res = this.restGet(url); assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); checkErrorResponse(res.bodyAsJson(), DcCoreException.OData.ENTITY_KEY_PARSE_ERROR.getCode(), DcCoreException.OData.ENTITY_KEY_PARSE_ERROR.getMessage()); } /** * Cellの取得で認証ヘッダに空文字を指定した場合に認証エラーが返却されること. */ @Test public final void Cellの取得で認証ヘッダに空文字を指定した場合に認証エラーが返却されること() { HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, ""); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId)); // ステータスコード:401 // コンテンツタイプ:application/json // Etagヘッダが存在しない // ボディのエラーコードチェック assertEquals(HttpStatus.SC_UNAUTHORIZED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR401-AU-0003"); } /** * Cellの取得で認証トークンにBearerとBasic以外の形式でトークン値空文字を指定した場合に認証エラーが返却されること. */ @Test public final void Cellの取得で認証トークンにBearerとBasic以外の形式でトークン値空文字を指定した場合に認証エラーが返却されること() { HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, "Token token=\"" + AbstractCase.MASTER_TOKEN_NAME + "\""); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId)); // ステータスコード:401 // コンテンツタイプ:application/json // Etagヘッダが存在しない // ボディのエラーコードチェック assertEquals(HttpStatus.SC_UNAUTHORIZED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR401-AU-0003"); } /** * Cellの取得で認証トークンにBasic形式でトークン値空文字を指定した場合に認証エラーが返却されること. */ @Test public final void Cellの取得で認証トークンにBasic形式でトークン値空文字を指定した場合に認証エラーが返却されること() { HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, "Basic "); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId)); // ステータスコード:401 // コンテンツタイプ:application/json // Etagヘッダが存在しない // ボディのエラーコードチェック assertEquals(HttpStatus.SC_UNAUTHORIZED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); } /** * Cellの取得で認証トークンにBasic形式でマスタートークンを指定した場合に認証エラーが返却されること. * TODO V1.1 Basic認証に対応後有効化する */ @Test @Ignore public final void Cellの取得で認証トークンにBasic形式でマスタートークンを指定した場合に認証エラーが返却されること() { HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, "Basic " + AbstractCase.MASTER_TOKEN_NAME); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId)); // ステータスコード:401 // コンテンツタイプ:application/json // Etagヘッダが存在しない // ボディのエラーコードチェック assertEquals(HttpStatus.SC_UNAUTHORIZED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR401-AU-0004"); } /** * Cellの取得で認証トークンにBasic形式で不正な値を指定した場合に認証エラーが返却されること. * TODO V1.1 Basic認証に対応後有効化する */ @Test @Ignore public final void Cellの取得で認証トークンにBasic形式で不正な値を指定した場合に認証エラーが返却されること() { HashMap<String, String> headers = new HashMap<String, String>(); // コロンを含んだ文字列ををBase64化して、ヘッダーに指定 headers.put(HttpHeaders.AUTHORIZATION, "Basic YzNzgUZpbm5vdg=="); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId)); // ステータスコード:401 // コンテンツタイプ:application/json // Etagヘッダが存在しない // ボディのエラーコードチェック assertEquals(HttpStatus.SC_UNAUTHORIZED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR401-AU-0004"); } /** * Cellの取得で認証トークンにBearer形式でトークン値空文字を指定した場合に認証エラーが返却されること. */ @Test public final void Cellの取得で認証トークンにBearer形式でトークン値空文字を指定した場合に認証エラーが返却されること() { HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, "Bearer "); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId)); // ステータスコード:401 // コンテンツタイプ:application/json // Etagヘッダが存在しない // ボディのエラーコードチェック assertEquals(HttpStatus.SC_UNAUTHORIZED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR401-AU-0006"); } /** * Cellの取得でマスタートークン以外のトークンを指定した場合に認証エラーが返却されること. */ @Test public final void Cellの取得でマスタートークン以外のトークンを指定した場合に認証エラーが返却されること() { HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, "Bearer test"); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId)); // ステータスコード:401 // コンテンツタイプ:application/json // Etagヘッダが存在しない // ボディのエラーコードチェック assertEquals(HttpStatus.SC_UNAUTHORIZED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR401-AU-0006"); } /** * Cellの取得で不正なIDを指定した場合に、BadRequestが返却される事. $format → なし Accept → なし */ @Test public final void Cellの取得で不正なIDを指定した場合にBadRequestが返却されること() { DcResponse res = this.restGet(getUrl("'a'")); assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR400-OD-0004"); } /** * Cellの取得でIDを空文字指定した場合にjsonフォーマットでNotFoundが返却されること. $format → なし Accept → なし */ @Test public final void Cellの取得でIDを空文字指定した場合にjsonフォーマットでNotFoundが返却されること() { DcResponse res = this.restGet(getUrl("")); assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR404-OD-0002"); } /** * Cell取得した場合にjsonフォーマットでレスポンスが返却されること. $format → json Accept → なし */ @Test public final void $formatがjsonでCell取得した場合にjsonフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format json // Acceptヘッダ なし DcResponse res = this.restGet(url + "?" + QUERY_FORMAT_JSON); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); // レスポンスボディのパース this.checkCellResponse(res.bodyAsJson(), url); } /** * Cell取得した場合にatomフォーマットでレスポンスが返却されること. $format → atom Accept → application/atom+xml */ @Test public final void $formatがatomでCell取得した場合にatomフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format atom // Acceptヘッダ なし DcResponse res = this.restGet(url + "?" + QUERY_FORMAT_ATOM); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.responseHeaderMap.put(HTTP.CONTENT_TYPE, MediaType.APPLICATION_ATOM_XML); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); res.bodyAsXml(); } /** * Cell取得した場合にatomフォーマットでレスポンスが返却されること. $format → atom Accept → application/atom+xml */ @Test public final void $formatがatomかつacceptがatomでCell取得した場合にatomフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format atom // Acceptヘッダ application/atom+xml HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); this.setHeaders(headers); DcResponse res = this.restGet(url + "?" + QUERY_FORMAT_ATOM); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.responseHeaderMap.put(HTTP.CONTENT_TYPE, MediaType.APPLICATION_ATOM_XML); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); res.bodyAsXml(); } /** * Cell取得した場合にatomフォーマットでレスポンスが返却されること. $format → atom Accept → application/atom+xml */ @Test public final void $formatがatomかつacceptがjsonでCell取得した場合にatomフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format atom // Acceptヘッダ application/json HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); this.setHeaders(headers); DcResponse res = this.restGet(url + "?" + QUERY_FORMAT_ATOM); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.responseHeaderMap.put(HTTP.CONTENT_TYPE, MediaType.APPLICATION_ATOM_XML); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); res.bodyAsXml(); } /** * Cell取得した場合にjsonフォーマットでレスポンスが返却されること. $format → json Accept → application/atom+xml */ @Test public final void $formatがjsonかつacceptがatomでCell取得した場合にjsonフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format json // Acceptヘッダ application/atom+xml HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); this.setHeaders(headers); DcResponse res = this.restGet(url + "?" + QUERY_FORMAT_JSON); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); // レスポンスボディのパース this.checkCellResponse(res.bodyAsJson(), url); } /** * Cell取得した場合にjsonフォーマットでレスポンスが返却されること. $format → json Accept → application/json */ @Test public final void $formatがjsonかつacceptがjsonでCell取得した場合にjsonフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format json // Acceptヘッダ application/json HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); this.setHeaders(headers); DcResponse res = this.restGet(url + "?" + QUERY_FORMAT_JSON); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); // レスポンスボディのパース this.checkCellResponse(res.bodyAsJson(), url); } /** * Cell取得した場合にatomフォーマットでレスポンスが返却されること. $format → なし Accept → application/atom+xml */ @Test public final void acceptがatomでCell取得した場合にatomフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format なし // Acceptヘッダ application/atom+xml HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); this.setHeaders(headers); DcResponse res = this.restGet(url); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.responseHeaderMap.put(HTTP.CONTENT_TYPE, MediaType.APPLICATION_ATOM_XML); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); res.bodyAsXml(); } /** * Cell取得した場合にjsonフォーマットでレスポンスが返却されること. $format → なし Accept → application/json */ @Test public final void acceptがjsonでCell取得した場合にjsonフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format なし // Acceptヘッダ application/json HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); this.setHeaders(headers); DcResponse res = this.restGet(url); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); // レスポンスボディのパース this.checkCellResponse(res.bodyAsJson(), url); } /** * IfNoneMatchヘッダに一致する値を指定した場合レスポンスが304で返却されること. * $format → なし Accept → なし */ @Test public final void IfNoneMatchヘッダに一致する値を指定した場合レスポンスが304で返却されること() { String url = getUrl(this.cellId); // 一度リクエストを実行してEtagを取得する DcResponse res = this.restGet(getUrl(this.cellId)); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.checkHeaders(res); assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); this.checkCellResponse(res.bodyAsJson(), url); // If-None-MatchヘッダにEtagの値を指定して再度リクエストを実行する String eTag = res.getFirstHeader(HttpHeaders.ETAG); HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.IF_NONE_MATCH, eTag); this.setHeaders(headers); res = this.restGet(url); assertEquals(HttpStatus.SC_NOT_MODIFIED, res.getStatusCode()); } /** * IfNoneMatchヘッダに一致しない値を指定した場合にレスポンスが200で返却されること. * $format → なし Accept → なし */ @Test public final void IfNoneMatchヘッダに一致しない値を指定した場合にレスポンスが200で返却されること() { String url = getUrl(this.cellId); // $format なし // Acceptヘッダ なし DcResponse res = this.restGet(url); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.checkHeaders(res); assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); this.checkCellResponse(res.bodyAsJson(), url); String eTag = res.getFirstHeader(HttpHeaders.ETAG); // ETagを改変する String eTag2 = eTag + "aa"; // IfNoneMatchヘッダに一致しない値を指定した場合にレスポンスが200で返却されることを確認する HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.IF_NONE_MATCH, eTag2); this.setHeaders(headers); res = this.restGet(url); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.checkHeaders(res); assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); this.checkCellResponse(res.bodyAsJson(), url); } /** * Cellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること. $format → なし Accept → なし */ @Test public final void Cellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること() { this.settleCell(); DcResponse res = this.restGet(getUrl(this.cellId)); assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR404-OD-0002"); } /** * Cellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること. $format → json Accept → なし */ @Test public final void $formatがjsonでCellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること() { this.settleCell(); // $format json // Acceptヘッダ なし DcResponse res = this.restGet(getUrl(this.cellId, QUERY_FORMAT_JSON)); assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR404-OD-0002"); } /** * Cellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること. $format → atom Accept → なし */ @Test public final void $formatがatomでCellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること() { this.settleCell(); // $format atom // Acceptヘッダ なし DcResponse res = this.restGet(getUrl(this.cellId, QUERY_FORMAT_ATOM)); // TODO $formatのxml対応が完了したら確認内容を修正する assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR404-OD-0002"); } /** * Cellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること. $format → atom Accept → application/atom+xml */ @Test public final void $formatがatomかつacceptがatomでCellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること() { this.settleCell(); // $format atom // Acceptヘッダ application/atom+xml HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId, QUERY_FORMAT_ATOM)); // TODO $formatのxml対応が完了したら確認内容を修正する assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR404-OD-0002"); } /** * Cellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること. $format → atom Accept → application/json */ @Test public final void $formatがatomかつacceptがjsonでCellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること() { this.settleCell(); // $format atom // Acceptヘッダ application/json HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId, QUERY_FORMAT_ATOM)); // TODO $formatのxml対応が完了したら確認内容を修正する assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR404-OD-0002"); } /** * Cellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること. $format → json Accept → application/atom+xml */ @Test public final void $formatがjsonかつacceptがatomでCellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること() { this.settleCell(); // $format json // Acceptヘッダ application/atom+xml HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId, QUERY_FORMAT_JSON)); assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR404-OD-0002"); } /** * Cellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること. $format → json Accept → application/json */ @Test public final void $formatがjsonかつacceptがjsonでCellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること() { this.settleCell(); // $format json // Acceptヘッダ application/json HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId, QUERY_FORMAT_JSON)); assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR404-OD-0002"); } /** * Cellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること. $format → なし Accept → application/atom+xml */ @Test public final void acceptがatomでCellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること() { this.settleCell(); // $format なし // Acceptヘッダ application/atom+xml HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId)); // TODO $formatのxml対応が完了したら確認内容を修正する assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR404-OD-0002"); } /** * Cellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること. $format → なし Accept → application/json */ @Test public final void acceptがjsonでCellの取得で存在しないIDを指定した場合にjsonフォーマットでNotFoundが返却されること() { this.settleCell(); // $format なし // Acceptヘッダ application/json HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); this.setHeaders(headers); DcResponse res = this.restGet(getUrl(this.cellId)); assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR404-OD-0002"); } /** * Cellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること. $format → なし Accept → なし */ @Test public final void Cellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること() { DcResponse res = restPost(getUrl(this.cellId), ""); // レスポンスのチェック assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR405-MC-0001"); } /** * Cellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること. $format → json Accept → なし */ @Test public final void $formatがjsonでCellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること() { // $format json // Acceptヘッダ なし DcResponse res = restPost(getUrl(this.cellId), QUERY_FORMAT_JSON); // レスポンスのチェック assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR405-MC-0001"); } /** * Cellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること. $format → atom Accept → なし */ @Test public final void $formatがatomでCellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること() { // $format atom // Acceptヘッダ なし DcResponse res = this.restPost(getUrl(this.cellId), QUERY_FORMAT_ATOM); // レスポンスのチェック // TODO formatのxml対応が完了したら確認内容を修正する assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR405-MC-0001"); } /** * Cellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること. $format → atom Accept → application/atom+xml */ @Test public final void $formatがatomかつacceptがatomでCellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること() { // $format atom // Acceptヘッダ application/atom+xml HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); this.setHeaders(headers); DcResponse res = this.restPost(getUrl(this.cellId), QUERY_FORMAT_ATOM); // レスポンスのチェック // TODO formatのxml対応が完了したら確認内容を修正する assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR405-MC-0001"); } /** * Cellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること. $format → atom Accept → application/json */ @Test public final void $formatがatomかつacceptがjsonでCellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること() { // $format atom // Acceptヘッダ application/json HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); this.setHeaders(headers); DcResponse res = this.restPost(getUrl(this.cellId), QUERY_FORMAT_ATOM); // レスポンスのチェック // TODO formatのxml対応が完了したら確認内容を修正する assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR405-MC-0001"); } /** * Cellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること. $format → json Accept → application/atom+xml */ @Test public final void $formatがjsonかつacceptがatomでCellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること() { // $format json // Acceptヘッダ application/atom+xml HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); this.setHeaders(headers); DcResponse res = this.restPost(getUrl(this.cellId), QUERY_FORMAT_JSON); // レスポンスのチェック assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR405-MC-0001"); } /** * Cellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること. $format → json Accept → application/json */ @Test public final void $formatがjsonかつacceptがjsonでCellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること() { // $format json // Acceptヘッダ application/json HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); this.setHeaders(headers); DcResponse res = this.restPost(getUrl(this.cellId), QUERY_FORMAT_JSON); // レスポンスのチェック assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR405-MC-0001"); } /** * Cellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること. $format → なし Accept → application/atom+xml */ @Test public final void acceptがatomでCellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること() { // $format なし // Acceptヘッダ application/atom+xml HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); this.setHeaders(headers); DcResponse res = this.restPost(getUrl(this.cellId), ""); // レスポンスのチェック // TODO formatのxml対応が完了したら確認内容を修正する assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR405-MC-0001"); } /** * Cellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること. $format → なし Accept → application/json */ @Test public final void acceptがjsonでCellの取得で許可されていないメソッドを指定した場合にjsonフォーマットでMethodNotAllowedが返却されること() { // $format なし // Acceptヘッダ application/json HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); this.setHeaders(headers); DcResponse res = this.restPost(getUrl(this.cellId), ""); // レスポンスのチェック assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR405-MC-0001"); } /** * Acceptにimage/jpegを指定してCell取得した場合にUnsupportedMediaTypeとなること. */ @Test public final void acceptがjpegでCell取得した場合にUnsupportedMediaTypeとなること() { String url = getUrl(this.cellId); // $format なし // Acceptヘッダ image/jpeg HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, "image/jpeg"); this.setHeaders(headers); DcResponse res = restGet(url); assertEquals(HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE, res.getStatusCode()); } /** * Acceptにimage/jpegを指定してCell取得した場合にatomフォーマットでレスポンスが返却されること. $format → atom Accept → application/atom+xml */ @Test public final void $formatがatomでacceptがjpegでCell取得した場合にatomフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format atom // Acceptヘッダ image/jpeg HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, "image/jpeg"); this.setHeaders(headers); DcResponse res = restGet(url + "?" + QUERY_FORMAT_ATOM); // TODO Acceptヘッダーのチェック処理が完了したら、NOT_ACCEPTABLEのチェックに変更する assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.responseHeaderMap.put(HTTP.CONTENT_TYPE, MediaType.APPLICATION_ATOM_XML); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); res.bodyAsXml(); } /** * Acceptにimage/jpegを指定してCell取得した場合にjsonフォーマットでレスポンスが返却されること. $format → json Accept → image/jpeg */ @Test public final void $formatがjsonでacceptがjpegでCell取得した場合にjsonフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format json // Acceptヘッダ image/jpeg HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, "image/jpeg"); this.setHeaders(headers); DcResponse res = restGet(url + "?" + QUERY_FORMAT_JSON); // TODO Acceptヘッダーのチェック処理が完了したら、NOT_ACCEPTABLEのチェックに変更する assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); // レスポンスボディのパース this.checkCellResponse(res.bodyAsJson(), url); } /** * Acceptに空文字を指定してCell取得した場合にXMLでレスポンスが返却されること. $format → なし Accept → 空文字 */ @Test public final void acceptが空文字でCell取得した場合にXMLでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format なし // Acceptヘッダ 空文字 HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, ""); this.setHeaders(headers); DcResponse res = restGet(url); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.responseHeaderMap.put(HTTP.CONTENT_TYPE, MediaType.APPLICATION_ATOM_XML); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); // レスポンスボディのパース res.bodyAsXml(); } /** * Acceptに空文字を指定してCell取得した場合にatomフォーマットでレスポンスが返却されること. $format → atom Accept → application/atom+xml */ @Test public final void $formatがatomでacceptが空文字でCell取得した場合にatomフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format atom // Acceptヘッダ 空文字 HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, ""); this.setHeaders(headers); DcResponse res = restGet(url + "?" + QUERY_FORMAT_ATOM); // TODO Acceptヘッダーのチェック処理が完了したら、NOT_ACCEPTABLEのチェックに変更する assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.responseHeaderMap.put(HTTP.CONTENT_TYPE, MediaType.APPLICATION_ATOM_XML); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); res.bodyAsXml(); } /** * Acceptに空文字を指定してCell取得した場合にjsonフォーマットでレスポンスが返却されること. $format → json Accept → 空文字 */ @Test public final void $formatがjsonでacceptが空文字でCell取得した場合にjsonフォーマットでレスポンスが返却されること() { String url = getUrl(this.cellId); // $format json // Acceptヘッダ 空文字 HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, ""); this.setHeaders(headers); DcResponse res = restGet(url + "?" + QUERY_FORMAT_JSON); // TODO Acceptヘッダーのチェック処理が完了したら、NOT_ACCEPTABLEのチェックに変更する assertEquals(HttpStatus.SC_OK, res.getStatusCode()); this.checkHeaders(res); // Etagのチェック assertEquals(1, res.getResponseHeaders(HttpHeaders.ETAG).length); // レスポンスボディのパース this.checkCellResponse(res.bodyAsJson(), url); } /** * レスポンスフォーマットに不正値を指定した場合にBadRequestとなること. */ @Test public final void レスポンスフォーマットに不正値を指定した場合にBadRequestとなること() { String url = getUrl(this.cellId); // $format csv // Acceptヘッダ なし DcResponse res = restGet(url + "?" + "$format=csv"); // TODO $formatのチェック処理が完了したら、BAD_REQUESTのチェックに変更する assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); } /** * レスポンスフォーマットに不正値かつAcceptヘッダにATOMを指定した場合にBadRequestとなること. */ @Test public final void レスポンスフォーマットに不正値かつAcceptヘッダにATOMを指定した場合にBadRequestとなること() { String url = getUrl(this.cellId); // $format csv // Acceptヘッダ application/atom+xml HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); this.setHeaders(headers); DcResponse res = restGet(url + "?" + "$format=csv"); assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); } /** * レスポンスフォーマットに不正値かつAcceptヘッダにJSONを指定した場合にBadRequestとなること. */ @Test public final void レスポンスフォーマットに不正値かつAcceptヘッダにJSONを指定した場合にBadRequestとなること() { String url = getUrl(this.cellId); // $format csv // Acceptヘッダ application/json HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); this.setHeaders(headers); DcResponse res = restGet(url + "?" + "$format=csv"); assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); } private void checkHeaders(final DcResponse res) { for (int i = 0; i < RESPONSE_HEADERS.length; i++) { Header[] headers = res.getResponseHeaders(RESPONSE_HEADERS[i]); assertEquals(headers.length, 1); String value = this.responseHeaderMap.get(RESPONSE_HEADERS[i]); assertEquals(value, headers[0].getValue()); } } }