/* * Copyright (C) 2013-2017 NTT DATA Corporation * * 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 org.terasoluna.gfw.functionaltest.app.logging; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import javax.inject.Inject; import org.junit.Test; import org.junit.runner.RunWith; import org.openqa.selenium.By; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.client.RestTemplate; import org.terasoluna.gfw.functionaltest.app.FunctionTestSupport; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:META-INF/spring/seleniumContext.xml" }) public class LoggingTest extends FunctionTestSupport { @Inject protected RestTemplate restTemplate; @Test public void test01_01_createDefaultXTrackMDC() { driver.findElement(By.id("xTrackMDCPutFilter")).click(); // create default x-Track MDC driver.findElement(By.id("xTrackMDCPutFilterDefault")).click(); // cut x-Track MDC String targetMdc = driver.findElement(By.id("xTrackMDC")).getText(); String footerMdc = driver.findElement(By.id("xtrack")).getText(); footerMdc = footerMdc.substring(footerMdc.indexOf(":") + 1, footerMdc .indexOf(":") + 33); // check default x-Track MDC assertTrue(targetMdc.matches("[0-9a-zA-Z]{32}")); assertThat(targetMdc, is(footerMdc)); } @Test public void test01_02_createCustomXTrackMDC() { driver.findElement(By.id("xTrackMDCPutFilter")).click(); // create default x-Track MDC driver.findElement(By.id("xTrackMDCPutFilterCustom")).click(); // cut x-Track MDC String targetMdc = driver.findElement(By.id("xTrackMDC")).getText(); String footerMdc = driver.findElement(By.id("xtrack")).getText(); footerMdc = footerMdc.substring(footerMdc.indexOf(":") + 1, footerMdc .indexOf(":") + 33); // check custom x-Track MDC assertTrue(targetMdc.matches("[0-9a-zA-Z]{32}")); assertThat(targetMdc, not(footerMdc)); } @Test public void test01_04_checkConsistencyXtrackMDCRequestToResponse() { // test Check consistency HTTP Request Header to Response Header HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.set("X-Track", "12345678901234567890123456789012"); ResponseEntity<byte[]> response = restTemplate.exchange( applicationContextUrl + "/logging/xTrackMDCPutFilter/1_4", HttpMethod.GET, new HttpEntity<byte[]>(requestHeaders), byte[].class); HttpHeaders headers = response.getHeaders(); assertThat(headers.getFirst("X-Track"), is("12345678901234567890123456789012")); } @Test public void test01_05_checkSameTransactionXTrackMDC() { driver.findElement(By.id("xTrackMDCPutFilter")).click(); // create default x-Track MDC driver.findElement(By.id("xTrackMDCPutFilterDefault")).click(); // check XTrack logging same transaction // check visually the log file // filename:traceLoggingInterceptorTest.log } @Test public void test01_06_checkLoggingSameXtrackMDCRequestToLog() { driver.findElement(By.id("xTrackMDCPutFilter")).click(); // create default x-Track MDC driver.findElement(By.id("xTrackMDCPutFilterDefault")).click(); // cut x-Track MDC String targetMdc = driver.findElement(By.id("xTrackMDC")).getText(); // logging same x-track MDC HTTP Request Header HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.set("X-Track", targetMdc); restTemplate.exchange(applicationContextUrl + "/logging/xTrackMDCPutFilter/1_4", HttpMethod.GET, new HttpEntity<byte[]>(requestHeaders), byte[].class); // check XTrack logging same transaction in HTTP Request Header to logfile // check visually the log file // filename:traceLoggingInterceptorTest.log } @Test public void test02_01_createDefaultUserIdMDCBeforeLogin() { // setup driver.findElement(By.id("userIdMDCPutFilter")).click(); // login -> logout inputFieldAccessor.overrideValue(By.id("username"), "user1", driver); inputFieldAccessor.overrideValue(By.id("password"), "user1", driver); driver.findElement(By.id("btn1")).click(); driver.findElement(By.id("logout")).click(); // create default userId MDC driver.findElement(By.id("userIdMDCPutFilterDefault")).click(); // check default userId MDC assertThat(driver.findElement(By.id("userIdMDC")).getText(), is("anonymousUser")); } @Test public void test02_02_createCustomUserIdMDCBeforeLogin() { // setup driver.findElement(By.id("userIdMDCPutFilter")).click(); // login -> logout inputFieldAccessor.overrideValue(By.id("username"), "user1", driver); inputFieldAccessor.overrideValue(By.id("password"), "user1", driver); driver.findElement(By.id("btn1")).click(); driver.findElement(By.id("logout")).click(); // create custom userId MDC driver.findElement(By.id("userIdMDCPutFilterCustom")).click(); // check custom userId MDC assertThat(driver.findElement(By.id("userIdMDC")).getText(), is("anonymousUser")); } @Test public void test02_04_createCustomUserIdMDCBeforeLogin() { driver.findElement(By.id("userIdMDCPutFilter")).click(); // authentication as username "user1" inputFieldAccessor.overrideValue(By.id("username"), "user1", driver); inputFieldAccessor.overrideValue(By.id("password"), "user1", driver); driver.findElement(By.id("btn1")).click(); // create default userId MDC driver.findElement(By.id("userIdMDCPutFilterDefault")).click(); // check default userId MDC assertThat(driver.findElement(By.id("userIdMDC")).getText(), is("user1")); } @Test public void test02_06_createCustomUserIdMDCBeforeLogin() { driver.findElement(By.id("userIdMDCPutFilter")).click(); // authentication as username "user1" inputFieldAccessor.overrideValue(By.id("username"), "user1", driver); inputFieldAccessor.overrideValue(By.id("password"), "user1", driver); driver.findElement(By.id("btn1")).click(); // Screen transition driver.findElement(By.linkText("terasoluna-gfw-functionaltest")) .click(); driver.findElement(By.id("logging")).click(); driver.findElement(By.id("userIdMDCPutFilter")).click(); // create default userId MDC driver.findElement(By.id("userIdMDCPutFilterDefault")).click(); // check default userId MDC assertThat(driver.findElement(By.id("userIdMDC")).getText(), is("user1")); // check trace logging // check visually the log file // filename:traceLoggingInterceptorTest.log } @Test public void test04_01_defaultTraceLoggingAsTraceLevel() { driver.findElement(By.id("traceLoggingInterceptor")).click(); // access to the controller default warn handling nanos driver.findElement(By.id("traceLoggingDefaultAsTraceLevel")).click(); // check trace logging // check visually the log file // filename:traceLoggingInterceptorTest.log } @Test public void test04_02_defaultTraceLoggingAsWarnLevel() { driver.findElement(By.id("traceLoggingInterceptor")).click(); // access to the controller more than the set default warn handling nanos driver.findElement(By.id("traceLoggingDefaultAsWarnLevel")).click(); // check warn logging // check visually the log file // filename:traceLoggingInterceptorTest.log } @Test public void test04_03_customTraceLoggingAsTraceLevel() { driver.findElement(By.id("traceLoggingInterceptor")).click(); // access to the controller custom warn handling nanos driver.findElement(By.id("traceLoggingCustomAsTraceLevel")).click(); // check trace logging // check visually the log file // filename:traceLoggingInterceptorTest.log } @Test public void test04_04_customTraceLoggingAsWarnLevel() { driver.findElement(By.id("traceLoggingInterceptor")).click(); // access to the controller more than the set default warn handling nanos driver.findElement(By.id("traceLoggingCustomAsWarnLevel")).click(); // check warn logging // check visually the log file // filename:traceLoggingInterceptorTest.log } }