/** * MOVEで移動元がユーザスキーマで上位リソースであるコレクションが存在しない場合に404エラーとなること. */ @Test public final void MOVEで移動元がユーザスキーマで上位リソースであるコレクションが存在しない場合に404エラーとなること() { final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, FILE_NAME); try { // Fileの移動 String url = UrlUtils.entityType(CELL_NAME, BOX_NAME, "dummyCollection", "entity"); PersoniumRequest req = PersoniumRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); // リクエスト実行 PersoniumResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_NOT_FOUND); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, FILE_NAME); } }
/** * Cellの更新のNameが__の場合に400が返却されること. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のNameが__の場合に400が返却されること() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", "__"); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR400-OD-0006"); }
@Before public void setup() throws MalformedURLException { client = ClientBuilder.newClient(); client.register(PostNotFoundExceptionMapper.class); client.register(CommentNotFoundExceptionMapper.class); final WebTarget targetAuth = client.target(URI.create(new URL(base, "api/auth/login").toExternalForm())); final Response resAuthGetAll = targetAuth.request() .accept(MediaType.APPLICATION_JSON) .post(form(new Form("username", "user").param("password", "password"))); assertEquals(200, resAuthGetAll.getStatus()); String token = resAuthGetAll.getHeaderString(HttpHeaders.AUTHORIZATION); client.register(new JwtTokenAuthentication(token.substring(Constants.AUTHORIZATION_PREFIX.length()))); }
/** * BOX新規登録時にNameを1文字指定して場合_201になることを確認. */ @Test public void BOX新規登録時にNameを1文字指定して場合_201になることを確認() { PersoniumRequest req = PersoniumRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX)); String boxName = "1"; String[] key = {"Name", "Schema" }; String[] value = {boxName, TEST_BOX_SCHEMA }; req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value); try { PersoniumResponse res = request(req); // 201になることを確認 assertEquals(HttpStatus.SC_CREATED, res.getStatusCode()); } finally { deleteBoxRequest(boxName).returns(); } }
/** * relation_jsonの必須項目がない場合に異常終了すること. */ @Test public final void relation_jsonの必須項目がない場合に異常終了すること() { String reqCell = Setup.TEST_CELL1; String reqPath = INSTALL_TARGET; TResponse res = null; File barFile = new File(RESOURCE_PATH + BAR_FILE_RELATION_NONAME); byte[] body = BarInstallTestUtils.readBarFile(barFile); Map<String, String> headers = new LinkedHashMap<String, String>(); headers.put(HttpHeaders.CONTENT_TYPE, REQ_CONTENT_TYPE); headers.put(HttpHeaders.CONTENT_LENGTH, String.valueOf(body.length)); res = BarInstallTestUtils.request(REQUEST_NORM_FILE, reqCell, reqPath, headers, body); res.statusCode(HttpStatus.SC_ACCEPTED); String location = res.getHeader(HttpHeaders.LOCATION); String expected = UrlUtils.cellRoot(reqCell) + reqPath; assertEquals(expected, location); BarInstallTestUtils.assertBarInstallStatus(location, SCHEMA_URL, ProgressInfo.STATUS.FAILED); }
/** * URLを指定してPUTを行う汎用メンバ. * @param url リクエスト先のURL * @param data リクエストデータ * @return レスポンスオブジェクト */ public final PersoniumResponse restPut(final String url, final String data) { PersoniumRestAdapter rest = new PersoniumRestAdapter(); PersoniumResponse res = null; // リクエストヘッダをセット HashMap<String, String> requestheaders = new HashMap<String, String>(); requestheaders.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); try { // リクエスト res = rest.put(url, requestheaders, new ByteArrayInputStream(data.getBytes())); } catch (Exception e) { fail(e.getMessage()); } return res; }
/** * ComplexTypePropertyTypeのEdmDoubleでDefaultValueが負のDouble最大値を下回る場合_BadRequestが返却されること. */ @Test public final void ComplexTypePropertyTypeのEdmDoubleでDefaultValueが負のDouble最大値を下回る場合_BadRequestが返却されること() { // リクエストパラメータ設定 PersoniumRequest req = PersoniumRequest.post(ComplexTypePropertyUtils.CTP_REQUEST_URL); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req.addJsonBody(ComplexTypePropertyUtils.CT_PROPERTY_NAME_KEY, CT_PROPERTY_NAME); req.addJsonBody(ComplexTypePropertyUtils.CT_PROPERTY_COMPLEXTYPE_NAME_KEY, COMPLEX_TYPE_NAME); req.addJsonBody(ComplexTypePropertyUtils.CT_PROPERTY_TYPE_KEY, EdmSimpleType.DOUBLE.getFullyQualifiedTypeName()); req.addJsonBody(ComplexTypePropertyUtils.CT_PROPERTY_DEFAULT_VALUE_KEY, -2.229e-308); // リクエスト実行 PersoniumResponse response = request(req); // レスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatusCode()); checkErrorResponse( response.bodyAsJson(), PersoniumCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.getCode(), PersoniumCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params( ComplexTypePropertyUtils.CT_PROPERTY_DEFAULT_VALUE_KEY) .getMessage()); }
/** * PropertyのTypeが不正な値の場合_BadRequestが返却されること. */ @Test public final void PropertyのTypeが不正な値の場合_BadRequestが返却されること() { // リクエストパラメータ設定 PersoniumRequest req = PersoniumRequest.post(PropertyUtils.REQUEST_URL); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req.addJsonBody(PropertyUtils.PROPERTY_NAME_KEY, propName); req.addJsonBody(PropertyUtils.PROPERTY_ENTITYTYPE_NAME_KEY, PROPERTY_ENTITYTYPE_NAME); req.addJsonBody(PropertyUtils.PROPERTY_TYPE_KEY, "Edm.Datetime"); req.addJsonBody(PropertyUtils.PROPERTY_NULLABLE_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_DEFAULT_VALUE_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_COLLECTION_KIND_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_IS_KEY_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_UNIQUE_KEY_KEY, null); // リクエスト実行 PersoniumResponse response = request(req); // レスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatusCode()); checkErrorResponse(response.bodyAsJson(), PersoniumCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.getCode(), PersoniumCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params( PropertyUtils.PROPERTY_TYPE_KEY).getMessage()); }
/** * FileのMOVEでDestinationヘッダの値がリクエストURLと同じ場合に403エラーとなること. */ @Test public final void FileのMOVEでDestinationヘッダの値がリクエストURLと同じ場合に403エラーとなること() { final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, FILE_NAME); try { // 事前準備 DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, FILE_NAME); PersoniumRequest req = PersoniumRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); // リクエスト実行 PersoniumResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_FORBIDDEN); PersoniumCoreException expectedException = PersoniumCoreException.Dav.DESTINATION_EQUALS_SOURCE_URL.params(destination); ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, FILE_NAME); } }
/** * FileのMOVEでDestinationヘッダに存在するCellのURLを指定した場合に400エラーとなること. */ @Test public final void FileのMOVEでDestinationヘッダに存在するCellのURLを指定した場合に400エラーとなること() { final String destination = UrlUtils.cellRoot(CELL_NAME); try { // 事前準備 DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, FILE_NAME); PersoniumRequest req = PersoniumRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); // リクエスト実行 PersoniumResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST); PersoniumCoreException expectedException = PersoniumCoreException.Dav.INVALID_REQUEST_HEADER.params( HttpHeaders.DESTINATION, destination); ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, FILE_NAME); } }
/** * barファイルの00_metadata配下のファイルの並び順が誤っている場合に異常終了すること. */ @Test public final void barファイルの00_metadata配下のファイルの並び順が誤っている場合に異常終了すること() { String reqCell = Setup.TEST_CELL1; String reqPath = INSTALL_TARGET; TResponse res = null; File barFile = new File(RESOURCE_PATH + BAR_FILE_00META_ORDER); byte[] body = BarInstallTestUtils.readBarFile(barFile); Map<String, String> headers = new LinkedHashMap<String, String>(); headers.put(HttpHeaders.CONTENT_TYPE, REQ_CONTENT_TYPE); headers.put(HttpHeaders.CONTENT_LENGTH, String.valueOf(body.length)); res = BarInstallTestUtils.request(REQUEST_NORM_FILE, reqCell, reqPath, headers, body); res.statusCode(HttpStatus.SC_ACCEPTED); String location = res.getHeader(HttpHeaders.LOCATION); String expected = UrlUtils.cellRoot(reqCell) + reqPath; assertEquals(expected, location); BarInstallTestUtils.assertBarInstallStatus(location, SCHEMA_URL, ProgressInfo.STATUS.FAILED); }
/** * relation_jsonのFIELDNAME定義が不正な場合に異常終了すること. */ @Test public final void relation_jsonのFIELDNAME定義が不正な場合に異常終了すること() { // JSONファイルのバリデートエラー String reqCell = Setup.TEST_CELL1; String reqPath = INSTALL_TARGET; TResponse res = null; File barFile = new File(RESOURCE_PATH + BAR_FILE_RELATION_NOFIELDNAME); byte[] body = BarInstallTestUtils.readBarFile(barFile); Map<String, String> headers = new LinkedHashMap<String, String>(); headers.put(HttpHeaders.CONTENT_TYPE, REQ_CONTENT_TYPE); headers.put(HttpHeaders.CONTENT_LENGTH, String.valueOf(body.length)); res = BarInstallTestUtils.request(REQUEST_NORM_FILE, reqCell, reqPath, headers, body); res.statusCode(HttpStatus.SC_ACCEPTED); String location = res.getHeader(HttpHeaders.LOCATION); String expected = UrlUtils.cellRoot(reqCell) + reqPath; assertEquals(expected, location); BarInstallTestUtils.assertBarInstallStatus(location, SCHEMA_URL, ProgressInfo.STATUS.FAILED); }
private HttpRequest buildHttpRequest(UserRequestTest userRequest) throws JsonProcessingException { String json = new ObjectMapper().writeValueAsString(userRequest); Map<String, String> headers = new HashMap<>(); headers.put(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.getMimeType()); headers.put(HttpHeaders.ACCEPT, ContentType.APPLICATION_JSON.getMimeType()); HttpRequest request = new HttpRequest(); request.setHeaders(headers); request.setHttpMethod("POST"); request.setResource("users"); request.setPath("/users"); request.setBody(json); return request; }
/** * FileのMOVEで移動先が存在するODataコレクション配下のファイルの場合400エラーとなること. */ @Test public final void FileのMOVEで移動先が存在するODataコレクション配下のファイルの場合400エラーとなること() { final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, Setup.TEST_ODATA) + "/" + FILE_NAME; try { // 事前準備 DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, FILE_NAME); PersoniumRequest req = PersoniumRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "T"); // リクエスト実行 PersoniumResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST); PersoniumCoreException expectedException = PersoniumCoreException.Dav.RESOURCE_PROHIBITED_TO_MOVE_ODATA_COLLECTION; ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, FILE_NAME); } }
/** * WebDAVコレクションのMOVEでDestinationヘッダの値がリクエストURLと同じ場合に403エラーとなること. */ @Test public final void WebDAVコレクションのMOVEでDestinationヘッダの値がリクエストURLと同じ場合に403エラーとなること() { final String srcCol = "srcCol"; final String destCol = srcCol; final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol); try { // 事前準備 DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol); // 移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol); PersoniumRequest req = PersoniumRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destUrl); PersoniumResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_FORBIDDEN); PersoniumCoreException expectedException = PersoniumCoreException.Dav.DESTINATION_EQUALS_SOURCE_URL.params(destUrl); ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1); } }
/** * Propertyを登録する. * @param token トークン * @param cell セル名 * @param box ボックス名 * @param collection コレクション名 * @param entityTypeName EntityType名 * @param propertyName Property名 * @param type PropertyのType項目 * @param nullable PropertyのNullable項目 * @param defaultValue PropertyのDefaultValue項目 * @param collectionKind PropertyのcollectionKind項目 * @param isKey PropertyのisKey項目 * @param uniqueKey PropertyのUniqueKey項目 * @param code 期待するレスポンスコード * @return レスポンス */ public static PersoniumResponse create( String token, String cell, String box, String collection, String entityTypeName, String propertyName, String type, boolean nullable, Object defaultValue, String collectionKind, boolean isKey, String uniqueKey, int code) { String url = UrlUtils.property(cell, box, collection, null, null); PersoniumRequest req = PersoniumRequest.post(url); req.header(HttpHeaders.AUTHORIZATION, token); req.addJsonBody(PROPERTY_NAME_KEY, propertyName); req.addJsonBody(PROPERTY_ENTITYTYPE_NAME_KEY, entityTypeName); req.addJsonBody(PROPERTY_TYPE_KEY, type); req.addJsonBody(PROPERTY_NULLABLE_KEY, nullable); req.addJsonBody(PROPERTY_DEFAULT_VALUE_KEY, defaultValue); req.addJsonBody(PROPERTY_COLLECTION_KIND_KEY, collectionKind); req.addJsonBody(PROPERTY_IS_KEY_KEY, isKey); req.addJsonBody(PROPERTY_UNIQUE_KEY_KEY, uniqueKey); // リクエスト実行 PersoniumResponse response = AbstractCase.request(req); if (code != -1) { assertEquals(code, response.getStatusCode()); } return response; }
/** * Configures the headers in the specified Apache HTTP request. */ private void addHeadersToRequest(HttpRequestBase httpRequest, SdkHttpFullRequest request) { httpRequest.addHeader(HttpHeaders.HOST, getHostHeaderValue(request)); // Copy over any other headers already in our request request.headers().entrySet().stream() /* * HttpClient4 fills in the Content-Length header and complains if * it's already present, so we skip it here. We also skip the Host * header to avoid sending it twice, which will interfere with some * signing schemes. */ .filter(e -> !IGNORE_HEADERS.contains(e.getKey())) .forEach(e -> e.getValue().forEach(h -> httpRequest.addHeader(e.getKey(), h))); /* Set content type and encoding */ if (httpRequest.getHeaders(HttpHeaders.CONTENT_TYPE) == null || httpRequest.getHeaders(HttpHeaders.CONTENT_TYPE).length == 0) { httpRequest.addHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded; " + "charset=" + lowerCase(DEFAULT_ENCODING)); } }
/** * PropertyのNullableが不正な値の場合_BadRequestが返却されること. */ @Test public final void PropertyのNullableが不正な値の場合_BadRequestが返却されること() { // リクエストパラメータ設定 PersoniumRequest req = PersoniumRequest.post(PropertyUtils.REQUEST_URL); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req.addJsonBody(PropertyUtils.PROPERTY_NAME_KEY, propName); req.addJsonBody(PropertyUtils.PROPERTY_ENTITYTYPE_NAME_KEY, PROPERTY_ENTITYTYPE_NAME); req.addJsonBody(PropertyUtils.PROPERTY_TYPE_KEY, "Edm.Datetime"); req.addJsonBody(PropertyUtils.PROPERTY_NULLABLE_KEY, "test"); req.addJsonBody(PropertyUtils.PROPERTY_DEFAULT_VALUE_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_COLLECTION_KIND_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_IS_KEY_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_UNIQUE_KEY_KEY, null); // リクエスト実行 PersoniumResponse response = request(req); // レスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatusCode()); checkErrorResponse(response.bodyAsJson(), PersoniumCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.getCode(), PersoniumCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params(PropertyUtils.PROPERTY_NULLABLE_KEY) .getMessage()); }
/** * ComplexTypePropertyが存在しないとき_一覧取得で0件になること. */ @Test public final void ComplexTypePropertyが存在しないとき_一覧取得で0件になること() { String ctplocationUrl = UrlUtils.complexTypeProperty(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, null, null); // ComplexTypeProperty取得 PersoniumRequest req = PersoniumRequest.get(ctplocationUrl); req.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); PersoniumResponse resGet = request(req); // レスポンスチェック assertEquals(HttpStatus.SC_OK, resGet.getStatusCode()); checkResponseBodyList(resGet.bodyAsJson(), null, ComplexTypePropertyUtils.NAMESPACE, null); }
/** * Propertyの_EntityTypeNameが空文字の場合_BadRequestが返却されること. */ @Test public final void Propertyの_EntityTypeNameが空文字の場合_BadRequestが返却されること() { // リクエストパラメータ設定 PersoniumRequest req = PersoniumRequest.post(PropertyUtils.REQUEST_URL); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req.addJsonBody(PropertyUtils.PROPERTY_NAME_KEY, propName); req.addJsonBody(PropertyUtils.PROPERTY_ENTITYTYPE_NAME_KEY, ""); req.addJsonBody(PropertyUtils.PROPERTY_TYPE_KEY, EdmSimpleType.STRING.getFullyQualifiedTypeName()); req.addJsonBody(PropertyUtils.PROPERTY_NULLABLE_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_DEFAULT_VALUE_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_COLLECTION_KIND_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_IS_KEY_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_UNIQUE_KEY_KEY, null); // リクエスト実行 PersoniumResponse response = request(req); // レスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatusCode()); checkErrorResponse(response.bodyAsJson(), PersoniumCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.getCode(), PersoniumCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params( PropertyUtils.PROPERTY_ENTITYTYPE_NAME_KEY).getMessage()); }
/** * rootprops_xmlで定義済みのODataCol用contentsがない場合に異常終了する. */ @Test public final void rootprops_xmlで定義済みのODataCol用contentsがない場合に異常終了する() { String reqCell = Setup.TEST_CELL1; String reqPath = INSTALL_TARGET; try { TResponse res = null; File barFile = new File(RESOURCE_PATH + BAR_FILE_ODATA_SPEC_NOTEXIST); byte[] body = BarInstallTestUtils.readBarFile(barFile); Map<String, String> headers = new LinkedHashMap<String, String>(); headers.put(HttpHeaders.CONTENT_TYPE, REQ_CONTENT_TYPE); headers.put(HttpHeaders.CONTENT_LENGTH, String.valueOf(body.length)); res = BarInstallTestUtils.request(REQUEST_NORM_FILE, reqCell, reqPath, headers, body); res.statusCode(HttpStatus.SC_ACCEPTED); String location = res.getHeader(HttpHeaders.LOCATION); String expected = UrlUtils.cellRoot(reqCell) + reqPath; assertEquals(expected, location); BarInstallTestUtils.assertBarInstallStatus(location, SCHEMA_URL, ProgressInfo.STATUS.FAILED); } finally { BarInstallTestUtils.deleteCollection("odatacol1"); } }
/** * Propertyの_EntityTypeNameが存在しないEntityTypeの場合_BadRequestが返却されること. */ @Test public final void Propertyの_EntityTypeNameが存在しないEntityTypeの場合_BadRequestが返却されること() { String entityTypeName = "xxx"; // リクエストパラメータ設定 PersoniumRequest req = PersoniumRequest.post(PropertyUtils.REQUEST_URL); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req.addJsonBody(PropertyUtils.PROPERTY_NAME_KEY, propName); req.addJsonBody(PropertyUtils.PROPERTY_ENTITYTYPE_NAME_KEY, entityTypeName); req.addJsonBody(PropertyUtils.PROPERTY_TYPE_KEY, EdmSimpleType.STRING.getFullyQualifiedTypeName()); req.addJsonBody(PropertyUtils.PROPERTY_NULLABLE_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_DEFAULT_VALUE_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_COLLECTION_KIND_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_IS_KEY_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_UNIQUE_KEY_KEY, null); // リクエスト実行 PersoniumResponse response = request(req); // レスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatusCode()); checkErrorResponse(response.bodyAsJson(), PersoniumCoreException.OData.BODY_NTKP_NOT_FOUND_ERROR.getCode(), PersoniumCoreException.OData.BODY_NTKP_NOT_FOUND_ERROR.params(entityTypeName).getMessage()); }
/** * rootprops_xmlで未定義のODataCol用contentsがある場合に異常終了する. */ @Test public final void rootprops_xmlで未定義のODataCol用contentsがある場合に異常終了する() { String reqCell = Setup.TEST_CELL1; String reqPath = INSTALL_TARGET; try { TResponse res = null; File barFile = new File(RESOURCE_PATH + BAR_FILE_ODATA_CONT_NOTEXIST); byte[] body = BarInstallTestUtils.readBarFile(barFile); Map<String, String> headers = new LinkedHashMap<String, String>(); headers.put(HttpHeaders.CONTENT_TYPE, REQ_CONTENT_TYPE); headers.put(HttpHeaders.CONTENT_LENGTH, String.valueOf(body.length)); res = BarInstallTestUtils.request(REQUEST_NORM_FILE, reqCell, reqPath, headers, body); res.statusCode(HttpStatus.SC_ACCEPTED); String location = res.getHeader(HttpHeaders.LOCATION); String expected = UrlUtils.cellRoot(reqCell) + reqPath; assertEquals(expected, location); BarInstallTestUtils.assertBarInstallStatus(location, SCHEMA_URL, ProgressInfo.STATUS.FAILED); } finally { BarInstallTestUtils.deleteCollection("odatacol1"); } }
/** * WebDAVコレクションのMOVEで存在するBoxを指定した場合に400エラーとなること. */ @Test public final void WebDAVコレクションのMOVEで存在するBoxを指定した場合に400エラーとなること() { final String srcColName = "davColforMOVE"; final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME); try { // 事前準備 DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcColName); // 移動 TResponse response = DavResourceUtils.moveWebDav(TOKEN, CELL_NAME, BOX_NAME + "/" + srcColName, destUrl, HttpStatus.SC_BAD_REQUEST); PersoniumCoreException expectedException = PersoniumCoreException.Dav.INVALID_REQUEST_HEADER.params( HttpHeaders.DESTINATION, destUrl); ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcColName, TOKEN, -1); } }
/** * Cell作成. * @param cellName Cell名 * @return Cell作成時のレスポンスオブジェクト */ @SuppressWarnings("unchecked") public final PersoniumResponse createCell(final String cellName) { PersoniumRestAdapter rest = new PersoniumRestAdapter(); PersoniumResponse res = null; // リクエストヘッダをセット HashMap<String, String> requestheaders = new HashMap<String, String>(); requestheaders.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); String data = requestBody.toJSONString(); // リクエスト try { res = rest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME), data, requestheaders); } catch (Exception e) { fail(e.getMessage()); } return res; }
/** * Relation情報が重複しているbarファイルをインストールできないこと. */ @Test public final void Relation情報が重複しているbarファイルをインストールできないこと() { String reqCell = Setup.TEST_CELL1; String reqPath = INSTALL_TARGET; TResponse res = null; File barFile = new File(RESOURCE_PATH + BAR_FILE_RELATION_CONFLICT); byte[] body = BarInstallTestUtils.readBarFile(barFile); Map<String, String> headers = new LinkedHashMap<String, String>(); headers.put(HttpHeaders.CONTENT_TYPE, REQ_CONTENT_TYPE); headers.put(HttpHeaders.CONTENT_LENGTH, String.valueOf(body.length)); res = BarInstallTestUtils.request(REQUEST_NORM_FILE, reqCell, reqPath, headers, body); res.statusCode(HttpStatus.SC_ACCEPTED); String location = res.getHeader(HttpHeaders.LOCATION); String expected = UrlUtils.cellRoot(reqCell) + reqPath; assertEquals(expected, location); BarInstallTestUtils.assertBarInstallStatus(location, SCHEMA_URL, ProgressInfo.STATUS.FAILED); }
/** * __event/{boxName}のPOSTを行うユーティリティ. * @param authorization Authorizationヘッダの値(auth-shemaを含む文字列) * @param cellName セル名 * @param boxName ボックス名 * @param level ログ出力レベル * @param action イベントのアクション * @param object イベントの対象オブジェクト * @param result イベントの結果 * @return レスポンス * @throws PersoniumException リクエスト失敗 */ @SuppressWarnings("unchecked") public static PersoniumResponse eventUnderBox(String authorization, String cellName, String boxName, String level, String action, String object, String result) throws PersoniumException { JSONObject body = new JSONObject(); body.put("level", level); body.put("action", action); body.put("object", object); body.put("result", result); PersoniumRestAdapter adaper = new PersoniumRestAdapter(); HashMap<String, String> header = new HashMap<String, String>(); header.put(HttpHeaders.AUTHORIZATION, authorization); return adaper.post(UrlUtils.cellRoot(cellName) + "__event/" + boxName, body.toJSONString(), header); }
/** * 不正な名前のRole情報をもつbarファイルをインストールできないこと. */ @Test public final void 不正な名前のRole情報をもつbarファイルをインストールできないこと() { String reqCell = Setup.TEST_CELL1; String reqPath = INSTALL_TARGET; TResponse res = null; File barFile = new File(RESOURCE_PATH + BAR_FILE_NGROLE); byte[] body = BarInstallTestUtils.readBarFile(barFile); Map<String, String> headers = new LinkedHashMap<String, String>(); headers.put(HttpHeaders.CONTENT_TYPE, REQ_CONTENT_TYPE); headers.put(HttpHeaders.CONTENT_LENGTH, String.valueOf(body.length)); res = BarInstallTestUtils.request(REQUEST_NORM_FILE, reqCell, reqPath, headers, body); res.statusCode(HttpStatus.SC_ACCEPTED); String location = res.getHeader(HttpHeaders.LOCATION); String expected = UrlUtils.cellRoot(reqCell) + reqPath; assertEquals(expected, location); BarInstallTestUtils.assertBarInstallStatus(location, SCHEMA_URL, ProgressInfo.STATUS.FAILED); }
/** * 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); PersoniumResponse 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); }
/** * PropertyのTypeがEdmDateTimeでDefaultValueがLong型を指定した場合_BadRequestが返却されること. */ @Test public final void PropertyのTypeがEdmDateTimeでDefaultValueがLong型を指定した場合_BadRequestが返却されること() { // リクエストパラメータ設定 PersoniumRequest req = PersoniumRequest.post(PropertyUtils.REQUEST_URL); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req.addJsonBody(PropertyUtils.PROPERTY_NAME_KEY, propName); req.addJsonBody(PropertyUtils.PROPERTY_ENTITYTYPE_NAME_KEY, PROPERTY_ENTITYTYPE_NAME); req.addJsonBody(PropertyUtils.PROPERTY_TYPE_KEY, EdmSimpleType.DATETIME.getFullyQualifiedTypeName()); req.addJsonBody(PropertyUtils.PROPERTY_NULLABLE_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_DEFAULT_VALUE_KEY, new Long("9223372036854775807")); req.addJsonBody(PropertyUtils.PROPERTY_COLLECTION_KIND_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_IS_KEY_KEY, null); req.addJsonBody(PropertyUtils.PROPERTY_UNIQUE_KEY_KEY, null); // リクエスト実行 PersoniumResponse response = request(req); // レスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatusCode()); checkErrorResponse(response.bodyAsJson(), PersoniumCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.getCode(), PersoniumCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params(PropertyUtils.PROPERTY_DEFAULT_VALUE_KEY) .getMessage()); }
/** * ComplexTypeが存在しないとき_一覧取得で0件になること. */ @Test public final void ComplexTypeが存在しないとき_一覧取得で0件になること() { String locationUrl = UrlUtils.complexType(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, null); // ComplexType一覧取得 PersoniumRequest req = PersoniumRequest.get(locationUrl); req.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); PersoniumResponse resGet = request(req); // レスポンスチェック assertEquals(HttpStatus.SC_OK, resGet.getStatusCode()); checkResponseBodyList(resGet.bodyAsJson(), null, NAMESPACE, null); }
/** * 登録したCellをすぐに取得するテスト. */ @Test public final void Cell登録直後にCellが参照できること() { // Cellを作成 PersoniumResponse 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()); }
/** * UserDataを$selectクエリに存在するプロパティ名と存在しないプロパティ名を指定して正しい値が返却されること. */ @Test public final void UserDataを$selectクエリに存在するプロパティ名と存在しないプロパティ名を指定して正しい値が返却されること() { // リクエスト実行 try { createUserData(); // ユーザデータの取得 TResponse response = getUserData(cellName, boxName, colName, entityTypeName, userDataId, AbstractCase.MASTER_TOKEN_NAME, "?\\$select=dynamicProperty,noneExistProperty", HttpStatus.SC_OK); // レスポンスヘッダからETAGを取得する String etag = response.getHeader(HttpHeaders.ETAG); // レスポンスボディーのチェック Map<String, Object> additional = new HashMap<String, Object>(); additional.put("__id", userDataId); additional.put("dynamicProperty", "dynamicPropertyValue"); String nameSpace = getNameSpace(entityTypeName); ODataCommon.checkResponseBody(response.bodyAsJson(), null, nameSpace, additional, null, etag); } finally { deleteUserData(userDataId); } }
public CloseableHttpResponse performRequest(HttpRequestBase request, boolean revalidate) { String method = request.getMethod(); if (revalidate) { request.addHeader(HttpHeaders.CACHE_CONTROL, "max-age=0"); } CloseableHttpResponse response; try { response = executeGetOrHead(request); } catch (IOException e) { throw new HttpRequestException(String.format("Could not %s '%s'.", method, request.getURI()), e); } return response; }
private <T> void executeAbstractMethod(String url, T data) throws CamundaRestException { HttpPost post = new HttpPost(url); try { String requestJson = objectMapper.writeValueAsString(data); StringEntity entity = new StringEntity(requestJson); post.setEntity(entity); post.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); executeAbstractMethod(post); } catch (Exception ex) { throw new CamundaRestException(ex); } }
/** * ServiceSourceのMOVEで移動先が存在するWebDavコレクションに対して上書き禁止モードで移動する場合412エラーとなること. */ @Test public final void ServiceSourceのMOVEで移動先が存在するWebDavコレクションに対して上書き禁止モードで移動する場合412エラーとなること() { final String svcColName = "serviceColforMOVE"; final String davColName = "davColforMOVE"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, davColName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, svcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, davColName); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName + "/__src/" + FILE_NAME); PersoniumRequest req = PersoniumRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "F"); // リクエスト実行 PersoniumResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_PRECONDITION_FAILED); PersoniumCoreException expectedException = PersoniumCoreException.Dav.DESTINATION_ALREADY_EXISTS; ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, svcColName, TOKEN, -1); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, davColName, TOKEN, -1); } }
/** * BoxRead権限のあるユーザーでschema指定がある場合に302が返却されること. */ @Test public final void BoxRead権限のあるユーザーでschema指定がある場合に302が返却されること() { try { String aclXml = String.format("<D:acl xmlns:D='DAV:' xml:base='%s/%s/__role/__/'>", UrlUtils.getBaseUrl(), Setup.TEST_CELL1) + " <D:ace>" + " <D:principal>" + " <D:href>role1</D:href>" + " </D:principal>" + " <D:grant>" + " <D:privilege><D:read/></D:privilege>" + " </D:grant>" + " </D:ace>" + "</D:acl>"; beforeACLTest(aclXml); PersoniumRestAdapter rest = new PersoniumRestAdapter(); PersoniumResponse res = null; HashMap<String, String> requestheaders = new HashMap<String, String>(); String token = ResourceUtils.getMyCellLocalToken(Setup.TEST_CELL1, "account1", "password1"); requestheaders.put(HttpHeaders.AUTHORIZATION, "Bearer " + token); res = rest.getAcceptEncodingGzip( UrlUtils.boxUrl(Setup.TEST_CELL1, UrlUtils.cellRoot("boxUrlTestSchema")), requestheaders); assertEquals(HttpStatus.SC_OK, res.getStatusCode()); assertEquals(UrlUtils.boxRoot(Setup.TEST_CELL1, "boxUrlTest"), res.getFirstHeader(HttpHeaders.LOCATION)); } catch (PersoniumException e) { fail(e.getMessage()); } finally { afterACLTest(); } }
/** * すべてのテスト毎に1度実行される処理. */ @Before public void before() { // ComplexType作成 // リクエストパラメータ設定 PersoniumRequest req = PersoniumRequest.post(ComplexTypePropertyUtils.CT_REQUEST_URL); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req.addJsonBody(COMPLEX_TYPE_NAME_KEY, COMPLEX_TYPE_NAME); // リクエスト実行 request(req); }
/** * 全てのOdata情報をもつbarファイルをMethodOverrideのMKCOL指定でもインストールが正常終了すること. */ @Test public final void 全てのOdata情報をもつbarファイルをMethodOverrideのMKCOL指定でもインストールが正常終了すること() { final String barFilename = "/V1_3_12_bar_maximum.bar"; final String reqCell = Setup.TEST_CELL1; final String reqPath = INSTALL_TARGET; final String user = "testuser"; final String password = "password"; final String testCell = "dummyCell00"; final String odataColName = "odatacol1"; TResponse res = null; File barFile = new File(RESOURCE_PATH + barFilename); byte[] body = BarInstallTestUtils.readBarFile(barFile); Map<String, String> headers = new LinkedHashMap<String, String>(); headers.put(HttpHeaders.CONTENT_TYPE, REQ_CONTENT_TYPE); headers.put(HttpHeaders.CONTENT_LENGTH, String.valueOf(body.length)); headers.put("X-HTTP-Method-Override", "MKCOL"); try { AccountUtils.create(AbstractCase.MASTER_TOKEN_NAME, Setup.TEST_CELL1, user, password, HttpStatus.SC_CREATED); ExtCellUtils.create(AbstractCase.MASTER_TOKEN_NAME, Setup.TEST_CELL1, UrlUtils.cellRoot(testCell), HttpStatus.SC_CREATED); res = BarInstallTestUtils.request(REQUEST_METHOD_OVERRIDE_FILE, reqCell, reqPath, headers, body); res.statusCode(HttpStatus.SC_ACCEPTED); String location = res.getHeader(HttpHeaders.LOCATION); String expected = UrlUtils.cellRoot(reqCell) + reqPath; assertEquals(expected, location); BarInstallTestUtils.assertBarInstallStatus(location, SCHEMA_URL, ProgressInfo.STATUS.COMPLETED); checkRegistData(); } finally { deleteAllData(reqCell, reqPath, user, testCell, odataColName); } }
/** * BOX新規登録時にNameにアンダーバー始まり文字を指定して場合_400になることを確認. */ @Test public void BOX新規登録時にNameにアンダーバー始まり文字を指定して場合_400になることを確認() { PersoniumRequest req = PersoniumRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX)); String[] key = {"Name", "Schema" }; String[] value = {"_xxx", TEST_BOX_SCHEMA }; req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value); PersoniumResponse res = request(req); // 400になることを確認 assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); }