/**
* 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 java.util.HashMap;
import java.util.Map;
import org.apache.http.HttpStatus;
import org.json.simple.JSONObject;
import org.junit.Test;
import org.junit.experimental.categories.Category;
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.ODataCommon;
import com.fujitsu.dc.test.setup.Setup;
import com.fujitsu.dc.test.unit.core.UrlUtils;
import com.fujitsu.dc.test.utils.ExtRoleUtils;
import com.fujitsu.dc.test.utils.Http;
import com.fujitsu.dc.test.utils.TResponse;
/**
* ExtRoleの登録のテスト.
*/
@Category({Unit.class, Integration.class, Regression.class })
public class ExtRoleCreateTest extends ODataCommon {
private static String cellName = "testcell1";
private static final String EXTROLE_PATH_DEFAULT = UrlUtils.roleResource(cellName, "__", "testrole");
private static final String EXT_ROLE_TYPE = "CellCtl.ExtRole";
/**
* コンストラクタ. テスト対象のパッケージをsuperに渡す必要がある
*/
public ExtRoleCreateTest() {
super("com.fujitsu.dc.core.rs");
}
/**
* ExtRole新規登録のテスト ExtRole, _Relation.Name, _Relation._Box.Name指定あり.
*/
@Test
public void ExtRole登録でボックスありのリレーションを指定して正常に登録できること() {
String relationName = "testrelation";
String relationBoxName = "box1";
try {
CellCtlUtils.createRelation(cellName, relationName, relationBoxName);
createExtRole(relationName, relationBoxName);
} finally {
CellCtlUtils.deleteExtRole(cellName, EXTROLE_PATH_DEFAULT, relationName, relationBoxName);
CellCtlUtils.deleteRelation(cellName, relationName, relationBoxName);
}
}
/**
* ExtRole新規登録のテスト _Relation.Name, _Relation._Box.Nameにnull指定.
*/
@Test
public void ExtRole登録でボックスなしのリレーションを指定して正常に登録できること() {
String relationName = "testrelation";
try {
CellCtlUtils.createRelation(cellName, relationName);
createExtRole(relationName, null);
} finally {
CellCtlUtils.deleteExtRole(cellName, EXTROLE_PATH_DEFAULT, relationName);
CellCtlUtils.deleteRelation(cellName, relationName);
}
}
/**
* ExtRole登録でリレーションにnullを指定した場合400エラーを返却すること.
*/
@Test
public void ExtRole登録でリレーションにnullを指定した場合400エラーを返却すること() {
createExtRole(false, false);
}
/**
* ExtRole登録でリレーションを指定しない場合400エラーを返却すること.
*/
@Test
public void ExtRole登録でリレーションを指定しない場合400エラーを返却すること() {
createExtRole(true, true);
}
/**
* ExtRole登録でリレーションに空文字を指定した場合400エラーを返却すること.
*/
@Test
public void ExtRole登録でリレーションに空文字を指定した場合400エラーを返却すること() {
TResponse res = createExtRole(EXTROLE_PATH_DEFAULT, "", null);
res.statusCode(HttpStatus.SC_BAD_REQUEST);
}
/**
* ExtRole登録で存在しないリレーションを指定した場合400エラーを返却すること.
*/
@Test
public void ExtRole登録で存在しないリレーションを指定した場合400エラーを返却すること() {
TResponse res = createExtRole(EXTROLE_PATH_DEFAULT, "", null);
res.statusCode(HttpStatus.SC_BAD_REQUEST);
}
/**
* ExtRole登録で存在するリレーションを指定した場合正常に登録できること.
*/
@Test
public void ExtRole登録で存在するリレーションを指定した場合正常に登録できること() {
TResponse res = createExtRole(EXTROLE_PATH_DEFAULT, "", null);
res.statusCode(HttpStatus.SC_BAD_REQUEST);
}
/**
* ExtRoleが空文字の場合400エラーを返却すること.
*/
@Test
public final void ExtRoleが空文字の場合400エラーを返却すること() {
String extRolePath = "";
String relationName = "testrelation";
try {
CellCtlUtils.createRelation(cellName, relationName);
TResponse res = createExtRole(extRolePath, relationName, null);
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
CellCtlUtils.deleteRelation(cellName, relationName);
}
}
/**
* ExtRoleの指定がない場合400エラーを返却すること.
*/
@Test
@SuppressWarnings("unchecked")
public final void ExtRoleの指定がない場合400エラーを返却すること() {
String relationName = "testrelation";
try {
CellCtlUtils.createRelation(cellName, relationName);
JSONObject body = new JSONObject();
body.put("_Relation.Name", relationName);
body.put("_Relation._Box.Name", null);
TResponse res = Http.request("cell/extRole/extRole-create.txt")
.with("token", AbstractCase.MASTER_TOKEN_NAME)
.with("cellPath", cellName)
.with("body", body.toString())
.returns()
.debug();
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
CellCtlUtils.deleteRelation(cellName, relationName);
}
}
/**
* ExtRoleがnullの場合400エラーを返却すること.
*/
@Test
public final void ExtRoleがnullの場合400エラーを返却すること() {
String extRolePath = null;
TResponse res = createExtRole(extRolePath, null, null);
res.statusCode(HttpStatus.SC_BAD_REQUEST);
}
/**
* ExtRoleがURL形式でない場合400エラーを返却すること.
*/
@Test
public final void ExtRoleがURL形式でない場合400エラーを返却すること() {
String extRolePath = "testExtRole";
String relationName = "testrelation";
try {
CellCtlUtils.createRelation(cellName, relationName);
TResponse res = createExtRole(extRolePath, relationName, null);
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
CellCtlUtils.deleteRelation(cellName, relationName);
}
}
/**
* ExtRoleが1024文字の場合正常に作成されること.
*/
@Test
public final void ExtRoleが1024文字の場合正常に作成されること() {
String extRolePath = "http://localhost:8080/dc1-core/testextRole"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaax";
String relationName = "testrelation";
try {
CellCtlUtils.createRelation(cellName, relationName);
TResponse res = createExtRole(extRolePath, relationName, null);
res.statusCode(HttpStatus.SC_CREATED);
} finally {
CellCtlUtils.deleteExtRole(cellName, extRolePath, relationName);
CellCtlUtils.deleteRelation(cellName, relationName);
}
}
/**
* ExtRoleが1025文字の場合正常に作成されること.
*/
@Test
public final void ExtRoleが1025文字の場合正常に作成されること() {
String extRolePath = "http://localhost:8080/dc1-core/testextRole"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaax";
String relationName = "testrelation";
try {
CellCtlUtils.createRelation(cellName, relationName);
TResponse res = createExtRole(extRolePath, relationName, null);
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
CellCtlUtils.deleteRelation(cellName, relationName);
}
}
/**
* ExtRoleが1025文字の場合正常に作成されること.
*/
@Test
public final void ExtRoleのschemeが不正の場合400エラーを返却すること() {
String extRolePath = "ftp://localhost:21/dc1-core/testextRole";
String relationName = "testrelation";
try {
CellCtlUtils.createRelation(cellName, relationName);
TResponse res = createExtRole(extRolePath, relationName, null);
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
CellCtlUtils.deleteRelation(cellName, relationName);
}
}
/**
* ExtRole新規登録のテスト_リクエストボディに管理情報__publishedを指定した場合400エラーとなる確認.
*/
@Test
public void ExtRole新規登録のテスト_リクエストボディに管理情報__publishedを指定した場合400エラーとなる確認() {
String relationName = "testrelation";
String relationBoxName = "box1";
try {
CellCtlUtils.createRelation(cellName, relationName, relationBoxName);
errCreateExtRole(relationName, relationBoxName, PUBLISHED, "/Date(0)/", HttpStatus.SC_BAD_REQUEST);
} finally {
CellCtlUtils.deleteRelation(cellName, relationName, relationBoxName);
}
}
/**
* ExtRole新規登録のテスト_リクエストボディに管理情報__updatedを指定した場合400エラーとなる確認.
*/
@Test
public void ExtRole新規登録のテスト_リクエストボディに管理情報__updatedを指定した場合400エラーとなる確認() {
String relationName = "testrelation";
String relationBoxName = "box1";
try {
CellCtlUtils.createRelation(cellName, relationName, relationBoxName);
errCreateExtRole(relationName, relationBoxName, UPDATED, "/Date(0)/", HttpStatus.SC_BAD_REQUEST);
} finally {
CellCtlUtils.deleteRelation(cellName, relationName, relationBoxName);
}
}
/**
* ExtRole新規登録のテスト_リクエストボディに管理情報__metadataを指定した場合400エラーとなる確認.
*/
@Test
public void ExtRole新規登録のテスト_リクエストボディに管理情報__metadataを指定した場合400エラーとなる確認() {
String relationName = "testrelation";
String relationBoxName = "box1";
try {
CellCtlUtils.createRelation(cellName, relationName, relationBoxName);
errCreateExtRole(relationName, relationBoxName, METADATA, null, HttpStatus.SC_BAD_REQUEST);
} finally {
CellCtlUtils.deleteRelation(cellName, relationName, relationBoxName);
}
}
/**
* RelationからNP経由でExtRoleを作成した場合201になること.
*/
@Test
public void RelationからNP経由でExtRoleを作成した場合201になること() {
String relationName = "testrelation";
String extRoleUrl = "http://fqdn/cell/__role/__/testrole";
try {
CellCtlUtils.createRelation(cellName, relationName);
ExtRoleUtils.createViaNP(Setup.TEST_CELL1, Setup.MASTER_TOKEN_NAME,
relationName, null, extRoleUrl, HttpStatus.SC_CREATED);
} finally {
CellCtlUtils.deleteExtRole(cellName, extRoleUrl, relationName);
CellCtlUtils.deleteRelation(cellName, relationName);
}
}
/**
* 指定されたリレーション名にリンクされたExtRole情報を作成する.
* @param relationName リレーション名
* @param relationBoxName リレーションボックス名
*/
private void createExtRole(String relationName, String relationBoxName) {
TResponse response = createExtRole(EXTROLE_PATH_DEFAULT, relationName, relationBoxName);
response.statusCode(HttpStatus.SC_CREATED);
// レスポンスヘッダーのチェック
String location = UrlUtils.cellCtlWithoutSingleQuote(
"testcell1",
"ExtRole",
"ExtRole=" + CellCtlUtils.addSingleQuarto(EXTROLE_PATH_DEFAULT)
+ ",_Relation.Name=" + CellCtlUtils.addSingleQuarto(relationName)
+ ",_Relation._Box.Name=" + CellCtlUtils.addSingleQuarto(relationBoxName));
ODataCommon.checkCommonResponseHeader(response, location);
// レスポンスボディーのチェック
Map<String, Object> additional = new HashMap<String, Object>();
additional.put("ExtRole", EXTROLE_PATH_DEFAULT);
additional.put("_Relation.Name", relationName);
additional.put("_Relation._Box.Name", relationBoxName);
ODataCommon.checkResponseBody(response.bodyAsJson(), location, EXT_ROLE_TYPE, additional);
}
/**
* 指定されたリレーション名にリンクされたExtRole情報を作成する.
* @param extRolePath ExtRoleのパス
* @param relationName リレーション名
* @param relationBoxName リレーションボックス名
*/
@SuppressWarnings("unchecked")
private TResponse createExtRole(String extRolePath, String relationName, String relationBoxName) {
JSONObject body = new JSONObject();
body.put("ExtRole", extRolePath);
body.put("_Relation.Name", relationName);
body.put("_Relation._Box.Name", relationBoxName);
return Http.request("cell/extRole/extRole-create.txt")
.with("token", AbstractCase.MASTER_TOKEN_NAME)
.with("cellPath", cellName)
.with("body", body.toString())
.returns()
.debug();
}
/**
* 指定されたリレーション名にリンクされたExtRole情報を作成する(エラー).
* @param relationName リレーション名
* @param relationBoxName リレーションボックス名
* @param errKey エラーキー
* @param errValue エラー値
* @param 期待するエラーステータスコード
*/
@SuppressWarnings("unchecked")
private void errCreateExtRole(String relationName,
String relationBoxName,
String errKey,
String errValue,
int errSC) {
JSONObject body = new JSONObject();
body.put("ExtRole", EXTROLE_PATH_DEFAULT);
body.put("_Relation.Name", relationName);
body.put("_Relation._Box.Name", relationBoxName);
body.put(errKey, errValue);
Http.request("cell/extRole/extRole-create.txt")
.with("token", AbstractCase.MASTER_TOKEN_NAME)
.with("cellPath", cellName)
.with("body", body.toString())
.returns()
.statusCode(errSC);
}
/**
* リレーション名にリンクされていないExtRole情報を作成する.
* @param relationNameEmpty _Relation.Nameを指定しない
* @param relationBoxNameEmpty _Relation._Box.Nameを指定しない
*/
@SuppressWarnings("unchecked")
private void createExtRole(boolean relationNameEmpty, boolean relationBoxNameEmpty) {
JSONObject body = new JSONObject();
body.put("ExtRole", EXTROLE_PATH_DEFAULT);
if (!relationNameEmpty) {
body.put("_Relation.Name", null);
}
if (!relationBoxNameEmpty) {
body.put("_Relation._Box.Name", null);
}
Http.request("cell/extRole/extRole-create.txt")
.with("token", AbstractCase.MASTER_TOKEN_NAME)
.with("cellPath", cellName)
.with("body", body.toString())
.returns()
.statusCode(HttpStatus.SC_BAD_REQUEST);
}
}