package org.jembi.openhim; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.IOException; import org.jembi.openhim.DefaultChannelComponent.URLMapping; import org.jembi.openhim.RestfulHttpRequest.Scheme; import org.jembi.openhim.exception.DefaultChannelInvalidConfigException; import org.junit.Test; import org.mule.api.MuleMessage; import org.mule.api.transport.PropertyScope; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; public class DefaultChannelComponentTest { @Test public void test_findURLMapping_match() throws JsonParseException, JsonMappingException, IOException { DefaultChannelComponent dcc = new DefaultChannelComponent(); dcc.readMappings(); URLMapping mapping = dcc.findURLMapping(Scheme.HTTPS, "test/sample/123"); assertNotNull(mapping); assertEquals("localhost", mapping.getHost()); assertEquals("8080", mapping.getPort()); mapping = dcc.findURLMapping(Scheme.HTTPS, "test/sample2/123abc/test2"); assertNotNull(mapping); assertEquals("localhost", mapping.getHost()); assertEquals("8080", mapping.getPort()); } @Test public void test_findURLMapping_noMatch() throws JsonParseException, JsonMappingException, IOException { DefaultChannelComponent dcc = new DefaultChannelComponent(); dcc.readMappings(); URLMapping mapping = dcc.findURLMapping(Scheme.HTTPS, "not/a/match"); assertEquals(null, mapping); } @Test public void test_readMappings() throws JsonParseException, JsonMappingException, IOException { DefaultChannelComponent dcc = new DefaultChannelComponent(); dcc.readMappings(); assertNotNull(DefaultChannelComponent.mappings); URLMapping mapping1 = new URLMapping(); mapping1.setHost("localhost"); mapping1.setPort("8080"); mapping1.setUrlPattern("test/sample/.+"); URLMapping mapping2 = new URLMapping(); mapping2.setHost("localhost"); mapping2.setPort("8080"); mapping2.setUrlPattern("test/sample2/.+/test2"); URLMapping mapping3 = new URLMapping(); mapping3.setHost("localhost"); mapping3.setPort("8080"); mapping3.setUrlPattern("test/sample/protected"); mapping3.setAuthType("basic"); mapping3.setUsername("test"); mapping3.setPassword("password"); URLMapping mapping4 = new URLMapping(); mapping4.setHost("localhost"); mapping4.setPort("8080"); mapping4.setUrlPattern("test/post"); assertEquals(true, DefaultChannelComponent.mappings.contains(mapping1)); assertEquals(true, DefaultChannelComponent.mappings.contains(mapping2)); } @Test public void test_findUnsecureURLMapping_match() throws JsonParseException, JsonMappingException, IOException { DefaultChannelComponent dcc = new DefaultChannelComponent(); dcc.readMappings(); URLMapping mapping = dcc.findURLMapping(Scheme.HTTP, "test/unsecure"); assertNotNull(mapping); assertEquals("localhost", mapping.getHost()); assertEquals("8080", mapping.getPort()); URLMapping mapping2 = dcc.findURLMapping(Scheme.HTTP, "test/unsecure2"); assertNotNull(mapping2); assertEquals("localhost", mapping2.getHost()); assertEquals("8080", mapping2.getPort()); } @Test public void test_shouldNotFindUnallowed() throws JsonParseException, JsonMappingException, IOException { DefaultChannelComponent dcc = new DefaultChannelComponent(); dcc.readMappings(); URLMapping mapping = dcc.findURLMapping(Scheme.HTTP, "test/secure"); assertEquals(null, mapping); //secure by default URLMapping mapping2 = dcc.findURLMapping(Scheme.HTTP, "test/sample/123"); assertEquals(null, mapping2); } @Test public void test_pathRedirection_pathConstant() throws DefaultChannelInvalidConfigException, JsonParseException, JsonMappingException, IOException { test_pathRedirection("test/path/redirection", "redirected"); } @Test public void test_pathRedirection_transform() throws DefaultChannelInvalidConfigException, JsonParseException, JsonMappingException, IOException { test_pathRedirection("test/redirection/foo", "test/redirection/bar"); test_pathRedirection("test/redirection2/123", "redirection2/123"); } private void test_pathRedirection(String path, String targetPath) throws JsonParseException, JsonMappingException, IOException, DefaultChannelInvalidConfigException { DefaultChannelComponent dcc = new DefaultChannelComponent(); dcc.readMappings(); URLMapping mapping = dcc.findURLMapping(Scheme.HTTPS, path); MuleMessage mockMsg = mock(MuleMessage.class); RestfulHttpRequest req = new RestfulHttpRequest(); req.setPath(path); dcc.setMessagePropertiesFromMapping(req, mockMsg, mapping); verify(mockMsg).setProperty(eq("http.host"), eq("localhost"), eq(PropertyScope.OUTBOUND)); verify(mockMsg).setProperty(eq("http.port"), eq("8080"), eq(PropertyScope.OUTBOUND)); verify(mockMsg).setProperty(eq("path"), eq(targetPath), eq(PropertyScope.OUTBOUND)); } @Test public void test_pathRedirection_invalid() throws DefaultChannelInvalidConfigException, JsonParseException, JsonMappingException, IOException { //cannot specify both path and pathTransform try { DefaultChannelComponent dcc = new DefaultChannelComponent(); MuleMessage mockMsg = mock(MuleMessage.class); URLMapping mapping = mock(URLMapping.class); when(mapping.getPath()).thenReturn("path"); when(mapping.getPathTransform()).thenReturn("pathTransform"); dcc.setMessagePropertiesFromMapping(new RestfulHttpRequest(), mockMsg, mapping); fail(); } catch (DefaultChannelInvalidConfigException ex) { //expected } } }