Added: manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editConfiguration_conf_server.html URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editConfiguration_conf_server.html?rev=1695542&view=auto ============================================================================== --- manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editConfiguration_conf_server.html (added) +++ manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editConfiguration_conf_server.html Wed Aug 12 14:45:43 2015 @@ -0,0 +1,83 @@ + +#if($TABNAME == $ResourceBundle.getString('ConfluenceRepositoryConnector.Server')) + +<table class="displaytable"> + <tr><td class="separator" colspan="2"><hr/></td></tr> + + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.ProtocolColon'))</nobr> + </td> + <td class="value"> + <select size="2" name="confluence_protocol"/> +#if($CONFLUENCE_PROTOCOL == 'http') + <option value="http" selected="true">http</option> +#else + <option value="http">http</option> +#end +#if($CONFLUENCE_PROTOCOL == 'https') + <option value="https" selected="true">https</option> +#else + <option value="https">https</option> +#end + </select> + </td> + </tr> + + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.HostColon'))</nobr> + </td> + <td class="value"> + <input size="32" type="text" id="confluence_host" name="confluence_host" value="$Encoder.attributeEscape($CONFLUENCE_HOST)" /> + </td> + </tr> + + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PortColon'))</nobr> + </td> + <td class="value"> + <input size="5" type="text" id="confluence_port" name="confluence_port" value="$Encoder.attributeEscape($CONFLUENCE_PORT)" /> + </td> + </tr> + + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PathColon'))</nobr> + </td> + <td class="value"> + <input size="32" type="text" id="confluence_path" name="confluence_path" value="$Encoder.attributeEscape($CONFLUENCE_PATH)" /> + </td> + </tr> + + <tr><td class="separator" colspan="2"><hr/></td></tr> + + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.UsernameColon'))</nobr> + </td> + <td class="value"> + <input size="16" type="text" id="confluence_username" name="confluence_username" value="$Encoder.attributeEscape($CONFLUENCE_USERNAME)" /> + </td> + </tr> + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PasswordColon'))</nobr> + </td> + <td class="value"> + <input size="16" type="password" id="confluence_password" name="confluence_password" value="$Encoder.attributeEscape($CONFLUENCE_PASSWORD)" /> + </td> + </tr> +</table> + +#else + +<input type="hidden" name="confluence_protocol" value="$Encoder.attributeEscape($CONFLUENCE_PROTOCOL)" /> +<input type="hidden" name="confluence_host" value="$Encoder.attributeEscape($CONFLUENCE_HOST)" /> +<input type="hidden" name="confluence_port" value="$Encoder.attributeEscape($CONFLUENCE_PORT)" /> +<input type="hidden" name="confluence_path" value="$Encoder.attributeEscape($CONFLUENCE_PATH)" /> +<input type="hidden" name="confluence_username" value="$Encoder.attributeEscape($CONFLUENCE_USERNAME)" /> +<input type="hidden" name="confluence_password" value="$Encoder.attributeEscape($CONFLUENCE_PASSWORD)" /> + +#end
Added: manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_conf.js URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_conf.js?rev=1695542&view=auto ============================================================================== --- manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_conf.js (added) +++ manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_conf.js Wed Aug 12 14:45:43 2015 @@ -0,0 +1,32 @@ +<script type="text/javascript"> +<!-- +function checkSpecificationForSave() +{ + return true; +} + +function s${SeqNum}_SpecOp(n, opValue, anchorvalue) +{ + eval("editjob."+n+".value = \""+opValue+"\""); + postFormSetAnchor(anchorvalue); +} + +function s${SeqNum}_SpecDeleteSpace(i) +{ + s${SeqNum}_SpecOp("s${SeqNum}_spaceop_"+i,"Delete","space_"+i); +} + +function s${SeqNum}_SpecAddSpace(i) +{ + var x = i-1; + if (editjob["s${SeqNum}_space"].value == "") + { + alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.TypeInASpace'))"); + editjob.s${SeqNum}_space.focus(); + return; + } + s${SeqNum}_SpecOp("s${SeqNum}_spaceop","Add","space_"+i); +} + +//--> +</script> \ No newline at end of file Added: manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confPages.html URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confPages.html?rev=1695542&view=auto ============================================================================== --- manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confPages.html (added) +++ manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confPages.html Wed Aug 12 14:45:43 2015 @@ -0,0 +1,26 @@ + + +#if($TabName == $ResourceBundle.getString('ConfluenceRepositoryConnector.Pages') && ${SeqNum} == ${SelectedNum}) + +<table class="displaytable"> + <tr><td class="separator" colspan="2"><hr/></td></tr> + + <tr> + <td class="description" colspan="2"> + $Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.ProcessAttachments')) + </td> + + <td class="value"> + <input type="checkbox" name="s${SeqNum}_process_attachments" value="true" + #if($PROCESS_ATTACHMENTS) checked + #end + /> + </td> + </tr> +</table> + +#else + +<input type="hidden" name="s${SeqNum}_process_attachments" value="$PROCESS_ATTACHMENTS"/> + +#end Added: manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confSpaces.html URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confSpaces.html?rev=1695542&view=auto ============================================================================== --- manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confSpaces.html (added) +++ manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confSpaces.html Wed Aug 12 14:45:43 2015 @@ -0,0 +1,61 @@ + + +#if($TabName == $ResourceBundle.getString('ConfluenceRepositoryConnector.Spaces') && ${SeqNum} == ${SelectedNum}) + +<table class="displaytable"> + <tr><td class="separator" colspan="2"><hr/></td></tr> + + + <tr><td class="separator" colspan="2"><hr/></td></tr> + + #set($spacecounter = 0) + #foreach($space in $SPACES) + + <tr> + <td class="description"> + <input type="hidden" name="s${SeqNum}_spaceop_$spacecounter" value=""/> + <input type="hidden" name="s${SeqNum}_space_$spacecounter" value="$Encoder.attributeEscape($space)"/> + <a name="s${SeqNum}_tokenspace_$spacecounter"> + <input type="button" value="$Encoder.attributeEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.Delete'))" onClick='Javascript:s${SeqNum}_SpecDeleteSpace($spacecounter)' alt="$Encoder.attributeEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.DeleteSpace'))$spacecounter"/> + </a> + </td> + <td class="value">$Encoder.bodyEscape($space)</td> + </tr> + + #set($spacecounter = $spacecounter + 1) + #end + + #set($nextspace = $spacecounter + 1) + + #if($spacecounter == 0) + <tr> + <td class="message" colspan="2">$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.NoSpacesConfigured'))</td> + </tr> + #end + + <tr><td class="lightseparator" colspan="2"><hr/></td></tr> + + <tr> + <td class="description"> + <input type="hidden" name="s${SeqNum}_spacescount" value="$spacecounter"/> + <input type="hidden" name="s${SeqNum}_spaceop" value=""/> + <a name="space_$spacecounter"> + <input type="button" value="$Encoder.attributeEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.Add'))" onClick='Javascript:s${SeqNum}_SpecAddSpace($nextspace)' alt="$Encoder.attributeEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.AddSpace'))"/> + </a> + </td> + <td class="value"> + <input type="text" size="30" name="s${SeqNum}_space" value=""/> + </td> + </tr> +</table> + +#else + + #set($spacecounter = 0) + #foreach($space in $SPACES) +<input type="hidden" name="s${SeqNum}_space_$spacecounter" value="$Encoder.attributeEscape($space)"/> + #set($space = $space + 1) + #end +<input type="hidden" name="s${SeqNum}_spacescount" value="$spacecounter"/> + +#end Added: manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewConfiguration_conf.html URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewConfiguration_conf.html?rev=1695542&view=auto ============================================================================== --- manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewConfiguration_conf.html (added) +++ manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewConfiguration_conf.html Wed Aug 12 14:45:43 2015 @@ -0,0 +1,62 @@ + + +<table class="displaytable"> + + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.ProtocolColon'))</nobr> + </td> + <td class="value"> + <nobr>$Encoder.bodyEscape($CONFLUENCE_PROTOCOL)</nobr> + </td> + </tr> + + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.HostColon'))</nobr> + </td> + <td class="value"> + <nobr>$Encoder.bodyEscape($CONFLUENCE_HOST)</nobr> + </td> + </tr> + + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PortColon'))</nobr> + </td> + <td class="value"> + <nobr>$Encoder.bodyEscape($CONFLUENCE_PORT)</nobr> + </td> + </tr> + + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PathColon'))</nobr> + </td> + <td class="value"> + <nobr>$Encoder.bodyEscape($CONFLUENCE_PATH)</nobr> + </td> + </tr> + + <tr><td class="separator" colspan="2"><hr/></td></tr> + + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.UsernameColon'))</nobr> + </td> + <td class="value"> + <nobr>$Encoder.bodyEscape($CONFLUENCE_USERNAME)</nobr> + </td> + </tr> + + <tr> + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PasswordColon'))</nobr> + </td> + <td class="value"> + <nobr>********</nobr> + </td> + </tr> + +</table> + Added: manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewSpecification_conf.html URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewSpecification_conf.html?rev=1695542&view=auto ============================================================================== --- manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewSpecification_conf.html (added) +++ manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewSpecification_conf.html Wed Aug 12 14:45:43 2015 @@ -0,0 +1,29 @@ +<table class="displaytable"> + <tr> +#if($SPACES.size() == 0) + <td class="message" colspan="2"> + $Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.NoSpacesConfigured')) + </td> +#else + <td class="description"> + <nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.Spaces'))</nobr> + </td> + <td class="value"> + #set($spacecounter = 0) + #foreach($space in $SPACES) + <nobr>$Encoder.bodyEscape($space)</nobr><br/> + #set($spacecounter = $spacecounter + 1) + #end + </td> +#end + </tr> + + <tr> + <td class="message" colspan="2"> + $Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.ProcessAttachments')) + </td> + <td class="description"> + <nobr>$PROCESS_ATTACHMENTS</nobr> + </td> + </tr> +</table> \ No newline at end of file Added: manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/authorities/confluence/tests/ConfluenceAuthorityTest.java URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/authorities/confluence/tests/ConfluenceAuthorityTest.java?rev=1695542&view=auto ============================================================================== --- manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/authorities/confluence/tests/ConfluenceAuthorityTest.java (added) +++ manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/authorities/confluence/tests/ConfluenceAuthorityTest.java Wed Aug 12 14:45:43 2015 @@ -0,0 +1,70 @@ +package org.apache.manifoldcf.authorities.confluence.tests; + +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; + +import junit.framework.Assert; + +import org.apache.manifoldcf.authorities.authorities.confluence.ConfluenceAuthorityConnector; +import org.apache.manifoldcf.authorities.interfaces.AuthorizationResponse; +import org.apache.manifoldcf.authorities.interfaces.IAuthorityConnector; +import org.apache.manifoldcf.crawler.connectors.confluence.client.ConfluenceClient; +import org.apache.manifoldcf.crawler.connectors.confluence.model.ConfluenceUser; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class ConfluenceAuthorityTest { + + @Mock + private ConfluenceClient client; + + private ConfluenceAuthorityConnector connector; + + @Before + public void setup() throws Exception{ + connector = new ConfluenceAuthorityConnector(); + connector.setConfluenceClient(client); + } + + @Test + public void checkMockInjection() throws Exception{ + when(client.checkAuth()).thenReturn(true); + Assert.assertEquals(connector.check(), "Connection working"); + } + + @Test + public void checkUserNotFound() throws Exception{ + ConfluenceUser user = mock(ConfluenceUser.class); + when(user.getUsername()).thenReturn(null); + when(client.getUserAuthorities(anyString())).thenReturn(user); + AuthorizationResponse response = connector.getAuthorizationResponse(anyString()); + String[] tokens = response.getAccessTokens(); + Assert.assertEquals(tokens.length, 1); + Assert.assertEquals(tokens[0], IAuthorityConnector.GLOBAL_DENY_TOKEN); + Assert.assertEquals(response.getResponseStatus(), AuthorizationResponse.RESPONSE_USERNOTFOUND); + } + + @Test + public void checkUserFound() throws Exception{ + ConfluenceUser user = mock(ConfluenceUser.class); + when(user.getUsername()).thenReturn("A"); + List<String> tokens = new ArrayList<String>(); + tokens.add("B"); + when(user.getAuthorities()).thenReturn(tokens); + when(client.getUserAuthorities(anyString())).thenReturn(user); + AuthorizationResponse response = connector.getAuthorizationResponse(anyString()); + String[] tokens_aux = response.getAccessTokens(); + Assert.assertEquals(tokens_aux.length, 1); + Assert.assertEquals(tokens_aux[0], tokens.get(0)); + Assert.assertEquals(response.getResponseStatus(), AuthorizationResponse.RESPONSE_OK); + } + +} Added: manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/confluence/tests/ConfluenceConnectorTest.java URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/confluence/tests/ConfluenceConnectorTest.java?rev=1695542&view=auto ============================================================================== --- manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/confluence/tests/ConfluenceConnectorTest.java (added) +++ manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/confluence/tests/ConfluenceConnectorTest.java Wed Aug 12 14:45:43 2015 @@ -0,0 +1,195 @@ +package org.apache.manifoldcf.crawler.connectors.confluence.tests; + +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.nio.charset.StandardCharsets; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.manifoldcf.agents.interfaces.RepositoryDocument; +import org.apache.manifoldcf.core.interfaces.Specification; +import org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnector; +import org.apache.manifoldcf.crawler.connectors.confluence.ConfluenceRepositoryConnector; +import org.apache.manifoldcf.crawler.connectors.confluence.client.ConfluenceClient; +import org.apache.manifoldcf.crawler.connectors.confluence.model.ConfluenceResponse; +import org.apache.manifoldcf.crawler.connectors.confluence.model.Page; +import org.apache.manifoldcf.crawler.interfaces.IExistingVersions; +import org.apache.manifoldcf.crawler.interfaces.IProcessActivity; +import org.apache.manifoldcf.crawler.system.SeedingActivity; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; + +import com.google.common.base.Optional; + +@RunWith(MockitoJUnitRunner.class) +public class ConfluenceConnectorTest { + + @Mock + private ConfluenceClient client; + + private ConfluenceRepositoryConnector connector; + + @SuppressWarnings("unchecked") + @Before + public void setup() throws Exception{ + connector = new ConfluenceRepositoryConnector(); + connector.setConfluenceClient(client); + when(client.getPages(anyInt(), anyInt(), Mockito.any(Optional.class))). + thenReturn(new ConfluenceResponse<Page>(Collections.<Page>emptyList(), 0, 0, true)); + } + + @SuppressWarnings("unchecked") + @Test + public void mockEmptySeeding() throws Exception { + + SeedingActivity activities = mock(SeedingActivity.class); + Specification spec = new Specification(); + long seedTime = 0; + + connector.addSeedDocuments(activities, spec, "", seedTime, BaseRepositoryConnector.JOBMODE_ONCEONLY); + // Verify it starts always at 0. Pagination configurable so anyInt(). Only one call because isLast must be false + verify(client, times(1)).getPages(eq(0), anyInt(), Mockito.any(Optional.class)); + } + + @SuppressWarnings("unchecked") + @Test + public void mockSeeding() throws Exception { + + SeedingActivity activities = mock(SeedingActivity.class); + Specification spec = new Specification(); + long seedTime = 0; + + List<Page> pages = new ArrayList<Page>(); + Page page = mock(Page.class); + pages.add(page); + when(client.getPages(anyInt(), anyInt(), Mockito.any(Optional.class))). + thenReturn(new ConfluenceResponse<Page>(pages, 0, 0, false)). + thenReturn(new ConfluenceResponse<Page>(Collections.<Page>emptyList(), 0, 0, true)); + connector.addSeedDocuments(activities, spec, "", seedTime, BaseRepositoryConnector.JOBMODE_ONCEONLY); + verify(activities, times(1)).addSeedDocument(Mockito.anyString()); + verify(client, times(1)).getPages(eq(0), anyInt(), Mockito.any(Optional.class)); + verify(client, times(1)).getPages(eq(1), anyInt(), Mockito.any(Optional.class)); + } + + @Test + public void mockSimpleIngestion() throws Exception{ + + Page fakePage = mock(Page.class); + + Date date = new Date(); + DateFormat df = DateFormat.getDateTimeInstance(); + String content = "A"; + String uri = "http://test"; + byte[] documentBytes = content + .getBytes(StandardCharsets.UTF_8); + long size = (long) documentBytes.length; + + when(fakePage.hasContent()).thenReturn(true); + when(fakePage.getContent()).thenReturn(content); + when(fakePage.getLength()).thenReturn(size); + when(fakePage.getLastModifiedDate()).thenReturn(date); + when(fakePage.getMediaType()).thenReturn("text/plain"); + when(fakePage.getCreatedDate()).thenReturn(date); + when(fakePage.getWebUrl()).thenReturn(uri); + Map<String, Object> metadata = new HashMap<String, Object>(); + metadata.put("x", "y"); + when(fakePage.getMetadataAsMap()).thenReturn(metadata); + + IProcessActivity activities = mock(IProcessActivity.class); + when(activities.checkLengthIndexable(anyLong())) + .thenReturn(true); + when(activities.checkMimeTypeIndexable(anyString())) + .thenReturn(true); + when(activities.checkDateIndexable((Date)anyObject())) + .thenReturn(true); + when(activities.checkURLIndexable(anyString())) + .thenReturn(true); + when(activities.checkDocumentNeedsReindexing(anyString(), anyString())) + .thenReturn(true); + IExistingVersions statuses = mock(IExistingVersions.class); + + String ID = df.format(date); + when(statuses.getIndexedVersionString(ID)). + thenReturn(null); + + when(client.getPage(Mockito.anyString())). + thenReturn(fakePage); + + connector.processDocuments(new String[]{ID}, statuses, new Specification(), activities, 0, true); + ArgumentCaptor<RepositoryDocument> rd = ArgumentCaptor.forClass(RepositoryDocument.class); + + verify(client, times(1)).getPage(ID); + verify(activities, times(1)).ingestDocumentWithException(eq(ID), + eq(df.format(date)), eq(uri), rd.capture()); + verify(activities, times(1)).recordActivity(anyLong(), + eq("read document"), eq(size), eq(ID), eq("OK"), + anyString(), Mockito.isNull(String[].class)); + + RepositoryDocument doc = rd.getValue(); + Assert.assertEquals(size, doc.getBinaryLength()); + String[] values = doc.getFieldAsStrings("x"); + Assert.assertEquals(values.length, 1); + Assert.assertEquals(values[0], "y"); + + } + + @Test + public void mockNeedsReindexing() throws Exception{ + Page fakePage = mock(Page.class); + when(fakePage.hasContent()).thenReturn(true); + Date date = new Date(); + DateFormat df = DateFormat.getDateTimeInstance(); + String version = df.format(date); + when(fakePage.getLastModifiedDate()).thenReturn(df.parse(version)); + + String id = "1"; + IProcessActivity activities = mock(IProcessActivity.class); + IExistingVersions statuses = mock(IExistingVersions.class); + when(statuses.getIndexedVersionString(id)). + thenReturn(version); + + when(client.getPage(Mockito.anyString())). + thenReturn(fakePage); + + connector.processDocuments(new String[]{id}, statuses, new Specification(), activities, 0, true); + verify(client, times(1)).getPage(id); + verify(activities, times(1)).checkDocumentNeedsReindexing(id, version); + } + + @Test + public void mockDeleteDocument() throws Exception{ + Page fakePage = mock(Page.class); + when(fakePage.hasContent()).thenReturn(false); + String id = "A"; + when(fakePage.hasContent()).thenReturn(false); + when(client.getPage(Mockito.anyString())). + thenReturn(fakePage); + + IExistingVersions statuses = mock(IExistingVersions.class); + IProcessActivity activities = mock(IProcessActivity.class); + connector.processDocuments(new String[]{id}, statuses, new Specification(), activities, 0, true); + verify(client, times(1)).getPage(id); + verify(activities, times(1)).deleteDocument(id); + + } + +} Added: manifoldcf/branches/CONNECTORS-1161/connectors/confluence/pom.xml URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/pom.xml?rev=1695542&view=auto ============================================================================== --- manifoldcf/branches/CONNECTORS-1161/connectors/confluence/pom.xml (added) +++ manifoldcf/branches/CONNECTORS-1161/connectors/confluence/pom.xml Wed Aug 12 14:45:43 2015 @@ -0,0 +1,352 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <parent> + <groupId>org.apache.manifoldcf</groupId> + <artifactId>mcf-connectors</artifactId> + <version>2.2-SNAPSHOT</version> + </parent> + + <name>ManifoldCF - Connectors - Confluence Connector</name> + <modelVersion>4.0.0</modelVersion> + <artifactId>mcf-confluence-connector</artifactId> + <packaging>jar</packaging> + + <url>http://maven.apache.org</url> + + <developers> + <developer> + <name>Antonio David Perez Morales</name> + <email>[email protected]</email> + </developer> + </developers> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + </properties> + + <build> + <defaultGoal>integration-test</defaultGoal> + <sourceDirectory>${basedir}/connector/src/main/java</sourceDirectory> + <testSourceDirectory>${basedir}/connector/src/test/java</testSourceDirectory> + <resources> + <resource> + <directory>${basedir}/connector/src/main/native2ascii</directory> + <includes> + <include>**/*.properties</include> + </includes> + </resource> + <resource> + <directory>${basedir}/connector/src/main/resources</directory> + <includes> + <include>**/*.html</include> + <include>**/*.js</include> + </includes> + </resource> + </resources> + <testResources> + <testResource> + <directory>${basedir}/connector/src/test/resources</directory> + </testResource> + </testResources> + + + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>native2ascii-maven-plugin</artifactId> + <version>1.0-beta-1</version> + <configuration> + <workDir>target/classes</workDir> + </configuration> + <executions> + <execution> + <id>native2ascii-utf8</id> + <goals> + <goal>native2ascii</goal> + </goals> + <configuration> + <encoding>UTF8</encoding> + <includes> + <include>**/*.properties</include> + </includes> + </configuration> + </execution> + </executions> + </plugin> + + <!-- Test plugin configuration --> + <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>copy-war</id> + <phase>generate-resources</phase> + <goals> + <goal>copy</goal> + </goals> + <configuration> + <outputDirectory>target/dependency</outputDirectory> + <artifactItems> + <artifactItem> + <groupId>${project.groupId}</groupId> + <artifactId>mcf-api-service</artifactId> + <version>${project.version}</version> + <type>war</type> + <overWrite>false</overWrite> + <destFileName>mcf-api-service.war</destFileName> + </artifactItem> + <artifactItem> + <groupId>${project.groupId}</groupId> + <artifactId>mcf-authority-service</artifactId> + <version>${project.version}</version> + <type>war</type> + <overWrite>false</overWrite> + <destFileName>mcf-authority-service.war</destFileName> + </artifactItem> + <artifactItem> + <groupId>${project.groupId}</groupId> + <artifactId>mcf-crawler-ui</artifactId> + <version>${project.version}</version> + <type>war</type> + <overWrite>false</overWrite> + <destFileName>mcf-crawler-ui.war</destFileName> + </artifactItem> + </artifactItems> + </configuration> + </execution> + </executions> + </plugin> + + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <excludes> + <exclude>**/*Postgresql*.java</exclude> + <exclude>**/*MySQL*.java</exclude> + </excludes> + <forkMode>always</forkMode> + <workingDirectory>target/test-output</workingDirectory> + </configuration> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + <version>2.12.3</version> + <configuration> + <skipTests>${skipITs}</skipTests> + <systemPropertyVariables> + <crawlerWarPath>../dependency/mcf-crawler-ui.war</crawlerWarPath> + <authorityserviceWarPath>../dependency/mcf-authority-service.war</authorityserviceWarPath> + <apiWarPath>../dependency/mcf-api-service.war</apiWarPath> + </systemPropertyVariables> + <excludes> + <exclude>**/*Postgresql*.java</exclude> + <exclude>**/*MySQL*.java</exclude> + </excludes> + <forkMode>always</forkMode> + <workingDirectory>target/test-output</workingDirectory> + </configuration> + <executions> + <execution> + <id>integration-test</id> + <goals> + <goal>integration-test</goal> + </goals> + </execution> + <execution> + <id>verify</id> + <goals> + <goal>verify</goal> + </goals> + </execution> + </executions> + </plugin> + + </plugins> + <pluginManagement> + <plugins> + <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--> + <plugin> + <groupId>org.eclipse.m2e</groupId> + <artifactId>lifecycle-mapping</artifactId> + <version>1.0.0</version> + <configuration> + <lifecycleMappingMetadata> + <pluginExecutions> + <pluginExecution> + <pluginExecutionFilter> + <groupId> + org.apache.maven.plugins + </groupId> + <artifactId> + maven-dependency-plugin + </artifactId> + <versionRange> + [2.8,) + </versionRange> + <goals> + <goal>copy</goal> + </goals> + </pluginExecutionFilter> + <action> + <ignore></ignore> + </action> + </pluginExecution> + <pluginExecution> + <pluginExecutionFilter> + <groupId> + org.codehaus.mojo + </groupId> + <artifactId> + native2ascii-maven-plugin + </artifactId> + <versionRange> + [1.0-beta-1,) + </versionRange> + <goals> + <goal>native2ascii</goal> + </goals> + </pluginExecutionFilter> + <action> + <ignore></ignore> + </action> + </pluginExecution> + <pluginExecution> + <pluginExecutionFilter> + <groupId> + org.apache.maven.plugins + </groupId> + <artifactId> + maven-remote-resources-plugin + </artifactId> + <versionRange> + [1.5,) + </versionRange> + <goals> + <goal>process</goal> + </goals> + </pluginExecutionFilter> + <action> + <ignore></ignore> + </action> + </pluginExecution> + </pluginExecutions> + </lifecycleMappingMetadata> + </configuration> + </plugin> + </plugins> + </pluginManagement> + </build> + + + + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>mcf-core</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>mcf-connector-common</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>mcf-pull-agent</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>mcf-agents</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>mcf-ui-core</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>commons-lang</groupId> + <artifactId>commons-lang</artifactId> + <version>${commons-lang.version}</version> + <type>jar</type> + </dependency> + + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + <version>15.0</version> + </dependency> + + <!-- Testing dependencies --> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>${junit.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>${mockito.version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>com.github.tomakehurst</groupId> + <artifactId>wiremock</artifactId> + <version>${wiremock.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>mcf-core</artifactId> + <version>${project.version}</version> + <type>test-jar</type> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j.version}</version> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <version>${slf4j.version}</version> + </dependency> + + <dependency> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + <version>1.1.1</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>1.2.16</version> + <scope>provided</scope> + <type>jar</type> + </dependency> + <dependency> + <groupId>com.googlecode.json-simple</groupId> + <artifactId>json-simple</artifactId> + <version>1.1</version> + </dependency> + <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + <version>1.8</version> + </dependency> + </dependencies> + +</project> Modified: manifoldcf/branches/CONNECTORS-1161/connectors/pom.xml URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/pom.xml?rev=1695542&r1=1695541&r2=1695542&view=diff ============================================================================== --- manifoldcf/branches/CONNECTORS-1161/connectors/pom.xml (original) +++ manifoldcf/branches/CONNECTORS-1161/connectors/pom.xml Wed Aug 12 14:45:43 2015 @@ -65,6 +65,7 @@ <module>tika</module> <module>documentfilter</module> <module>searchblox</module> + <module>confluence</module> </modules> </project> Modified: manifoldcf/branches/CONNECTORS-1161/framework/buildfiles/connector-build.xml URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/framework/buildfiles/connector-build.xml?rev=1695542&r1=1695541&r2=1695542&view=diff ============================================================================== --- manifoldcf/branches/CONNECTORS-1161/framework/buildfiles/connector-build.xml (original) +++ manifoldcf/branches/CONNECTORS-1161/framework/buildfiles/connector-build.xml Wed Aug 12 14:45:43 2015 @@ -194,6 +194,9 @@ <include name="castor*.jar"/> <include name="geronimo-javamail_1.4_spec*.jar"/> </fileset> + <fileset dir="${mcf-dist}/connector-lib"> + <include name="guava*.jar"/> + </fileset> <pathelement location="build/stubclasses"/> <pathelement location="build/wsdlclasses"/> <pathelement location="build/xsdclasses"/>
