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.RdfNamespaces; 031import org.junit.Test; 032import org.junit.runner.RunWith; 033import org.springframework.test.context.ContextConfiguration; 034import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 035 036/** 037 * Test adding an RDF resource with PUT 038 * @author Aaron Coburn 039 * @since November 7, 2014 040 */ 041@RunWith(SpringJUnit4ClassRunner.class) 042@ContextConfiguration({"/spring-test/test-container.xml"}) 043public class FcrepoPutIT extends CamelTestSupport { 044 045 @EndpointInject(uri = "mock:created") 046 protected MockEndpoint createdEndpoint; 047 048 @EndpointInject(uri = "mock:deleted") 049 protected MockEndpoint deletedEndpoint; 050 051 @EndpointInject(uri = "mock:result") 052 protected MockEndpoint resultEndpoint; 053 054 @Produce(uri = "direct:start") 055 protected ProducerTemplate template; 056 057 @Test 058 public void testPut() throws InterruptedException { 059 final String path1 = "/test/a/b/c/d"; 060 final String path2 = "/test/a/b/c/e"; 061 062 // Assertions 063 resultEndpoint.expectedMessageCount(2); 064 resultEndpoint.expectedHeaderReceived(Exchange.CONTENT_TYPE, "application/rdf+xml"); 065 resultEndpoint.expectedHeaderReceived(Exchange.HTTP_RESPONSE_CODE, 200); 066 067 createdEndpoint.expectedMessageCount(2); 068 createdEndpoint.expectedHeaderReceived(Exchange.HTTP_RESPONSE_CODE, 201); 069 070 deletedEndpoint.expectedMessageCount(4); 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, path1); 077 setupHeaders.put(Exchange.CONTENT_TYPE, "text/turtle"); 078 template.sendBodyAndHeaders("direct:setup", FcrepoTestUtils.getTurtleDocument(), setupHeaders); 079 080 setupHeaders.clear(); 081 setupHeaders.put(Exchange.HTTP_METHOD, "PUT"); 082 setupHeaders.put(FcrepoHeaders.FCREPO_IDENTIFIER, path2); 083 template.sendBodyAndHeaders("direct:setup2", FcrepoTestUtils.getTurtleDocument(), setupHeaders); 084 085 // Test 086 template.sendBodyAndHeader(null, FcrepoHeaders.FCREPO_IDENTIFIER, path1); 087 template.sendBodyAndHeader(null, FcrepoHeaders.FCREPO_IDENTIFIER, path2); 088 089 // Teardown 090 final Map<String, Object> teardownHeaders = new HashMap<>(); 091 teardownHeaders.put(Exchange.HTTP_METHOD, "DELETE"); 092 teardownHeaders.put(FcrepoHeaders.FCREPO_IDENTIFIER, path1); 093 template.sendBodyAndHeaders("direct:teardown", null, teardownHeaders); 094 095 teardownHeaders.clear(); 096 teardownHeaders.put(Exchange.HTTP_METHOD, "DELETE"); 097 teardownHeaders.put(FcrepoHeaders.FCREPO_IDENTIFIER, path2); 098 template.sendBodyAndHeaders("direct:teardown", null, teardownHeaders); 099 100 // Confirm that assertions passed 101 resultEndpoint.assertIsSatisfied(); 102 createdEndpoint.assertIsSatisfied(); 103 deletedEndpoint.assertIsSatisfied(); 104 } 105 106 @Override 107 protected RouteBuilder createRouteBuilder() { 108 return new RouteBuilder() { 109 @Override 110 public void configure() { 111 final String fcrepo_uri = FcrepoTestUtils.getFcrepoEndpointUri(); 112 113 final Namespaces ns = new Namespaces("rdf", RdfNamespaces.RDF); 114 115 from("direct:setup") 116 .to(fcrepo_uri) 117 .to("mock:created"); 118 119 from("direct:setup2") 120 .to(fcrepo_uri + "?contentType=text/turtle") 121 .to("mock:created"); 122 123 from("direct:start") 124 .to(fcrepo_uri) 125 .filter().xpath( 126 "/rdf:RDF/rdf:Description/rdf:type" + 127 "[@rdf:resource='" + RdfNamespaces.REPOSITORY + "Resource']", ns) 128 .to("mock:result"); 129 130 from("direct:teardown") 131 .to(fcrepo_uri) 132 .to("mock:deleted") 133 .to(fcrepo_uri + "?tombstone=true") 134 .to("mock:deleted"); 135 } 136 }; 137 } 138}