1   /*
2    * Copyright 2005-2010 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.springframework.ws.server.endpoint.interceptor;
18  
19  import org.springframework.core.io.ClassPathResource;
20  import org.springframework.ws.MockWebServiceMessage;
21  import org.springframework.ws.MockWebServiceMessageFactory;
22  import org.springframework.ws.context.DefaultMessageContext;
23  import org.springframework.ws.context.MessageContext;
24  
25  import org.apache.log4j.AppenderSkeleton;
26  import org.apache.log4j.BasicConfigurator;
27  import org.apache.log4j.Level;
28  import org.apache.log4j.Logger;
29  import org.apache.log4j.PropertyConfigurator;
30  import org.apache.log4j.spi.LoggingEvent;
31  import org.junit.After;
32  import org.junit.Assert;
33  import org.junit.Before;
34  import org.junit.Test;
35  
36  public class PayloadLoggingInterceptorTest {
37  
38      private PayloadLoggingInterceptor interceptor;
39  
40      private CountingAppender appender;
41  
42      private MessageContext messageContext;
43  
44      @Before
45      public void setUp() throws Exception {
46          interceptor = new PayloadLoggingInterceptor();
47          appender = new CountingAppender();
48          BasicConfigurator.configure(appender);
49          Logger.getRootLogger().setLevel(Level.DEBUG);
50          MockWebServiceMessage request = new MockWebServiceMessage("<request/>");
51          messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());
52          appender.reset();
53      }
54  
55      @After
56      public void tearDown() throws Exception {
57          BasicConfigurator.resetConfiguration();
58          ClassPathResource resource = new ClassPathResource("log4j.properties");
59          PropertyConfigurator.configure(resource.getURL());
60      }
61  
62      @Test
63      public void testHandleRequestDisabled() throws Exception {
64          interceptor.setLogRequest(false);
65          int eventCount = appender.getCount();
66          interceptor.handleRequest(messageContext, null);
67          Assert.assertEquals("PayloadLoggingInterceptor logged when disabled", appender.getCount(), eventCount);
68      }
69  
70      @Test
71      public void testHandleRequestEnabled() throws Exception {
72          int eventCount = appender.getCount();
73          interceptor.handleRequest(messageContext, null);
74          Assert.assertTrue("PayloadLoggingInterceptor did not log", appender.getCount() > eventCount);
75      }
76  
77      @Test
78      public void testHandleResponseDisabled() throws Exception {
79          MockWebServiceMessage response = (MockWebServiceMessage) messageContext.getResponse();
80          response.setPayload("<response/>");
81          interceptor.setLogResponse(false);
82          int eventCount = appender.getCount();
83          interceptor.handleResponse(messageContext, null);
84          Assert.assertEquals("PayloadLoggingInterceptor logged when disabled", appender.getCount(), eventCount);
85      }
86  
87      @Test
88      public void testHandleResponseEnabled() throws Exception {
89          MockWebServiceMessage response = (MockWebServiceMessage) messageContext.getResponse();
90          response.setPayload("<response/>");
91          int eventCount = appender.getCount();
92          interceptor.handleResponse(messageContext, null);
93          Assert.assertTrue("PayloadLoggingInterceptor did not log", appender.getCount() > eventCount);
94      }
95  
96      private static class CountingAppender extends AppenderSkeleton {
97  
98          private int count;
99  
100         public int getCount() {
101             return count;
102         }
103 
104         public void reset() {
105             count = 0;
106         }
107 
108         @Override
109         protected void append(LoggingEvent loggingEvent) {
110             count++;
111         }
112 
113         public boolean requiresLayout() {
114             return false;
115         }
116 
117         public void close() {
118         }
119     }
120 }