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