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.endpoint;
8   
9   import org.mule.api.MuleContext;
10  import org.mule.api.endpoint.EndpointURI;
11  import org.mule.tck.junit4.AbstractMuleTestCase;
12  
13  import java.util.HashMap;
14  import java.util.Map;
15  
16  import org.junit.Test;
17  
18  import static org.junit.Assert.assertEquals;
19  
20  public class URIBuilderTestCase extends AbstractMuleTestCase
21  {
22  
23      private static final Map<String, String> queries;
24  
25      static
26      {
27          queries = new HashMap<String, String>();
28          queries.put("aname", "avalue");
29          queries.put("bname", "bvalue");
30      }
31  
32      protected MuleContext unusedMuleContext = null;
33      
34      @Test
35      public void testAddressForProtocol()
36      {
37          URIBuilder uri = new URIBuilder(unusedMuleContext);
38          uri.setProtocol("foo");
39          uri.setAddress("foo://bar");
40          assertEquals("foo://bar", uri.toString());
41      }
42  
43      @Test
44      public void testAddressForMeta()
45      {
46          URIBuilder uri = new URIBuilder(unusedMuleContext);
47          uri.setMeta("foo");
48          uri.setAddress("baz://bar");
49          assertEquals("foo:baz://bar", uri.toString());
50      }
51  
52      @Test
53      public void testQueriesWithAddress()
54      {
55          URIBuilder uri = new URIBuilder(unusedMuleContext);
56          uri.setAddress("foo://bar");
57          uri.setQueryMap(queries);
58          assertEquals("foo://bar?aname=avalue&bname=bvalue", uri.toString());
59      }
60  
61      // note that explicit properties over-rule those in the uri when duplicated
62      // and we keep parameter ordering as in original url
63      @Test
64      public void testLiteralQueries()
65      {
66          URIBuilder uri1 = new URIBuilder(unusedMuleContext);
67          uri1.setAddress("foo://bar?cname=cvalue&aname=anothervalue");
68          uri1.setQueryMap(queries);
69          assertEquals("foo://bar?cname=cvalue&aname=avalue&bname=bvalue", uri1.toString());
70          URIBuilder uri2 = new URIBuilder(unusedMuleContext);
71          uri2.setQueryMap(queries);
72          uri2.setAddress("foo://bar?cname=cvalue&aname=anothervalue");
73          assertEquals("foo://bar?cname=cvalue&aname=avalue&bname=bvalue", uri2.toString());
74      }
75  
76      @Test
77      public void testNullQueries()
78      {
79          URIBuilder uri1 = new URIBuilder(unusedMuleContext);
80          uri1.setAddress("foo://bar?cname&aname");
81          uri1.setQueryMap(queries);
82          assertEquals("foo://bar?cname&aname=avalue&bname=bvalue", uri1.toString());
83      }
84  
85      @Test
86      public void testFromString()
87      {
88          URIBuilder uri = new URIBuilder("test://bar", unusedMuleContext);
89          EndpointURI endpointURI = uri.getEndpoint();
90          assertEquals("test://bar", endpointURI.getUri().toString());
91          assertEquals("test", endpointURI.getSchemeMetaInfo());
92          uri = new URIBuilder("meta:test://bar", unusedMuleContext);
93          endpointURI = uri.getEndpoint();
94          assertEquals("test://bar", endpointURI.getUri().toString());
95          assertEquals("meta", endpointURI.getSchemeMetaInfo());
96      }
97  
98      @Test
99      public void testMultiValueParam() 
100     {
101         // Test from uri string
102         URIBuilder uri = new URIBuilder("test://bar?aname=avalue&aname=bvalue&aname=cvalue", unusedMuleContext);
103         EndpointURI endpointURI = uri.getEndpoint();
104         assertEquals("test://bar?aname=avalue&aname=bvalue&aname=cvalue", endpointURI.getUri().toString());
105 
106         // Test modifying values with a map (only first should change)
107         Map<String, String> tq = new HashMap<String, String>();
108         tq.put("aname", "zvalue");
109         tq.put("dname", "dvalue");
110 
111         uri = new URIBuilder("test://bar?aname=avalue&aname=bvalue&aname=cvalue", unusedMuleContext);
112         uri.setQueryMap(tq);
113         endpointURI = uri.getEndpoint();
114         assertEquals("test://bar?aname=zvalue&aname=bvalue&aname=cvalue&dname=dvalue", endpointURI.getUri().toString());
115     }
116     
117 }