001/** 002 * Copyright 2015 DuraSpace, Inc. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.fcrepo.camel.integration; 017 018import java.util.HashMap; 019import java.util.Map; 020 021import org.apache.camel.EndpointInject; 022import org.apache.camel.Exchange; 023import org.apache.camel.Produce; 024import org.apache.camel.ProducerTemplate; 025import org.apache.camel.builder.RouteBuilder; 026import org.apache.camel.builder.xml.Namespaces; 027import org.apache.camel.component.mock.MockEndpoint; 028import org.apache.camel.test.junit4.CamelTestSupport; 029import org.fcrepo.camel.FcrepoHeaders; 030import org.fcrepo.camel.JmsHeaders; 031import org.fcrepo.camel.RdfNamespaces; 032import org.junit.Test; 033import org.junit.runner.RunWith; 034import org.springframework.test.context.ContextConfiguration; 035import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 036 037/** 038 * Test adding a resource at a specific path 039 * @author Aaron Coburn 040 * @since November 7, 2014 041 */ 042@RunWith(SpringJUnit4ClassRunner.class) 043@ContextConfiguration({"/spring-test/test-container.xml"}) 044public class FcrepoPathIT extends CamelTestSupport { 045 046 @EndpointInject(uri = "mock:deleted") 047 protected MockEndpoint deletedEndpoint; 048 049 @EndpointInject(uri = "mock:created") 050 protected MockEndpoint createdEndpoint; 051 052 @EndpointInject(uri = "mock:result") 053 protected MockEndpoint resultEndpoint; 054 055 @Produce(uri = "direct:check") 056 protected ProducerTemplate template; 057 058 @Test 059 public void testPath() throws InterruptedException { 060 final String path = "/test/a/b/c/d"; 061 062 // Assertions 063 resultEndpoint.expectedMessageCount(3); 064 resultEndpoint.expectedHeaderReceived(Exchange.CONTENT_TYPE, "application/rdf+xml"); 065 resultEndpoint.expectedHeaderReceived(Exchange.HTTP_RESPONSE_CODE, 200); 066 067 createdEndpoint.expectedMessageCount(1); 068 createdEndpoint.expectedHeaderReceived(Exchange.HTTP_RESPONSE_CODE, 201); 069 070 deletedEndpoint.expectedMessageCount(2); 071 deletedEndpoint.expectedHeaderReceived(Exchange.HTTP_RESPONSE_CODE, 204); 072 073 // Setup 074 final Map<String, Object> setupHeaders = new HashMap<>(); 075 setupHeaders.put(Exchange.HTTP_METHOD, "PUT"); 076 setupHeaders.put(FcrepoHeaders.FCREPO_IDENTIFIER, path); 077 setupHeaders.put(Exchange.CONTENT_TYPE, "text/turtle"); 078 template.sendBodyAndHeaders("direct:setup", FcrepoTestUtils.getTurtleDocument(), setupHeaders); 079 080 // Test 081 template.sendBodyAndHeader(null, JmsHeaders.IDENTIFIER, path); 082 template.sendBodyAndHeader(null, FcrepoHeaders.FCREPO_IDENTIFIER, path); 083 template.sendBody("direct:checkPath", null); 084 085 // Teardown 086 final Map<String, Object> teardownHeaders = new HashMap<>(); 087 teardownHeaders.put(Exchange.HTTP_METHOD, "DELETE"); 088 teardownHeaders.put(FcrepoHeaders.FCREPO_IDENTIFIER, path); 089 template.sendBodyAndHeaders("direct:teardown", null, teardownHeaders); 090 091 // Confirm that assertions passed 092 resultEndpoint.assertIsSatisfied(); 093 createdEndpoint.assertIsSatisfied(); 094 deletedEndpoint.assertIsSatisfied(); 095 } 096 097 @Override 098 protected RouteBuilder createRouteBuilder() { 099 return new RouteBuilder() { 100 @Override 101 public void configure() { 102 103 final String fcrepo_uri = FcrepoTestUtils.getFcrepoEndpointUri(); 104 105 final Namespaces ns = new Namespaces("rdf", RdfNamespaces.RDF); 106 107 from("direct:setup") 108 .to(fcrepo_uri) 109 .to("mock:created"); 110 111 from("direct:check") 112 .to(fcrepo_uri) 113 .filter().xpath( 114 "/rdf:RDF/rdf:Description/rdf:type" + 115 "[@rdf:resource='" + RdfNamespaces.REPOSITORY + "Resource']", ns) 116 .to("mock:result"); 117 118 from("direct:checkPath") 119 .to(fcrepo_uri + "/test/a/b/c/d") 120 .filter().xpath( 121 "/rdf:RDF/rdf:Description/rdf:type" + 122 "[@rdf:resource='" + RdfNamespaces.REPOSITORY + "Resource']", ns) 123 .to("mock:result"); 124 125 from("direct:teardown") 126 .to(fcrepo_uri) 127 .to("mock:deleted") 128 .to(fcrepo_uri + "?tombstone=true") 129 .to("mock:deleted"); 130 } 131 }; 132 } 133}