/** * 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.unit.cell; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.Reader; import java.io.StringReader; import org.json.simple.JSONObject; import org.junit.Test; import org.junit.experimental.categories.Category; import com.fujitsu.dc.core.DcCoreException; import com.fujitsu.dc.core.eventbus.JSONEvent; import com.fujitsu.dc.core.model.ctl.Common; import com.fujitsu.dc.core.rs.cell.EventResource; import com.fujitsu.dc.test.categories.Unit; /** * LogResourceユニットテストクラス. */ @Category({Unit.class }) public class EventResourceTest { /** * テスト用LogResourceクラス. */ private class TestEventResource extends EventResource { TestEventResource() { super(null, null, null); } /** * リクエストボディを解析してEventオブジェクトを取得する. * @param reader Http入力ストリーム * @return 解析したEventオブジェクト */ @Override protected JSONEvent getRequestBody(final Reader reader) { return super.getRequestBody(reader); } /** * Event内の各プロパティ値をバリデートする. * @param event Eventオブジェクト */ protected void validateEventProperties(final JSONEvent event) { super.validateEventProperties(event); } } /** * ヘッダの指定が無い場合デフォルト値が入ること. */ @Test public void ヘッダの指定が無い場合デフォルト値が入ること() { String result = EventResource.validateXDcRequestKey(null); assertTrue(result.startsWith("PCS-")); String timeStr = result.substring(4); Long.parseLong(timeStr); } /** * ヘッダに空文字を指定した場合空文字が入ること. */ @Test public void ヘッダに空文字を指定した場合空文字が入ること() { String result = EventResource.validateXDcRequestKey(""); assertNotNull(result); assertEquals(0, result.length()); } /** * ヘッダに1文字の文字列を指定した場合正しく扱われること. */ @Test public void ヘッダに1文字の文字列を指定した場合正しく扱われること() { String result = EventResource.validateXDcRequestKey("a"); assertEquals("a", result); } /** * ヘッダに最大長の文字列を指定した場合正しく扱われること. */ @Test public void ヘッダに最大長の文字列を指定した場合正しく扱われること() { String maxHeaderStr128 = "abcdefghij" + "ABCDEFGHIJ" + "1234567890" + "-_-_-_-_-_" + // 40char "abcdefghij" + "ABCDEFGHIJ" + "1234567890" + "-_-_-_-_-_" + // 80char "abcdefghij" + "ABCDEFGHIJ" + "1234567890" + "-_-_-_-_-_" + // 120char "12345678"; String result = EventResource.validateXDcRequestKey(maxHeaderStr128); assertEquals(maxHeaderStr128, result); } /** * ヘッダに最大長を超えた文字列を指定した場合エラーとなること. */ @Test(expected = DcCoreException.class) public void ヘッダに最大長を超えた文字列を指定した場合エラーとなること() { String maxHeaderStr128 = "abcdefghij" + "ABCDEFGHIJ" + "1234567890" + "-_-_-_-_-_" + // 40char "abcdefghij" + "ABCDEFGHIJ" + "1234567890" + "-_-_-_-_-_" + // 80char "abcdefghij" + "ABCDEFGHIJ" + "1234567890" + "-_-_-_-_-_" + // 120char "12345678"; EventResource.validateXDcRequestKey(maxHeaderStr128 + "X"); } /** * ヘッダに不正な文字種を指定した場合エラーとなること. */ @Test(expected = DcCoreException.class) public void ヘッダに不正な文字種を指定した場合エラーとなること() { EventResource.validateXDcRequestKey("abc-012#"); } @SuppressWarnings("unchecked") private JSONObject createEventBody() { JSONObject body = new JSONObject(); body.put("level", "INFO"); body.put("action", "POST"); body.put("object", "ObjectData"); body.put("result", "resultData"); return body; } /** * リクエストボディに正しいJSONを指定した場合にEventオブジェクトが取得できること. */ @Test public void リクエストボディに正しいJSONを指定した場合にEventオブジェクトが取得できること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); assertEquals("POST", event.getAction()); assertEquals("ObjectData", event.getObject()); assertEquals("resultData", event.getResult()); } /** * リクエストボディに空データを指定した場合にエラーとなること. */ @Test(expected = DcCoreException.class) public void リクエストボディに空データを指定した場合にエラーとなること() { TestEventResource resource = new TestEventResource(); StringReader reader = new StringReader(""); resource.getRequestBody(reader); } /** * リクエストボディに空JSONを指定した場合にエラーとなること. */ @Test(expected = DcCoreException.class) public void リクエストボディに空JSONを指定した場合にエラーとなること() { TestEventResource resource = new TestEventResource(); JSONObject body = new JSONObject(); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); } /** * リクエストボディのlevelがない場合に場合にエラーとなること. */ @Test(expected = DcCoreException.class) public void リクエストボディのlevelがない場合にエラーとなること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.remove("level"); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); } /** * リクエストボディのlevelが正しい値の場合に正常終了すること. */ @Test @SuppressWarnings("unchecked") public void リクエストボディのlevelが正しい値の場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); // INFO body.put("level", "INFO"); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); // info body.put("level", "info"); reader = new StringReader(body.toJSONString()); event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); // WARN body.put("level", "WARN"); reader = new StringReader(body.toJSONString()); event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("WARN", event.getLevel().toString()); // warn body.put("level", "warn"); reader = new StringReader(body.toJSONString()); event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("WARN", event.getLevel().toString()); // ERROR body.put("level", "ERROR"); reader = new StringReader(body.toJSONString()); event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("ERROR", event.getLevel().toString()); // error body.put("level", "error"); reader = new StringReader(body.toJSONString()); event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("ERROR", event.getLevel().toString()); } /** * リクエストボディのlevelが空文字の場合にエラーとなること. */ @Test(expected = DcCoreException.class) @SuppressWarnings("unchecked") public void リクエストボディのlevelが空文字の場合にエラーとなること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.put("level", ""); StringReader reader = new StringReader(body.toJSONString()); resource.getRequestBody(reader); } /** * リクエストボディのlevelにFATALを指定した場合にエラーとなること. */ @Test(expected = DcCoreException.class) @SuppressWarnings("unchecked") public void リクエストボディのlevelにFATALを指定した場合にエラーとなること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.put("level", "FATAL"); StringReader reader = new StringReader(body.toJSONString()); resource.getRequestBody(reader); } /** * リクエストボディのactionがない場合にエラーとなること. */ @Test(expected = DcCoreException.class) public void リクエストボディのactionがない場合にエラーとなること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.remove("action"); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); } /** * リクエストボディのactionが文字列型上限値の場合に正常終了すること. */ @Test @SuppressWarnings("unchecked") public void リクエストボディのactionが文字列型上限値の場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); StringBuilder newValue = new StringBuilder(); for (int i = 0; i < Common.MAX_EVENT_VALUE_LENGTH; i++) { newValue.append("a"); } body.put("action", newValue.toString()); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); assertEquals(newValue.toString(), event.getAction()); assertEquals("ObjectData", event.getObject()); assertEquals("resultData", event.getResult()); } /** * リクエストボディのactionが文字列型上限値超えの場合に正常終了すること. */ @Test(expected = DcCoreException.class) @SuppressWarnings("unchecked") public void リクエストボディのactionが文字列型上限値超えの場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); StringBuilder newValue = new StringBuilder(); for (int i = 0; i < Common.MAX_EVENT_VALUE_LENGTH + 1; i++) { newValue.append("a"); } body.put("action", newValue.toString()); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); } /** * リクエストボディのactionが数値の場合に正常終了すること. */ @Test @SuppressWarnings("unchecked") public void リクエストボディのactionが数値の場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.put("action", 1); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); assertEquals("1", event.getAction()); assertEquals("ObjectData", event.getObject()); assertEquals("resultData", event.getResult()); } /** * リクエストボディのactionが実数値の場合に正常終了すること. */ @Test @SuppressWarnings("unchecked") public void リクエストボディのactionが実数値の場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.put("action", 100.100); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); assertEquals("100.1", event.getAction()); assertEquals("ObjectData", event.getObject()); assertEquals("resultData", event.getResult()); } /** * リクエストボディのactionが真偽値の場合に正常終了すること. */ @Test @SuppressWarnings("unchecked") public void リクエストボディのactionが真偽値の場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.put("action", false); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); assertEquals("false", event.getAction()); assertEquals("ObjectData", event.getObject()); assertEquals("resultData", event.getResult()); } /** * リクエストボディのactionが日時の場合に正常終了すること. */ @Test @SuppressWarnings("unchecked") public void リクエストボディのactionが日時の場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.put("action", "\\/Date(1350451322147)\\/"); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); assertEquals("\\/Date(1350451322147)\\/", event.getAction()); assertEquals("ObjectData", event.getObject()); assertEquals("resultData", event.getResult()); } /** * リクエストボディのobjectがない場合にエラーとなること. */ @Test(expected = DcCoreException.class) public void リクエストボディのobjectがない場合にエラーとなること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.remove("object"); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); } /** * リクエストボディのobjectが文字列型上限値の場合に正常終了すること. */ @Test @SuppressWarnings("unchecked") public void リクエストボディのobjectが文字列型上限値の場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); StringBuilder newValue = new StringBuilder(); for (int i = 0; i < Common.MAX_EVENT_VALUE_LENGTH; i++) { newValue.append("a"); } body.put("object", newValue.toString()); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); assertEquals("POST", event.getAction()); assertEquals(newValue.toString(), event.getObject()); assertEquals("resultData", event.getResult()); } /** * リクエストボディのobjectが文字列型上限値超えの場合に正常終了すること. */ @Test(expected = DcCoreException.class) @SuppressWarnings("unchecked") public void リクエストボディのobjectが文字列型上限値超えの場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); StringBuilder newValue = new StringBuilder(); for (int i = 0; i < Common.MAX_EVENT_VALUE_LENGTH + 1; i++) { newValue.append("a"); } body.put("object", newValue.toString()); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); } /** * リクエストボディのobjectが数値の場合に正常終了すること. */ @Test @SuppressWarnings("unchecked") public void リクエストボディのobjectが数値の場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.put("object", 1); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); assertEquals("POST", event.getAction()); assertEquals("1", event.getObject()); assertEquals("resultData", event.getResult()); } /** * リクエストボディのresultがない場合にエラーとなること. */ @Test(expected = DcCoreException.class) public void リクエストボディのresultがない場合にエラーとなること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.remove("result"); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); } /** * リクエストボディのresultが文字列型上限値の場合に正常終了すること. */ @Test @SuppressWarnings("unchecked") public void リクエストボディのresultが文字列型上限値の場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); StringBuilder newValue = new StringBuilder(); for (int i = 0; i < Common.MAX_EVENT_VALUE_LENGTH; i++) { newValue.append("a"); } body.put("result", newValue.toString()); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); assertEquals("POST", event.getAction()); assertEquals("ObjectData", event.getObject()); assertEquals(newValue.toString(), event.getResult()); } /** * リクエストボディのresultが文字列型上限値超えの場合に正常終了すること. */ @Test(expected = DcCoreException.class) @SuppressWarnings("unchecked") public void リクエストボディのresultが文字列型上限値超えの場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); StringBuilder newValue = new StringBuilder(); for (int i = 0; i < Common.MAX_EVENT_VALUE_LENGTH + 1; i++) { newValue.append("a"); } body.put("result", newValue.toString()); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); } /** * リクエストボディのresultが数値の場合に正常終了すること. */ @Test @SuppressWarnings("unchecked") public void リクエストボディのresultが数値の場合に正常終了すること() { TestEventResource resource = new TestEventResource(); JSONObject body = createEventBody(); body.put("result", 1); StringReader reader = new StringReader(body.toJSONString()); JSONEvent event = resource.getRequestBody(reader); resource.validateEventProperties(event); assertEquals("INFO", event.getLevel().toString()); assertEquals("POST", event.getAction()); assertEquals("ObjectData", event.getObject()); assertEquals("1", event.getResult()); } }