View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.expression;
8   
9   import org.mule.DefaultMuleMessage;
10  import org.mule.api.MuleMessage;
11  import org.mule.api.expression.RequiredValueException;
12  import org.mule.tck.junit4.AbstractMuleContextTestCase;
13  
14  import java.util.Collections;
15  import java.util.HashMap;
16  import java.util.Map;
17  
18  import org.junit.Test;
19  
20  import static org.junit.Assert.assertEquals;
21  import static org.junit.Assert.assertNotNull;
22  import static org.junit.Assert.assertNull;
23  
24  public class MessageHeaderExpressionEvaluatorTestCase extends AbstractMuleContextTestCase
25  {
26      private HashMap<String, Object> messageProperties;
27      private MessageHeaderExpressionEvaluator evaluator = new MessageHeaderExpressionEvaluator();
28      private MuleMessage message;
29  
30      public MessageHeaderExpressionEvaluatorTestCase()
31      {
32          super();
33          setDisposeContextPerClass(true);
34      }
35  
36      @Override
37      public void doSetUp()
38      {
39          messageProperties = new HashMap<String, Object>(3);
40          messageProperties.put("foo", "foovalue");
41          messageProperties.put("bar", "barvalue");
42          messageProperties.put("baz", "bazvalue");
43  
44          message = new DefaultMuleMessage(TEST_MESSAGE, messageProperties, muleContext);
45      }
46  
47      @Test
48      public void requiredHeaderWithExistingValueShouldReturnValue()
49      {
50          Object result = evaluator.evaluate("foo", message);
51          assertNotNull(result);
52          assertEquals("foovalue", result);
53      }
54  
55      @Test
56      public void requiredHeaderWithExistingValueViaExpressionManagerShouldReturnValue()
57      {
58          Object result = muleContext.getExpressionManager().evaluate("#[header:foo]", message);
59          assertNotNull(result);
60          assertEquals("foovalue", result);
61      }
62  
63      @Test(expected = RequiredValueException.class)
64      public void requiredHeaderWithMissingValueShouldFail()
65      {
66          evaluator.evaluate("nonexistent", message);
67      }
68  
69      @Test(expected = RequiredValueException.class)
70      public void requiredHeaderWithMissingValueViaExpressionManagerShouldFail()
71      {
72          muleContext.getExpressionManager().evaluate("#[header:fool]", message);
73      }
74  
75      @Test
76      public void requiredHeaderWithExplicitPropertyScopeShouldReturnValue() throws Exception
77      {
78          addInboundMessageProperty("testProp", "testvalue");
79  
80          Object result = evaluator.evaluate("INBOUND:testProp", message);
81          assertEquals("testvalue", result);
82      }
83  
84      @Test
85      public void optionalHeaderWithExistingValueShouldReturnValue()
86      {
87          Object result = evaluator.evaluate("foo?", message);
88          assertEquals("foovalue", result);
89      }
90  
91      @Test
92      public void optionalHeaderWithExistingValueViaExpressionManagerShouldReturnValue()
93      {
94          Object result = muleContext.getExpressionManager().evaluate("#[header:foo?]", message);
95          assertNotNull(result);
96          assertEquals("foovalue", result);
97      }
98  
99      @Test
100     public void optionalHeaderWithMissingValueShouldReturnNull()
101     {
102         Object result = evaluator.evaluate("nonexistent?", message);
103         assertNull(result);
104     }
105 
106     @Test
107     public void optionalHeaderWithMissingValueViaExpressionManagerShouldReturnNull()
108     {
109         Object result = muleContext.getExpressionManager().evaluate("#[header:nonexistent?]", message);
110         assertNull(result);
111     }
112 
113     @Test
114     public void optionalHeaderWithMissingValueInDefaultScopeShouldReturnNull()
115     {
116         // default scope for header expression evaluation is OUTBOUND. We add INBOUND message
117         // properties here, expecting that the header will not be found
118         addInboundMessageProperty("testProp", "testvalue");
119 
120         Object result = evaluator.evaluate("testProp?", message);
121         assertNull(result);
122     }
123 
124     private void addInboundMessageProperty(String key, Object value)
125     {
126         Map<String, Object> inboundProperties = Collections.singletonMap(key, value);
127 
128         DefaultMuleMessage dmm = (DefaultMuleMessage) message;
129         dmm.addInboundProperties(inboundProperties);
130     }
131 }