Updated Branches: refs/heads/camel-2.11.x 929609587 -> c90c9dc99 refs/heads/master 7f3907db6 -> f336cb311
CAMEL-6595 fixed the test packages name issue of camel-cmis with thanks to Maurizio Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f336cb31 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f336cb31 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f336cb31 Branch: refs/heads/master Commit: f336cb311a623fb098509baebcb2001126e7073b Parents: 7f3907d Author: Willem Jiang <ningji...@apache.org> Authored: Thu Aug 1 11:43:51 2013 +0800 Committer: Willem Jiang <ningji...@apache.org> Committed: Thu Aug 1 11:44:31 2013 +0800 ---------------------------------------------------------------------- .../camel/componenet/cmis/CMISConsumerTest.java | 104 ----------- .../camel/componenet/cmis/CMISProducerTest.java | 181 ------------------- .../componenet/cmis/CMISQueryProducerTest.java | 109 ----------- .../camel/componenet/cmis/CMISTestSupport.java | 163 ----------------- .../camel/component/cmis/CMISConsumerTest.java | 104 +++++++++++ .../camel/component/cmis/CMISProducerTest.java | 180 ++++++++++++++++++ .../component/cmis/CMISQueryProducerTest.java | 109 +++++++++++ .../camel/component/cmis/CMISTestSupport.java | 163 +++++++++++++++++ 8 files changed, 556 insertions(+), 557 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/f336cb31/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISConsumerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISConsumerTest.java b/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISConsumerTest.java deleted file mode 100644 index ff2a695..0000000 --- a/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISConsumerTest.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.componenet.cmis; - -import java.io.UnsupportedEncodingException; -import java.util.List; - -import org.apache.camel.Consumer; -import org.apache.camel.Endpoint; -import org.apache.camel.EndpointInject; -import org.apache.camel.Exchange; -import org.apache.camel.Processor; -import org.apache.camel.component.mock.MockEndpoint; -import org.apache.chemistry.opencmis.client.api.Folder; -import org.junit.Before; -import org.junit.Test; - -public class CMISConsumerTest extends CMISTestSupport { - - @EndpointInject(uri = "mock:result") - protected MockEndpoint resultEndpoint; - - @Test - public void getAllContentFromServerOrderedFromRootToLeaves() throws Exception { - resultEndpoint.expectedMessageCount(5); - - Consumer treeBasedConsumer = createConsumerFor(CMIS_ENDPOINT_TEST_SERVER); - treeBasedConsumer.start(); - - resultEndpoint.assertIsSatisfied(); - treeBasedConsumer.stop(); - - List<Exchange> exchanges = resultEndpoint.getExchanges(); - assertTrue(getNodeNameForIndex(exchanges, 0).equals("RootFolder")); - assertTrue(getNodeNameForIndex(exchanges, 1).equals("Folder1")); - assertTrue(getNodeNameForIndex(exchanges, 2).equals("Folder2")); - assertTrue(getNodeNameForIndex(exchanges, 3).contains(".txt")); - assertTrue(getNodeNameForIndex(exchanges, 4).contains(".txt")); - } - - @Test - public void consumeDocumentsWithQuery() throws Exception { - resultEndpoint.expectedMessageCount(2); - - Consumer queryBasedConsumer = createConsumerFor( - CMIS_ENDPOINT_TEST_SERVER + "?query=SELECT * FROM cmis:document"); - queryBasedConsumer.start(); - resultEndpoint.assertIsSatisfied(); - queryBasedConsumer.stop(); - } - - private Consumer createConsumerFor(String path) throws Exception { - Endpoint endpoint = context.getEndpoint("cmis://" + path); - return endpoint.createConsumer(new Processor() { - public void process(Exchange exchange) throws Exception { - template.send("mock:result", exchange); - } - }); - } - - private String getNodeNameForIndex(List<Exchange> exchanges, int index) { - return exchanges.get(index).getIn().getHeader("cmis:name", String.class); - } - - private void populateRepositoryRootFolderWithTwoFoldersAndTwoDocuments() - throws UnsupportedEncodingException { - Folder folder1 = createFolderWithName("Folder1"); - Folder folder2 = createChildFolderWithName(folder1, "Folder2"); - createTextDocument(folder2, "Document2.1", "2.1.txt"); - createTextDocument(folder2, "Document2.2", "2.2.txt"); - //L0 ROOT - // | - //L1 Folder1 - //L2 |_____Folder2 - // || - //L3 Doc2.1___||___Doc2.2 - } - - @Override - public boolean isUseRouteBuilder() { - return false; - } - - @Override - @Before - public void setUp() throws Exception { - super.setUp(); - populateRepositoryRootFolderWithTwoFoldersAndTwoDocuments(); - } -} http://git-wip-us.apache.org/repos/asf/camel/blob/f336cb31/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISProducerTest.java b/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISProducerTest.java deleted file mode 100644 index a972e61..0000000 --- a/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISProducerTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.componenet.cmis; - -import org.apache.camel.Endpoint; -import org.apache.camel.Exchange; -import org.apache.camel.NoSuchHeaderException; -import org.apache.camel.Produce; -import org.apache.camel.Producer; -import org.apache.camel.ProducerTemplate; -import org.apache.camel.ResolveEndpointFailedException; -import org.apache.camel.RuntimeExchangeException; -import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.component.cmis.CamelCMISConstants; -import org.apache.chemistry.opencmis.client.api.CmisObject; -import org.apache.chemistry.opencmis.client.api.Document; -import org.apache.chemistry.opencmis.client.api.Folder; -import org.apache.chemistry.opencmis.commons.PropertyIds; -import org.junit.Test; - -public class CMISProducerTest extends CMISTestSupport { - - @Produce(uri = "direct:start") - protected ProducerTemplate template; - - @Test - public void storeMessageBodyAsTextDocument() throws Exception { - String content = "Some content to be store"; - Exchange exchange = createExchangeWithInBody(content); - exchange.getIn().getHeaders().put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "text/plain; charset=UTF-8"); - exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.file"); - - template.send(exchange); - - String newNodeId = exchange.getOut().getBody(String.class); - assertNotNull(newNodeId); - - String newNodeContent = getDocumentContentAsString(newNodeId); - assertEquals(content, newNodeContent); - } - - @Test - public void getDocumentMimeTypeFromMessageContentType() throws Exception { - Exchange exchange = createExchangeWithInBody("Some content to be store"); - exchange.getIn().getHeaders().put(Exchange.CONTENT_TYPE, "text/plain"); - exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.file"); - - template.send(exchange); - String newNodeId = exchange.getOut().getBody(String.class); - - CmisObject cmisObject = retrieveCMISObjectByIdFromServer(newNodeId); - Document doc = (Document)cmisObject; - assertEquals("text/plain", doc.getPropertyValue(PropertyIds.CONTENT_STREAM_MIME_TYPE)); - } - - @Test - public void namePropertyIsAlwaysRequired() { - Exchange exchange = createExchangeWithInBody("Some content that will fail to be stored"); - exchange.getIn().getHeaders().put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "text/plain; charset=UTF-8"); - - template.send(exchange); - Exception exception = exchange.getException(); - Object body = exchange.getOut().getBody(); - - assertNull(body); - assertTrue(exception instanceof NoSuchHeaderException); - } - - @Test - public void createDocumentWithoutContentByExplicitlySpecifyingObjectTypeHeader() throws Exception { - Exchange exchange = createExchangeWithInBody(null); - exchange.getIn().getHeaders().put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "text/plain; charset=UTF-8"); - exchange.getIn().getHeaders().put(PropertyIds.OBJECT_TYPE_ID, "cmis:document"); - exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.file"); - - template.send(exchange); - String newNodeId = exchange.getOut().getBody(String.class); - assertNotNull(newNodeId); - - CmisObject cmisObject = retrieveCMISObjectByIdFromServer(newNodeId); - Document doc = (Document)cmisObject; - assertEquals("cmis:document", doc.getPropertyValue(PropertyIds.OBJECT_TYPE_ID)); - } - - @Test - public void emptyBodyAndMissingObjectTypeHeaderCreatesFolderNode() throws Exception { - Exchange exchange = createExchangeWithInBody(null); - exchange.getIn().getHeaders().put(PropertyIds.NAME, "testFolder"); - - template.send(exchange); - String newNodeId = exchange.getOut().getBody(String.class); - assertNotNull(newNodeId); - - CmisObject newNode = retrieveCMISObjectByIdFromServer(newNodeId); - assertEquals("cmis:folder", newNode.getType().getId()); - assertTrue(newNode instanceof Folder); - } - - @Test - public void cmisPropertiesAreStored() throws Exception { - Exchange exchange = createExchangeWithInBody("Some content to be store"); - exchange.getIn().getHeaders().put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "text/plain; charset=UTF-8"); - exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.txt"); - - template.send(exchange); - String newNodeId = exchange.getOut().getBody(String.class); - CmisObject newNode = retrieveCMISObjectByIdFromServer(newNodeId); - - assertEquals("test.txt", newNode.getPropertyValue(PropertyIds.NAME)); - assertEquals("text/plain; charset=UTF-8", - newNode.getPropertyValue(PropertyIds.CONTENT_STREAM_MIME_TYPE)); - } - - @Test(expected = ResolveEndpointFailedException.class) - public void failConnectingToNonExistingRepository() throws Exception { - Endpoint endpoint = context.getEndpoint("cmis://" + CMIS_ENDPOINT_TEST_SERVER - + "?username=admin&password=admin&repositoryId=NON_EXISTING_ID"); - Producer producer = endpoint.createProducer(); - - Exchange exchange = createExchangeWithInBody("Some content to be store"); - exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.txt"); - producer.process(exchange); - } - - @Test - public void createDocumentAtSpecificPath() throws Exception { - Folder folder1 = createFolderWithName("Folder1"); - createChildFolderWithName(folder1, "Folder2"); - String existingFolderStructure = "/Folder1/Folder2"; - - Exchange exchange = createExchangeWithInBody("Some content to be stored"); - exchange.getIn().getHeaders().put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "text/plain; charset=UTF-8"); - exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.file"); - exchange.getIn().getHeaders().put(CamelCMISConstants.CMIS_FOLDER_PATH, existingFolderStructure); - - template.send(exchange); - String newNodeId = exchange.getOut().getBody(String.class); - - Document document = (Document)retrieveCMISObjectByIdFromServer(newNodeId); - String documentFullPath = document.getPaths().get(0); - assertEquals(existingFolderStructure + "/test.file", documentFullPath); - } - - @Test - public void failCreatingFolderAtNonExistingPath() throws Exception { - String existingFolderStructure = "/No/Path/Here"; - - Exchange exchange = createExchangeWithInBody(null); - exchange.getIn().getHeaders().put(PropertyIds.NAME, "folder1"); - exchange.getIn().getHeaders().put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder"); - exchange.getIn().getHeaders().put(CamelCMISConstants.CMIS_FOLDER_PATH, existingFolderStructure); - - template.send(exchange); - assertTrue(exchange.getException() instanceof RuntimeExchangeException); - } - - @Override - protected RouteBuilder createRouteBuilder() throws Exception { - return new RouteBuilder() { - public void configure() { - from("direct:start") - .to("cmis://" + CMIS_ENDPOINT_TEST_SERVER); - } - }; - } - -} http://git-wip-us.apache.org/repos/asf/camel/blob/f336cb31/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISQueryProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISQueryProducerTest.java b/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISQueryProducerTest.java deleted file mode 100644 index d81eca0..0000000 --- a/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISQueryProducerTest.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.componenet.cmis; - -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.util.List; -import java.util.Map; - -import org.apache.camel.Endpoint; -import org.apache.camel.Exchange; -import org.apache.camel.Producer; -import org.apache.chemistry.opencmis.client.api.Folder; -import org.junit.Before; -import org.junit.Test; - -public class CMISQueryProducerTest extends CMISTestSupport { - - @Override - @Before - public void setUp() throws Exception { - super.setUp(); - populateServerWithContent(); - } - - @Test - public void queryServerForDocumentWithSpecificName() throws Exception { - Endpoint endpoint = context.getEndpoint("cmis://" + CMIS_ENDPOINT_TEST_SERVER + "?queryMode=true"); - Producer producer = endpoint.createProducer(); - - Exchange exchange = createExchangeWithInBody( - "SELECT * FROM cmis:document WHERE cmis:name = 'test1.txt'"); - producer.process(exchange); - - @SuppressWarnings("unchecked") - List<Map<String, Object>> documents = exchange.getOut().getBody(List.class); - assertEquals(1, documents.size()); - assertEquals("test1.txt", documents.get(0).get("cmis:name")); - } - - @Test - public void getResultCountFromHeader() throws Exception { - Endpoint endpoint = context.getEndpoint("cmis://" + CMIS_ENDPOINT_TEST_SERVER + "?queryMode=true"); - Producer producer = endpoint.createProducer(); - - Exchange exchange = createExchangeWithInBody( - "SELECT * FROM cmis:document WHERE CONTAINS('Camel test content.')"); - producer.process(exchange); - - @SuppressWarnings("unchecked") - List<Map<String, Object>> documents = exchange.getOut().getBody(List.class); - assertEquals(2, documents.size()); - assertEquals(2, exchange.getOut().getHeader("CamelCMISResultCount")); - } - - @Test - public void limitNumberOfResultsWithReadSizeHeader() throws Exception { - Endpoint endpoint = context.getEndpoint("cmis://" + CMIS_ENDPOINT_TEST_SERVER + "?queryMode=true"); - Producer producer = endpoint.createProducer(); - - Exchange exchange = createExchangeWithInBody( - "SELECT * FROM cmis:document WHERE CONTAINS('Camel test content.')"); - exchange.getIn().getHeaders().put("CamelCMISReadSize", 1); - - producer.process(exchange); - - @SuppressWarnings("unchecked") - List<Map<String, Object>> documents = exchange.getOut().getBody(List.class); - assertEquals(1, documents.size()); - } - - @Test - public void retrieveAlsoDocumentContent() throws Exception { - Endpoint endpoint = context.getEndpoint("cmis://" + CMIS_ENDPOINT_TEST_SERVER + "?queryMode=true"); - Producer producer = endpoint.createProducer(); - - Exchange exchange = createExchangeWithInBody( - "SELECT * FROM cmis:document WHERE cmis:name='test1.txt'"); - exchange.getIn().getHeaders().put("CamelCMISRetrieveContent", true); - - producer.process(exchange); - - @SuppressWarnings("unchecked") - List<Map<String, Object>> documents = exchange.getOut().getBody(List.class); - InputStream content = (InputStream)documents.get(0).get("CamelCMISContent"); - assertEquals("This is the first Camel test content.", readFromStream(content)); - } - - private void populateServerWithContent() throws UnsupportedEncodingException { - Folder newFolder = createFolderWithName("CamelCmisTestFolder"); - createTextDocument(newFolder, "This is the first Camel test content.", "test1.txt"); - createTextDocument(newFolder, "This is the second Camel test content.", "test2.txt"); - } - -} http://git-wip-us.apache.org/repos/asf/camel/blob/f336cb31/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISTestSupport.java ---------------------------------------------------------------------- diff --git a/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISTestSupport.java b/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISTestSupport.java deleted file mode 100644 index 138f219..0000000 --- a/components/camel-cmis/src/test/java/org/apache/camel/componenet/cmis/CMISTestSupport.java +++ /dev/null @@ -1,163 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.componenet.cmis; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.camel.Exchange; -import org.apache.camel.impl.DefaultExchange; -import org.apache.camel.test.junit4.CamelTestSupport; -import org.apache.chemistry.opencmis.client.api.CmisObject; -import org.apache.chemistry.opencmis.client.api.Document; -import org.apache.chemistry.opencmis.client.api.Folder; -import org.apache.chemistry.opencmis.client.api.ItemIterable; -import org.apache.chemistry.opencmis.client.api.Repository; -import org.apache.chemistry.opencmis.client.api.Session; -import org.apache.chemistry.opencmis.client.api.SessionFactory; -import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl; -import org.apache.chemistry.opencmis.commons.PropertyIds; -import org.apache.chemistry.opencmis.commons.SessionParameter; -import org.apache.chemistry.opencmis.commons.data.ContentStream; -import org.apache.chemistry.opencmis.commons.enums.BindingType; -import org.apache.chemistry.opencmis.commons.enums.UnfileObject; -import org.apache.chemistry.opencmis.commons.enums.VersioningState; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.webapp.WebAppContext; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; - -public class CMISTestSupport extends CamelTestSupport { - protected static final String CMIS_ENDPOINT_TEST_SERVER - = "http://localhost:9090/chemistry-opencmis-server-inmemory/atom"; - protected static final String OPEN_CMIS_SERVER_WAR_PATH - = "target/dependency/chemistry-opencmis-server-inmemory-0.8.0.war"; - - protected static Server cmisServer; - - protected Exchange createExchangeWithInBody(String body) { - DefaultExchange exchange = new DefaultExchange(context); - if (body != null) { - exchange.getIn().setBody(body); - } - return exchange; - } - - protected CmisObject retrieveCMISObjectByIdFromServer(String nodeId) throws Exception { - Session session = createSession(); - return session.getObject(nodeId); - } - - protected void deleteAllContent() { - Session session = createSession(); - Folder rootFolder = session.getRootFolder(); - ItemIterable<CmisObject> children = rootFolder.getChildren(); - for (CmisObject cmisObject : children) { - if ("cmis:folder".equals(cmisObject.getPropertyValue(PropertyIds.OBJECT_TYPE_ID))) { - List<String> notDeltedIdList = ((Folder)cmisObject) - .deleteTree(true, UnfileObject.DELETE, true); - if (notDeltedIdList != null && notDeltedIdList.size() > 0) { - throw new RuntimeException("Cannot empty repo"); - } - } else { - cmisObject.delete(true); - } - } - session.getBinding().close(); - } - - protected Session createSession() { - SessionFactory sessionFactory = SessionFactoryImpl.newInstance(); - Map<String, String> parameter = new HashMap<String, String>(); - parameter.put(SessionParameter.ATOMPUB_URL, CMIS_ENDPOINT_TEST_SERVER); - parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); - - Repository repository = sessionFactory.getRepositories(parameter).get(0); - return repository.createSession(); - } - - protected String getDocumentContentAsString(String nodeId) throws Exception { - CmisObject cmisObject = retrieveCMISObjectByIdFromServer(nodeId); - Document doc = (Document)cmisObject; - InputStream inputStream = doc.getContentStream().getStream(); - return readFromStream(inputStream); - } - - protected String readFromStream(InputStream in) throws Exception { - StringBuilder result = new StringBuilder(); - BufferedReader br = new BufferedReader(new InputStreamReader(in)); - - String strLine; - while ((strLine = br.readLine()) != null) { - result.append(strLine); - } - in.close(); - return result.toString(); - } - - protected Folder createFolderWithName(String folderName) { - Folder rootFolder = createSession().getRootFolder(); - return createChildFolderWithName(rootFolder, folderName); - } - - protected Folder createChildFolderWithName(Folder parent, String childName) { - Map<String, String> newFolderProps = new HashMap<String, String>(); - newFolderProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder"); - newFolderProps.put(PropertyIds.NAME, childName); - return parent.createFolder(newFolderProps); - } - - protected void createTextDocument(Folder newFolder, String content, String fileName) - throws UnsupportedEncodingException { - byte[] buf = content.getBytes("UTF-8"); - ByteArrayInputStream input = new ByteArrayInputStream(buf); - ContentStream contentStream = createSession().getObjectFactory() - .createContentStream(fileName, buf.length, "text/plain; charset=UTF-8", input); - - Map<String, Object> properties = new HashMap<String, Object>(); - properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document"); - properties.put(PropertyIds.NAME, fileName); - newFolder.createDocument(properties, contentStream, VersioningState.NONE); - } - - @BeforeClass - public static void startServer() throws Exception { - cmisServer = new Server(9090); - cmisServer.setHandler(new WebAppContext(OPEN_CMIS_SERVER_WAR_PATH, "/chemistry-opencmis-server-inmemory")); - cmisServer.start(); - } - - @AfterClass - public static void stopServer() throws Exception { - cmisServer.stop(); - } - - @Override - @Before - public void setUp() throws Exception { - deleteAllContent(); - super.setUp(); - } - -} http://git-wip-us.apache.org/repos/asf/camel/blob/f336cb31/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISConsumerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISConsumerTest.java b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISConsumerTest.java new file mode 100644 index 0000000..007822a --- /dev/null +++ b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISConsumerTest.java @@ -0,0 +1,104 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.cmis; + +import java.io.UnsupportedEncodingException; +import java.util.List; + +import org.apache.camel.Consumer; +import org.apache.camel.Endpoint; +import org.apache.camel.EndpointInject; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.chemistry.opencmis.client.api.Folder; +import org.junit.Before; +import org.junit.Test; + +public class CMISConsumerTest extends CMISTestSupport { + + @EndpointInject(uri = "mock:result") + protected MockEndpoint resultEndpoint; + + @Test + public void getAllContentFromServerOrderedFromRootToLeaves() throws Exception { + resultEndpoint.expectedMessageCount(5); + + Consumer treeBasedConsumer = createConsumerFor(CMIS_ENDPOINT_TEST_SERVER); + treeBasedConsumer.start(); + + resultEndpoint.assertIsSatisfied(); + treeBasedConsumer.stop(); + + List<Exchange> exchanges = resultEndpoint.getExchanges(); + assertTrue(getNodeNameForIndex(exchanges, 0).equals("RootFolder")); + assertTrue(getNodeNameForIndex(exchanges, 1).equals("Folder1")); + assertTrue(getNodeNameForIndex(exchanges, 2).equals("Folder2")); + assertTrue(getNodeNameForIndex(exchanges, 3).contains(".txt")); + assertTrue(getNodeNameForIndex(exchanges, 4).contains(".txt")); + } + + @Test + public void consumeDocumentsWithQuery() throws Exception { + resultEndpoint.expectedMessageCount(2); + + Consumer queryBasedConsumer = createConsumerFor( + CMIS_ENDPOINT_TEST_SERVER + "?query=SELECT * FROM cmis:document"); + queryBasedConsumer.start(); + resultEndpoint.assertIsSatisfied(); + queryBasedConsumer.stop(); + } + + private Consumer createConsumerFor(String path) throws Exception { + Endpoint endpoint = context.getEndpoint("cmis://" + path); + return endpoint.createConsumer(new Processor() { + public void process(Exchange exchange) throws Exception { + template.send("mock:result", exchange); + } + }); + } + + private String getNodeNameForIndex(List<Exchange> exchanges, int index) { + return exchanges.get(index).getIn().getHeader("cmis:name", String.class); + } + + private void populateRepositoryRootFolderWithTwoFoldersAndTwoDocuments() + throws UnsupportedEncodingException { + Folder folder1 = createFolderWithName("Folder1"); + Folder folder2 = createChildFolderWithName(folder1, "Folder2"); + createTextDocument(folder2, "Document2.1", "2.1.txt"); + createTextDocument(folder2, "Document2.2", "2.2.txt"); + //L0 ROOT + // | + //L1 Folder1 + //L2 |_____Folder2 + // || + //L3 Doc2.1___||___Doc2.2 + } + + @Override + public boolean isUseRouteBuilder() { + return false; + } + + @Override + @Before + public void setUp() throws Exception { + super.setUp(); + populateRepositoryRootFolderWithTwoFoldersAndTwoDocuments(); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/f336cb31/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java new file mode 100644 index 0000000..b8d5d78 --- /dev/null +++ b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java @@ -0,0 +1,180 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.cmis; + +import org.apache.camel.Endpoint; +import org.apache.camel.Exchange; +import org.apache.camel.NoSuchHeaderException; +import org.apache.camel.Produce; +import org.apache.camel.Producer; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.ResolveEndpointFailedException; +import org.apache.camel.RuntimeExchangeException; +import org.apache.camel.builder.RouteBuilder; +import org.apache.chemistry.opencmis.client.api.CmisObject; +import org.apache.chemistry.opencmis.client.api.Document; +import org.apache.chemistry.opencmis.client.api.Folder; +import org.apache.chemistry.opencmis.commons.PropertyIds; +import org.junit.Test; + +public class CMISProducerTest extends CMISTestSupport { + + @Produce(uri = "direct:start") + protected ProducerTemplate template; + + @Test + public void storeMessageBodyAsTextDocument() throws Exception { + String content = "Some content to be store"; + Exchange exchange = createExchangeWithInBody(content); + exchange.getIn().getHeaders().put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "text/plain; charset=UTF-8"); + exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.file"); + + template.send(exchange); + + String newNodeId = exchange.getOut().getBody(String.class); + assertNotNull(newNodeId); + + String newNodeContent = getDocumentContentAsString(newNodeId); + assertEquals(content, newNodeContent); + } + + @Test + public void getDocumentMimeTypeFromMessageContentType() throws Exception { + Exchange exchange = createExchangeWithInBody("Some content to be store"); + exchange.getIn().getHeaders().put(Exchange.CONTENT_TYPE, "text/plain"); + exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.file"); + + template.send(exchange); + String newNodeId = exchange.getOut().getBody(String.class); + + CmisObject cmisObject = retrieveCMISObjectByIdFromServer(newNodeId); + Document doc = (Document)cmisObject; + assertEquals("text/plain", doc.getPropertyValue(PropertyIds.CONTENT_STREAM_MIME_TYPE)); + } + + @Test + public void namePropertyIsAlwaysRequired() { + Exchange exchange = createExchangeWithInBody("Some content that will fail to be stored"); + exchange.getIn().getHeaders().put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "text/plain; charset=UTF-8"); + + template.send(exchange); + Exception exception = exchange.getException(); + Object body = exchange.getOut().getBody(); + + assertNull(body); + assertTrue(exception instanceof NoSuchHeaderException); + } + + @Test + public void createDocumentWithoutContentByExplicitlySpecifyingObjectTypeHeader() throws Exception { + Exchange exchange = createExchangeWithInBody(null); + exchange.getIn().getHeaders().put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "text/plain; charset=UTF-8"); + exchange.getIn().getHeaders().put(PropertyIds.OBJECT_TYPE_ID, "cmis:document"); + exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.file"); + + template.send(exchange); + String newNodeId = exchange.getOut().getBody(String.class); + assertNotNull(newNodeId); + + CmisObject cmisObject = retrieveCMISObjectByIdFromServer(newNodeId); + Document doc = (Document)cmisObject; + assertEquals("cmis:document", doc.getPropertyValue(PropertyIds.OBJECT_TYPE_ID)); + } + + @Test + public void emptyBodyAndMissingObjectTypeHeaderCreatesFolderNode() throws Exception { + Exchange exchange = createExchangeWithInBody(null); + exchange.getIn().getHeaders().put(PropertyIds.NAME, "testFolder"); + + template.send(exchange); + String newNodeId = exchange.getOut().getBody(String.class); + assertNotNull(newNodeId); + + CmisObject newNode = retrieveCMISObjectByIdFromServer(newNodeId); + assertEquals("cmis:folder", newNode.getType().getId()); + assertTrue(newNode instanceof Folder); + } + + @Test + public void cmisPropertiesAreStored() throws Exception { + Exchange exchange = createExchangeWithInBody("Some content to be store"); + exchange.getIn().getHeaders().put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "text/plain; charset=UTF-8"); + exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.txt"); + + template.send(exchange); + String newNodeId = exchange.getOut().getBody(String.class); + CmisObject newNode = retrieveCMISObjectByIdFromServer(newNodeId); + + assertEquals("test.txt", newNode.getPropertyValue(PropertyIds.NAME)); + assertEquals("text/plain; charset=UTF-8", + newNode.getPropertyValue(PropertyIds.CONTENT_STREAM_MIME_TYPE)); + } + + @Test(expected = ResolveEndpointFailedException.class) + public void failConnectingToNonExistingRepository() throws Exception { + Endpoint endpoint = context.getEndpoint("cmis://" + CMIS_ENDPOINT_TEST_SERVER + + "?username=admin&password=admin&repositoryId=NON_EXISTING_ID"); + Producer producer = endpoint.createProducer(); + + Exchange exchange = createExchangeWithInBody("Some content to be store"); + exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.txt"); + producer.process(exchange); + } + + @Test + public void createDocumentAtSpecificPath() throws Exception { + Folder folder1 = createFolderWithName("Folder1"); + createChildFolderWithName(folder1, "Folder2"); + String existingFolderStructure = "/Folder1/Folder2"; + + Exchange exchange = createExchangeWithInBody("Some content to be stored"); + exchange.getIn().getHeaders().put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "text/plain; charset=UTF-8"); + exchange.getIn().getHeaders().put(PropertyIds.NAME, "test.file"); + exchange.getIn().getHeaders().put(CamelCMISConstants.CMIS_FOLDER_PATH, existingFolderStructure); + + template.send(exchange); + String newNodeId = exchange.getOut().getBody(String.class); + + Document document = (Document)retrieveCMISObjectByIdFromServer(newNodeId); + String documentFullPath = document.getPaths().get(0); + assertEquals(existingFolderStructure + "/test.file", documentFullPath); + } + + @Test + public void failCreatingFolderAtNonExistingPath() throws Exception { + String existingFolderStructure = "/No/Path/Here"; + + Exchange exchange = createExchangeWithInBody(null); + exchange.getIn().getHeaders().put(PropertyIds.NAME, "folder1"); + exchange.getIn().getHeaders().put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder"); + exchange.getIn().getHeaders().put(CamelCMISConstants.CMIS_FOLDER_PATH, existingFolderStructure); + + template.send(exchange); + assertTrue(exchange.getException() instanceof RuntimeExchangeException); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() { + from("direct:start") + .to("cmis://" + CMIS_ENDPOINT_TEST_SERVER); + } + }; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/f336cb31/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISQueryProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISQueryProducerTest.java b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISQueryProducerTest.java new file mode 100644 index 0000000..db6af6a --- /dev/null +++ b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISQueryProducerTest.java @@ -0,0 +1,109 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.cmis; + +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.util.List; +import java.util.Map; + +import org.apache.camel.Endpoint; +import org.apache.camel.Exchange; +import org.apache.camel.Producer; +import org.apache.chemistry.opencmis.client.api.Folder; +import org.junit.Before; +import org.junit.Test; + +public class CMISQueryProducerTest extends CMISTestSupport { + + @Override + @Before + public void setUp() throws Exception { + super.setUp(); + populateServerWithContent(); + } + + @Test + public void queryServerForDocumentWithSpecificName() throws Exception { + Endpoint endpoint = context.getEndpoint("cmis://" + CMIS_ENDPOINT_TEST_SERVER + "?queryMode=true"); + Producer producer = endpoint.createProducer(); + + Exchange exchange = createExchangeWithInBody( + "SELECT * FROM cmis:document WHERE cmis:name = 'test1.txt'"); + producer.process(exchange); + + @SuppressWarnings("unchecked") + List<Map<String, Object>> documents = exchange.getOut().getBody(List.class); + assertEquals(1, documents.size()); + assertEquals("test1.txt", documents.get(0).get("cmis:name")); + } + + @Test + public void getResultCountFromHeader() throws Exception { + Endpoint endpoint = context.getEndpoint("cmis://" + CMIS_ENDPOINT_TEST_SERVER + "?queryMode=true"); + Producer producer = endpoint.createProducer(); + + Exchange exchange = createExchangeWithInBody( + "SELECT * FROM cmis:document WHERE CONTAINS('Camel test content.')"); + producer.process(exchange); + + @SuppressWarnings("unchecked") + List<Map<String, Object>> documents = exchange.getOut().getBody(List.class); + assertEquals(2, documents.size()); + assertEquals(2, exchange.getOut().getHeader("CamelCMISResultCount")); + } + + @Test + public void limitNumberOfResultsWithReadSizeHeader() throws Exception { + Endpoint endpoint = context.getEndpoint("cmis://" + CMIS_ENDPOINT_TEST_SERVER + "?queryMode=true"); + Producer producer = endpoint.createProducer(); + + Exchange exchange = createExchangeWithInBody( + "SELECT * FROM cmis:document WHERE CONTAINS('Camel test content.')"); + exchange.getIn().getHeaders().put("CamelCMISReadSize", 1); + + producer.process(exchange); + + @SuppressWarnings("unchecked") + List<Map<String, Object>> documents = exchange.getOut().getBody(List.class); + assertEquals(1, documents.size()); + } + + @Test + public void retrieveAlsoDocumentContent() throws Exception { + Endpoint endpoint = context.getEndpoint("cmis://" + CMIS_ENDPOINT_TEST_SERVER + "?queryMode=true"); + Producer producer = endpoint.createProducer(); + + Exchange exchange = createExchangeWithInBody( + "SELECT * FROM cmis:document WHERE cmis:name='test1.txt'"); + exchange.getIn().getHeaders().put("CamelCMISRetrieveContent", true); + + producer.process(exchange); + + @SuppressWarnings("unchecked") + List<Map<String, Object>> documents = exchange.getOut().getBody(List.class); + InputStream content = (InputStream)documents.get(0).get("CamelCMISContent"); + assertEquals("This is the first Camel test content.", readFromStream(content)); + } + + private void populateServerWithContent() throws UnsupportedEncodingException { + Folder newFolder = createFolderWithName("CamelCmisTestFolder"); + createTextDocument(newFolder, "This is the first Camel test content.", "test1.txt"); + createTextDocument(newFolder, "This is the second Camel test content.", "test2.txt"); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/f336cb31/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISTestSupport.java ---------------------------------------------------------------------- diff --git a/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISTestSupport.java b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISTestSupport.java new file mode 100644 index 0000000..a466a01 --- /dev/null +++ b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISTestSupport.java @@ -0,0 +1,163 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.cmis; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.camel.Exchange; +import org.apache.camel.impl.DefaultExchange; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.apache.chemistry.opencmis.client.api.CmisObject; +import org.apache.chemistry.opencmis.client.api.Document; +import org.apache.chemistry.opencmis.client.api.Folder; +import org.apache.chemistry.opencmis.client.api.ItemIterable; +import org.apache.chemistry.opencmis.client.api.Repository; +import org.apache.chemistry.opencmis.client.api.Session; +import org.apache.chemistry.opencmis.client.api.SessionFactory; +import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl; +import org.apache.chemistry.opencmis.commons.PropertyIds; +import org.apache.chemistry.opencmis.commons.SessionParameter; +import org.apache.chemistry.opencmis.commons.data.ContentStream; +import org.apache.chemistry.opencmis.commons.enums.BindingType; +import org.apache.chemistry.opencmis.commons.enums.UnfileObject; +import org.apache.chemistry.opencmis.commons.enums.VersioningState; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.webapp.WebAppContext; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; + +public class CMISTestSupport extends CamelTestSupport { + protected static final String CMIS_ENDPOINT_TEST_SERVER + = "http://localhost:9090/chemistry-opencmis-server-inmemory/atom"; + protected static final String OPEN_CMIS_SERVER_WAR_PATH + = "target/dependency/chemistry-opencmis-server-inmemory-0.8.0.war"; + + protected static Server cmisServer; + + protected Exchange createExchangeWithInBody(String body) { + DefaultExchange exchange = new DefaultExchange(context); + if (body != null) { + exchange.getIn().setBody(body); + } + return exchange; + } + + protected CmisObject retrieveCMISObjectByIdFromServer(String nodeId) throws Exception { + Session session = createSession(); + return session.getObject(nodeId); + } + + protected void deleteAllContent() { + Session session = createSession(); + Folder rootFolder = session.getRootFolder(); + ItemIterable<CmisObject> children = rootFolder.getChildren(); + for (CmisObject cmisObject : children) { + if ("cmis:folder".equals(cmisObject.getPropertyValue(PropertyIds.OBJECT_TYPE_ID))) { + List<String> notDeltedIdList = ((Folder)cmisObject) + .deleteTree(true, UnfileObject.DELETE, true); + if (notDeltedIdList != null && notDeltedIdList.size() > 0) { + throw new RuntimeException("Cannot empty repo"); + } + } else { + cmisObject.delete(true); + } + } + session.getBinding().close(); + } + + protected Session createSession() { + SessionFactory sessionFactory = SessionFactoryImpl.newInstance(); + Map<String, String> parameter = new HashMap<String, String>(); + parameter.put(SessionParameter.ATOMPUB_URL, CMIS_ENDPOINT_TEST_SERVER); + parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); + + Repository repository = sessionFactory.getRepositories(parameter).get(0); + return repository.createSession(); + } + + protected String getDocumentContentAsString(String nodeId) throws Exception { + CmisObject cmisObject = retrieveCMISObjectByIdFromServer(nodeId); + Document doc = (Document)cmisObject; + InputStream inputStream = doc.getContentStream().getStream(); + return readFromStream(inputStream); + } + + protected String readFromStream(InputStream in) throws Exception { + StringBuilder result = new StringBuilder(); + BufferedReader br = new BufferedReader(new InputStreamReader(in)); + + String strLine; + while ((strLine = br.readLine()) != null) { + result.append(strLine); + } + in.close(); + return result.toString(); + } + + protected Folder createFolderWithName(String folderName) { + Folder rootFolder = createSession().getRootFolder(); + return createChildFolderWithName(rootFolder, folderName); + } + + protected Folder createChildFolderWithName(Folder parent, String childName) { + Map<String, String> newFolderProps = new HashMap<String, String>(); + newFolderProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder"); + newFolderProps.put(PropertyIds.NAME, childName); + return parent.createFolder(newFolderProps); + } + + protected void createTextDocument(Folder newFolder, String content, String fileName) + throws UnsupportedEncodingException { + byte[] buf = content.getBytes("UTF-8"); + ByteArrayInputStream input = new ByteArrayInputStream(buf); + ContentStream contentStream = createSession().getObjectFactory() + .createContentStream(fileName, buf.length, "text/plain; charset=UTF-8", input); + + Map<String, Object> properties = new HashMap<String, Object>(); + properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document"); + properties.put(PropertyIds.NAME, fileName); + newFolder.createDocument(properties, contentStream, VersioningState.NONE); + } + + @BeforeClass + public static void startServer() throws Exception { + cmisServer = new Server(9090); + cmisServer.setHandler(new WebAppContext(OPEN_CMIS_SERVER_WAR_PATH, "/chemistry-opencmis-server-inmemory")); + cmisServer.start(); + } + + @AfterClass + public static void stopServer() throws Exception { + cmisServer.stop(); + } + + @Override + @Before + public void setUp() throws Exception { + deleteAllContent(); + super.setUp(); + } + +}