/**
* 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.ctl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpStatus;
import org.json.simple.JSONObject;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
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.DcRequest;
import com.fujitsu.dc.test.jersey.DcResponse;
import com.fujitsu.dc.test.jersey.DcRunner;
import com.fujitsu.dc.test.jersey.ODataCommon;
import com.fujitsu.dc.test.setup.Setup;
import com.fujitsu.dc.test.unit.core.UrlUtils;
import com.fujitsu.dc.test.utils.BoxUtils;
import com.fujitsu.dc.test.utils.DavResourceUtils;
import com.fujitsu.dc.test.utils.Http;
import com.fujitsu.dc.test.utils.TResponse;
/**
* BoxのCRUDのIT.
*/
@RunWith(DcRunner.class)
@Category({Unit.class, Integration.class, Regression.class })
public class BoxCrudTest extends ODataCommon {
/**
* ログ用オブジェクト.
*/
private static Logger log = LoggerFactory.getLogger(BoxCrudTest.class);
/**
* コンストラクタ. テスト対象のパッケージをsuperに渡す必要がある
*/
public BoxCrudTest() {
super("com.fujitsu.dc.core.rs");
}
private static final String CELL_NAME = Setup.TEST_CELL1;
private static final String ENTITY_TYPE_BOX = "Box";
private static final String TEST_BOX_NAME = "testBox";
private static final String TEST_BOX_NAME_WITH_SCHEMA = "testBoxWithSchema";
private static final String TEST_BOX_NAME_WITH_SCHEMA2 = "testBoxWithSchema2";
private static final String TEST_BOX_SCHEMA = "https://example.com/schema1/";
/**
* BOX新規登録のテストSchema指定なし.
*/
@Test
public void BOX新規登録のテストSchema指定なし() {
try {
createBoxRequest(TEST_BOX_NAME, null)
.returns().statusCode(201);
createBoxRequest(TEST_BOX_NAME, null)
.returns().statusCode(409);
} finally {
deleteBoxRequest(TEST_BOX_NAME).returns();
}
}
/**
* BOX新規登録時にNameに空文字を指定して場合_400になることを確認.
*/
@Test
public void BOX新規登録時にNameに空文字を指定して場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"", TEST_BOX_SCHEMA };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にNameにアンダーバー始まり文字を指定して場合_400になることを確認.
*/
@Test
public void BOX新規登録時にNameにアンダーバー始まり文字を指定して場合_400になることを確認() {
DcRequest req = DcRequest.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);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にNameにハイフン始まり文字を指定して場合_400になることを確認.
*/
@Test
public void BOX新規登録時にNameにハイフン始まり文字を指定して場合_400になることを確認() {
DcRequest req = DcRequest.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);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にNameにスラッシュ文字を指定して場合_400になることを確認.
*/
@Test
public void BOX新規登録時にNameにスラッシュ文字を指定して場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"xx/xx", TEST_BOX_SCHEMA };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にNameに__ctlを指定して場合_400になることを確認.
*/
@Test
public void BOX新規登録時に__ctlを指定して場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"__ctl", TEST_BOX_SCHEMA };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にNameを1文字指定して場合_201になることを確認.
*/
@Test
public void BOX新規登録時にNameを1文字指定して場合_201になることを確認() {
DcRequest req = DcRequest.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 {
DcResponse res = request(req);
// 201になることを確認
assertEquals(HttpStatus.SC_CREATED, res.getStatusCode());
} finally {
deleteBoxRequest(boxName).returns();
}
}
/**
* BOX新規登録時にNameを128文字指定して場合_201になることを確認.
*/
@Test
public void BOX新規登録時にNameを128文字指定して場合_201になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String boxName = "12345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890"
+ "1234567890123456789012345678";
String[] key = {"Name", "Schema" };
String[] value = {boxName, TEST_BOX_SCHEMA };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
try {
DcResponse res = request(req);
// 201になることを確認
assertEquals(HttpStatus.SC_CREATED, res.getStatusCode());
} finally {
deleteBoxRequest(boxName).returns();
}
}
/**
* BOX新規登録時にNameを129文字指定して場合_400になることを確認.
*/
@Test
public void BOX新規登録時にNameを129文字指定して場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String boxName = "12345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890"
+ "1234567890123456789012345678a";
String[] key = {"Name", "Schema" };
String[] value = {boxName, TEST_BOX_SCHEMA };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にSchamaに空文字を指定して場合_400になることを確認.
*/
@Test
public void BOX新規登録時にSchamaに空文字を指定して場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"testBox", "" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にSchamaにtrailing_slashの無いURL形式文字_https_を指定した場合_400になることを確認.
*/
@Test
public void BOX新規登録時にSchamaにtrailing_slashの無いURL形式文字_https_を指定した場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"testBox", "https://xxx.com/test" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にSchamaに正規化されていないパスを含むURL形式文字_https_を指定した場合_400になることを確認.
*/
@Test
public void BOX新規登録時にSchamaに正規化されていないパスを含むURL形式文字_https_を指定した場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"testBox", "https://xxx.com/test/1/2/../3/./../test/" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にSchemaをURL形式文字_https_を指定して場合_201になることを確認.
*/
@Test
public void BOX新規登録時にSchemaをURL形式_https_文字を指定して場合_201になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"testBox", "https://xxx.com/test/" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
try {
DcResponse res = request(req);
// 201になることを確認
assertEquals(HttpStatus.SC_CREATED, res.getStatusCode());
} finally {
deleteBoxRequest("testBox").returns();
}
}
/**
* BOX新規登録時にSchamaにtrailing_slashの無いURL形式文字_http_を指定した場合_400になることを確認.
*/
@Test
public void BOX新規登録時にSchamaにtrailing_slashの無いURL形式文字_http_を指定した場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"testBox", "http://xxx.com/test" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にSchamaに正規化されていないパスを含むURL形式文字_http_を指定した場合_400になることを確認.
*/
@Test
public void BOX新規登録時にSchamaに正規化されていないパスを含むURL形式文字_http_を指定した場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"testBox", "http://xxx.com/test/0/../1/./2/test/" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にSchemaをURL形式文字_http_を指定して場合_201になることを確認.
*/
@Test
public void BOX新規登録時にSchemaをURL形式_http_文字を指定して場合_201になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"testBox", "http://xxx.com/test/" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
try {
DcResponse res = request(req);
// 201になることを確認
assertEquals(HttpStatus.SC_CREATED, res.getStatusCode());
} finally {
deleteBoxRequest("testBox").returns();
}
}
/**
* BOX新規登録時にSchemaをURL形式personium_localunit文字を指定して場合_201になることを確認.
*/
@Test
public void BOX新規登録時にSchemaをURL形式personium_localunit文字を指定して場合_201になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"testBox", "personium-localunit:/schema/" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
try {
DcResponse res = request(req);
// 201になることを確認
assertEquals(HttpStatus.SC_CREATED, res.getStatusCode());
} finally {
deleteBoxRequest("testBox").returns();
}
}
/**
* BOX新規登録時にSchemaをURN形式文字を指定して場合_201になることを確認.
*/
@Test
public void BOX新規登録時にSchemaをURN形式文字を指定して場合_201になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"testBox", "urn:xxx:xxx" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
try {
DcResponse res = request(req);
// 201になることを確認
assertEquals(HttpStatus.SC_CREATED, res.getStatusCode());
} finally {
deleteBoxRequest("testBox").returns();
}
}
/**
* BOX新規登録時にSchemaをFTP形式文字を指定して場合_400になることを確認.
*/
@Test
public void BOX新規登録時にSchemaをFTP形式文字を指定して場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"testBox", "ftp://xxx.com" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にSchemaに1024文字を指定して場合_201になることを確認.
*/
@Test
public void BOX新規登録時にSchemaに1024文字を指定して場合_201になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String schema = "http://" + StringUtils.repeat("x", 1012) + ".com/";
String[] key = {"Name", "Schema" };
String[] value = {"testBox", schema };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
try {
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_CREATED, res.getStatusCode());
} finally {
deleteBoxRequest("testBox").returns();
}
}
/**
* BOX新規登録時にSchemaに1025文字を指定して場合_400になることを確認.
*/
@Test
public void BOX新規登録時にSchemaに1025文字を指定して場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String schema = "http://" + StringUtils.repeat("x", 1013) + ".com/";
String[] key = {"Name", "Schema" };
String[] value = {"testBox", schema };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にSchemaをURL形式でない文字を指定して場合_400になることを確認.
*/
@Test
public void BOX新規登録時にSchemaをURL形式でない文字を指定して場合_400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {"testBox", "xxx" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にリクエストボディに管理情報__publishedを指定した場合_レスポンスコード400になることを確認.
*/
@Test
public void BOX新規登録時にリクエストボディに管理情報__publishedを指定した場合_レスポンスコード400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema", PUBLISHED };
String[] value = {TEST_BOX_NAME, "http://xxx.com/test", "/Date(0)/" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にリクエストボディに管理情報__updatedを指定した場合_レスポンスコード400になることを確認.
*/
@Test
public void BOX新規登録時にリクエストボディに管理情報__updatedを指定した場合_レスポンスコード400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema", UPDATED };
String[] value = {TEST_BOX_NAME, "http://xxx.com/test", "/Date(0)/" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録時にリクエストボディに管理情報__metadataを指定した場合_レスポンスコード400になることを確認.
*/
@Test
public void BOX新規登録時にリクエストボディに管理情報__metadataを指定した場合_レスポンスコード400になることを確認() {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema", METADATA };
String[] value = {TEST_BOX_NAME, "http://xxx.com/test", "test" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
DcResponse res = request(req);
// 400になることを確認
assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode());
}
/**
* BOX新規登録のテストSchema指定あり.
*/
@Test
public void BOX新規登録のテストSchema指定あり() {
try {
log.debug("Creating box");
createBoxRequest(TEST_BOX_NAME_WITH_SCHEMA, TEST_BOX_SCHEMA)
.returns().statusCode(201);
// 主キー衝突
createBoxRequest(TEST_BOX_NAME_WITH_SCHEMA, TEST_BOX_SCHEMA)
.returns().statusCode(409);
// UK衝突
log.debug("Creating box 2");
createBoxRequest(TEST_BOX_NAME_WITH_SCHEMA2, TEST_BOX_SCHEMA)
.returns().statusCode(409);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
deleteBoxRequest(TEST_BOX_NAME_WITH_SCHEMA).returns();
deleteBoxRequest(TEST_BOX_NAME_WITH_SCHEMA2).returns();
}
}
/**
* BOX更新のテスト.
*/
@Test
public void BOX更新のテスト() {
try {
log.debug("Creating box");
// BOX1
String etag1 = createBoxRequest(TEST_BOX_NAME, null)
.returns().statusCode(201).getHeader(HttpHeaders.ETAG);
// Box2
String etag2 = createBoxRequest(TEST_BOX_NAME_WITH_SCHEMA, null)
.returns().statusCode(201).getHeader(HttpHeaders.ETAG);
// Box2のUK変更が成功(ここでスキーマつきになる)
etag2 = updateBoxRequest(TEST_BOX_NAME_WITH_SCHEMA, TEST_BOX_NAME_WITH_SCHEMA,
TEST_BOX_SCHEMA, etag2)
.returns().statusCode(204).getHeader(HttpHeaders.ETAG);
// Box2のEtag違い更新が失敗
updateBoxRequest(TEST_BOX_NAME_WITH_SCHEMA, TEST_BOX_NAME, TEST_BOX_SCHEMA, etag1)
.returns().statusCode(412);
// Box2の主キー変更が衝突で失敗
updateBoxRequest(TEST_BOX_NAME_WITH_SCHEMA, TEST_BOX_NAME, TEST_BOX_SCHEMA, etag2)
.returns().statusCode(409);
// Box1のUK変更が衝突で失敗
updateBoxRequest(TEST_BOX_NAME, TEST_BOX_NAME, TEST_BOX_SCHEMA, etag1)
.returns().statusCode(409);
// Box1のUK変更が成功
updateBoxRequest(TEST_BOX_NAME, TEST_BOX_NAME, "http://example.net/hoge/", etag1)
.returns().statusCode(204).getHeader(HttpHeaders.ETAG);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
deleteBoxRequest(TEST_BOX_NAME_WITH_SCHEMA).returns();
deleteBoxRequest(TEST_BOX_NAME).returns();
}
}
/**
* BOX更新時にリクエストボディに管理情報__publishedを指定した場合_レスポンスコード400になることを確認.
*/
@SuppressWarnings("unchecked")
@Test
public void BOX更新時にリクエストボディに管理情報__publishedを指定した場合_レスポンスコード400になることを確認() {
try {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {TEST_BOX_NAME, "http://xxx.com/test" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
request(req);
JSONObject updateBody = new JSONObject();
updateBody.put("Name", "updateBox");
updateBody.put(PUBLISHED, "/Date(0)/");
updateBoxRequest(TEST_BOX_NAME, "*", updateBody.toJSONString(), HttpStatus.SC_BAD_REQUEST);
} finally {
deleteBoxRequest(TEST_BOX_NAME).returns();
}
}
/**
* BOX新規登録時にリクエストボディに管理情報__updatedを指定した場合_レスポンスコード400になることを確認.
*/
@SuppressWarnings("unchecked")
@Test
public void BOX更新時にリクエストボディに管理情報__updatedを指定した場合_レスポンスコード400になることを確認() {
try {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {TEST_BOX_NAME, "http://xxx.com/test" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
request(req);
JSONObject updateBody = new JSONObject();
updateBody.put("Name", "updateBox");
updateBody.put(UPDATED, "/Date(0)/");
updateBoxRequest(TEST_BOX_NAME, "*", updateBody.toJSONString(), HttpStatus.SC_BAD_REQUEST);
} finally {
deleteBoxRequest(TEST_BOX_NAME).returns();
}
}
/**
* BOX新規登録時にリクエストボディに管理情報__metadataを指定した場合_レスポンスコード400になることを確認.
*/
@SuppressWarnings("unchecked")
@Test
public void BOX更新時にリクエストボディに管理情報__metadataを指定した場合_レスポンスコード400になることを確認() {
try {
DcRequest req = DcRequest.post(UrlUtils.cellCtl(CELL_NAME, ENTITY_TYPE_BOX));
String[] key = {"Name", "Schema" };
String[] value = {TEST_BOX_NAME, "http://xxx.com/test" };
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN).addJsonBody(key, value);
request(req);
JSONObject updateBody = new JSONObject();
updateBody.put("Name", "updateBox");
updateBody.put(METADATA, "test");
updateBoxRequest(TEST_BOX_NAME, "*", updateBody.toJSONString(), HttpStatus.SC_BAD_REQUEST);
} finally {
deleteBoxRequest(TEST_BOX_NAME).returns();
}
}
/**
* Box削除時にDav用の管理データが削除されることを確認.
*/
@Test
public void Box削除時にDav用の管理データが削除されることを確認() {
String boxName = "boxDavName";
try {
// Boxの作成
BoxUtils.create(CELL_NAME, boxName, MASTER_TOKEN_NAME, HttpStatus.SC_CREATED);
// DAV管理データ作成のため、PROPFINDの実行
DavResourceUtils.propfind("box/propfind-box-allprop.txt", MASTER_TOKEN_NAME,
HttpStatus.SC_MULTI_STATUS, boxName);
// PROPFINDを行い、Box管理用のDAVが存在する確認する
TResponse res = DavResourceUtils.propfind("box/propfind-box-allprop.txt", MASTER_TOKEN_NAME,
HttpStatus.SC_MULTI_STATUS, boxName);
Element root = res.bodyAsXml().getDocumentElement();
NodeList response = root.getElementsByTagName("response");
assertTrue("response length is " + response.getLength(), response.getLength() > 0);
// Boxの削除
BoxUtils.delete(CELL_NAME, MASTER_TOKEN_NAME, boxName, HttpStatus.SC_NO_CONTENT);
// PROPFINDを行い、Box管理用のDAVが無いこと確認する
DavResourceUtils.propfind("box/propfind-box-allprop.txt", MASTER_TOKEN_NAME,
HttpStatus.SC_NOT_FOUND, boxName);
} finally {
deleteBoxRequest(boxName).returns();
}
}
/**
* Box名にクオート無しの数値型式名を指定して取得した場合400エラーとなること.
*/
@Test
public final void Box名にクオート無しの数値型式名を指定して取得した場合400エラーとなること() {
// $format なし
// Acceptヘッダ なし
String boxName = "123456";
String url = UrlUtils.cellCtlWithoutSingleQuote(CELL_NAME, "Box", boxName);
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());
}
/**
* Box名にクオート無しの数値型式名を指定して更新した場合400エラーとなること.
*/
@Test
public final void Box名にクオート無しの数値型式名を指定して更新した場合400エラーとなること() {
// $format なし
// Acceptヘッダ なし
String boxName = "123456";
String url = UrlUtils.cellCtlWithoutSingleQuote(CELL_NAME, "Box", boxName);
DcResponse res = this.restPut(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());
}
/**
* Box名にクオート無しの数値型式名を指定して削除した場合400エラーとなること.
*/
@Test
public final void Box名にクオート無しの数値型式名を指定して削除した場合400エラーとなること() {
// $format なし
// Acceptヘッダ なし
String boxName = "123456";
String url = UrlUtils.cellCtlWithoutSingleQuote(CELL_NAME, "Box", boxName);
DcResponse res = this.restDelete(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());
}
/**
* Box作成リクエストを生成.
* @param name Box名
* @param schema schema url
* @return リクエストオブジェクト
*/
public static Http createBoxRequest(String name, String schema) {
if (schema == null) {
return Http.request("cell/box-create.txt").with("cellPath", CELL_NAME)
.with("token", AbstractCase.MASTER_TOKEN_NAME).with("boxPath", name);
} else {
return Http.request("cell/box-create-with-scheme.txt").with("cellPath", CELL_NAME)
.with("token", AbstractCase.MASTER_TOKEN_NAME).with("boxPath", name).with("schema", schema);
}
}
/**
* Box更新リクエストを生成(リクエストボディを指定する).
* @param name Box名
* @param etag Etag
* @param body リクエストボディ
* @param sc 期待するレスポンスコード
*/
public static void updateBoxRequest(String name, String etag, String body, int sc) {
Http.request("cell/box-update-without-body.txt")
.with("cellPath", CELL_NAME)
.with("boxPath", name)
.with("token", AbstractCase.MASTER_TOKEN_NAME)
.with("etag", etag)
.with("body", body)
.returns()
.statusCode(sc);
}
/**
* Box更新リクエストを生成.
* @param name Box名
* @param newName 新しいBox名
* @param schema 新しいBoxのSchema
* @param etag Etag
* @return リクエストオブジェクト
*/
public static Http updateBoxRequest(String name, String newName, String schema, String etag) {
return Http.request("cell/box-update.txt").with("cellPath", CELL_NAME).with("boxPath", name)
.with("token", AbstractCase.MASTER_TOKEN_NAME).with("etag", etag).with("newBoxPath", newName)
.with("schema", schema);
}
/**
* Box削除リクエストを生成.
* @param name Box名
* @return リクエストオブジェクト
*/
public static Http deleteBoxRequest(String name) {
return Http.request("cell/box-delete.txt")
.with("cellPath", CELL_NAME)
.with("token", AbstractCase.MASTER_TOKEN_NAME)
.with("boxPath", name);
}
}