001/* 002 * The contents of this file are subject to the license and copyright 003 * detailed in the LICENSE and NOTICE files at the root of the source 004 * tree. 005 */ 006package org.fcrepo.camel.reindexing; 007 008import static org.apache.camel.Exchange.CONTENT_TYPE; 009import static org.apache.camel.Exchange.HTTP_PATH; 010import static org.fcrepo.camel.reindexing.ReindexingHeaders.REINDEXING_RECIPIENTS; 011 012import java.io.IOException; 013import java.util.HashMap; 014import java.util.Map; 015 016import org.apache.camel.EndpointInject; 017import org.apache.camel.Produce; 018import org.apache.camel.ProducerTemplate; 019import org.apache.camel.builder.RouteBuilder; 020import org.apache.camel.component.mock.MockEndpoint; 021import org.apache.camel.test.junit4.CamelTestSupport; 022 023import org.junit.Test; 024 025/** 026 * Test the route workflow. 027 * 028 * @author Aaron Coburn 029 * @since 2015-04-10 030 */ 031public class RestProcessorTest extends CamelTestSupport { 032 033 @EndpointInject(uri = "mock:result") 034 protected MockEndpoint resultEndpoint; 035 036 @Produce(uri = "direct:start") 037 protected ProducerTemplate template; 038 039 @Test 040 public void testRestProcessor() throws Exception { 041 042 resultEndpoint.expectedMessageCount(3); 043 resultEndpoint.message(0).header(REINDEXING_RECIPIENTS).isEqualTo(""); 044 resultEndpoint.message(1).header(REINDEXING_RECIPIENTS).contains("broker:queue:bar"); 045 resultEndpoint.message(1).header(REINDEXING_RECIPIENTS).contains("broker:queue:foo"); 046 resultEndpoint.message(2).header(REINDEXING_RECIPIENTS).isEqualTo(""); 047 048 final Map<String, Object> headers = new HashMap<>(); 049 headers.put(HTTP_PATH, "/"); 050 template.sendBodyAndHeaders("", headers); 051 052 headers.clear(); 053 headers.put(HTTP_PATH, "/foo/bar"); 054 headers.put(REINDEXING_RECIPIENTS, 055 "broker:queue:foo, broker:queue:bar,\t\nbroker:queue:foo "); 056 template.sendBodyAndHeaders("", headers); 057 058 headers.clear(); 059 headers.put(HTTP_PATH, "/foo/bar"); 060 headers.put(REINDEXING_RECIPIENTS, null); 061 template.sendBodyAndHeaders("", headers); 062 063 assertMockEndpointsSatisfied(); 064 } 065 066 @Test 067 public void testRestProcessorWithBody1() throws Exception { 068 final String body = "[\"broker:queue:foo\",\"broker:queue:bar\"]"; 069 070 resultEndpoint.expectedMessageCount(1); 071 resultEndpoint.message(0).header(REINDEXING_RECIPIENTS).contains("broker:queue:bar"); 072 resultEndpoint.message(0).header(REINDEXING_RECIPIENTS).contains("broker:queue:foo"); 073 074 final Map<String, Object> headers = new HashMap<>(); 075 headers.put(CONTENT_TYPE, "application/json"); 076 headers.put(HTTP_PATH, "/foo/bar"); 077 template.sendBodyAndHeaders(body, headers); 078 079 assertMockEndpointsSatisfied(); 080 } 081 082 @Test 083 public void testRestProcessorWithBody2() throws Exception { 084 final String body = "[\"broker:queue:foo\",\"broker:queue:bar\"]"; 085 086 resultEndpoint.expectedMessageCount(1); 087 resultEndpoint.message(0).header(REINDEXING_RECIPIENTS).contains("broker:queue:bar"); 088 resultEndpoint.message(0).header(REINDEXING_RECIPIENTS).contains("broker:queue:foo"); 089 resultEndpoint.message(0).header(REINDEXING_RECIPIENTS).contains("broker:queue:baz"); 090 091 final Map<String, Object> headers = new HashMap<>(); 092 headers.put(HTTP_PATH, "/foo/bar"); 093 headers.put(CONTENT_TYPE, "application/json"); 094 headers.put(REINDEXING_RECIPIENTS, "broker:queue:baz"); 095 template.sendBodyAndHeaders(body, headers); 096 097 assertMockEndpointsSatisfied(); 098 } 099 100 @Test 101 public void testRestProcessorWithNullBody() throws Exception { 102 103 resultEndpoint.expectedMessageCount(1); 104 resultEndpoint.message(0).header(REINDEXING_RECIPIENTS).isEqualTo("broker:queue:baz"); 105 106 final Map<String, Object> headers = new HashMap<>(); 107 headers.put(CONTENT_TYPE, "application/json"); 108 headers.put(HTTP_PATH, "/foo/bar"); 109 headers.put(REINDEXING_RECIPIENTS, "broker:queue:baz"); 110 template.sendBodyAndHeaders(null, headers); 111 112 assertMockEndpointsSatisfied(); 113 } 114 115 @Test 116 public void testRestProcessorWithNoContentType() throws Exception { 117 118 final String body = "[\"broker:queue:foo\",\"broker:queue:bar\"]"; 119 120 resultEndpoint.expectedMessageCount(1); 121 resultEndpoint.message(0).header(REINDEXING_RECIPIENTS).isEqualTo("broker:queue:baz"); 122 123 final Map<String, Object> headers = new HashMap<>(); 124 headers.put(HTTP_PATH, "/foo/bar"); 125 headers.put(REINDEXING_RECIPIENTS, "broker:queue:baz"); 126 template.sendBodyAndHeaders(body, headers); 127 128 assertMockEndpointsSatisfied(); 129 } 130 131 @Test 132 public void testRestProcessorWithBadContentType() throws Exception { 133 134 final String body = "[\"broker:queue:foo\",\"broker:queue:bar\"]"; 135 136 resultEndpoint.expectedMessageCount(1); 137 resultEndpoint.message(0).header(REINDEXING_RECIPIENTS).isEqualTo("broker:queue:baz"); 138 139 final Map<String, Object> headers = new HashMap<>(); 140 headers.put(CONTENT_TYPE, "application/foo"); 141 headers.put(HTTP_PATH, "/foo/bar"); 142 headers.put(REINDEXING_RECIPIENTS, "broker:queue:baz"); 143 template.sendBodyAndHeaders(body, headers); 144 145 assertMockEndpointsSatisfied(); 146 } 147 148 149 @Test 150 public void testRestProcessorWithEmptyBody() throws Exception { 151 152 resultEndpoint.expectedMessageCount(1); 153 resultEndpoint.message(0).header(REINDEXING_RECIPIENTS).isEqualTo("broker:queue:baz"); 154 155 final Map<String, Object> headers = new HashMap<>(); 156 headers.put(CONTENT_TYPE, "application/json"); 157 headers.put(HTTP_PATH, "/foo/bar"); 158 headers.put(REINDEXING_RECIPIENTS, "broker:queue:baz"); 159 template.sendBodyAndHeaders(" ", headers); 160 161 assertMockEndpointsSatisfied(); 162 } 163 164 165 @Override 166 protected RouteBuilder createRouteBuilder() { 167 return new RouteBuilder() { 168 @Override 169 public void configure() throws IOException { 170 from("direct:start") 171 .process(new RestProcessor()) 172 .to("mock:result"); 173 } 174 }; 175 } 176}