Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit fdc4d78

Browse files
committed
Added test for permissions, tweaked logging
1 parent 793428c commit fdc4d78

File tree

6 files changed

+121
-11
lines changed

6 files changed

+121
-11
lines changed

src/main/java/com/marklogic/client/ext/batch/BatchWriterSupport.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,21 @@ public void initialize() {
3333
@Override
3434
public void waitForCompletion() {
3535
if (taskExecutor instanceof ExecutorConfigurationSupport) {
36-
if (logger.isInfoEnabled()) {
37-
logger.info("Calling shutdown on thread pool");
36+
if (logger.isDebugEnabled()) {
37+
logger.debug("Calling shutdown on thread pool");
3838
}
3939
((ExecutorConfigurationSupport) taskExecutor).shutdown();
40-
if (logger.isInfoEnabled()) {
41-
logger.info("Thread pool finished shutdown");
40+
if (logger.isDebugEnabled()) {
41+
logger.debug("Thread pool finished shutdown");
4242
}
4343
taskExecutor = null;
4444
}
4545
}
4646

4747
protected void initializeDefaultTaskExecutor() {
4848
if (threadCount > 1) {
49-
if (logger.isInfoEnabled()) {
50-
logger.info("Initializing thread pool with a count of " + threadCount);
49+
if (logger.isDebugEnabled()) {
50+
logger.debug("Initializing thread pool with a count of " + threadCount);
5151
}
5252
ThreadPoolTaskExecutor tpte = new ThreadPoolTaskExecutor();
5353
tpte.setCorePoolSize(threadCount);
@@ -59,8 +59,8 @@ protected void initializeDefaultTaskExecutor() {
5959
tpte.afterPropertiesSet();
6060
this.taskExecutor = tpte;
6161
} else {
62-
if (logger.isInfoEnabled()) {
63-
logger.info("Thread count is 1, so using a synchronous TaskExecutor");
62+
if (logger.isDebugEnabled()) {
63+
logger.debug("Thread count is 1, so using a synchronous TaskExecutor");
6464
}
6565
this.taskExecutor = new SyncTaskExecutor();
6666
}

src/main/java/com/marklogic/client/ext/batch/SimpleDocumentWriteOperation.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import com.marklogic.client.io.marker.AbstractWriteHandle;
77
import com.marklogic.client.io.marker.DocumentMetadataWriteHandle;
88

9+
import java.util.HashMap;
10+
import java.util.Map;
11+
912
/**
1013
* Implementation of DocumentWriteOperation for a simple use case of inserting a document with a URI, a String
1114
* body, and zero or more collections.
@@ -15,13 +18,22 @@ public class SimpleDocumentWriteOperation implements DocumentWriteOperation {
1518
private String uri;
1619
private String[] collections;
1720
private String content;
21+
private Map<String, DocumentMetadataHandle.Capability[]> permissions;
1822

1923
public SimpleDocumentWriteOperation(String uri, String content, String... collections) {
2024
this.uri = uri;
2125
this.content = content;
2226
this.collections = collections;
2327
}
2428

29+
public SimpleDocumentWriteOperation addPermissions(String role, DocumentMetadataHandle.Capability... capabilities) {
30+
if (permissions == null) {
31+
permissions = new HashMap<>();
32+
}
33+
permissions.put(role, capabilities);
34+
return this;
35+
}
36+
2537
@Override
2638
public OperationType getOperationType() {
2739
return OperationType.DOCUMENT_WRITE;
@@ -38,6 +50,11 @@ public DocumentMetadataWriteHandle getMetadata() {
3850
if (collections != null) {
3951
h.withCollections(collections);
4052
}
53+
if (permissions != null) {
54+
for (String role : permissions.keySet()) {
55+
h.withPermission(role, permissions.get(role));
56+
}
57+
}
4158
return h;
4259
}
4360

@@ -50,4 +67,12 @@ public AbstractWriteHandle getContent() {
5067
public String getTemporalDocumentURI() {
5168
return null;
5269
}
70+
71+
public void setCollections(String[] collections) {
72+
this.collections = collections;
73+
}
74+
75+
public void setPermissions(Map<String, DocumentMetadataHandle.Capability[]> permissions) {
76+
this.permissions = permissions;
77+
}
5378
}

src/main/java/com/marklogic/client/ext/datamovement/QueryBatcherTemplate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public QueryBatcherJobTicket applyOnCollections(QueryBatchListener listener, Str
5151
* @return
5252
*/
5353
public QueryBatcherJobTicket applyOnDocuments(QueryBatchListener listener, String... documentUris) {
54-
return applyOnStructuredQuery(listener, databaseClient.newQueryManager().newStructuredQueryBuilder().collection(documentUris));
54+
return applyOnStructuredQuery(listener, databaseClient.newQueryManager().newStructuredQueryBuilder().document(documentUris));
5555
}
5656

5757
/**

src/main/java/com/marklogic/client/ext/file/DefaultDocumentFileReader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ public DefaultDocumentFileReader() {
4444
public List<DocumentFile> readDocumentFiles(String... paths) {
4545
documentFiles = new ArrayList<>();
4646
for (String path : paths) {
47-
if (logger.isInfoEnabled()) {
48-
logger.info(format("Finding documents at path: %s", path));
47+
if (logger.isDebugEnabled()) {
48+
logger.debug(format("Finding documents at path: %s", path));
4949
}
5050
Path p = constructPath(path);
5151
if (p != null) {

src/main/java/com/marklogic/client/ext/file/GenericFileLoader.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class GenericFileLoader extends LoggingObject implements FileLoader {
2121
private DocumentFileReader documentFileReader;
2222
private BatchWriter batchWriter;
2323
private boolean waitForCompletion = true;
24+
private boolean logFileUris = true;
2425

2526
// These are passed on to the DefaultDocumentFileReader that is created if one isn't set
2627
private List<FileFilter> fileFilters;
@@ -72,6 +73,11 @@ public List<DocumentFile> loadFiles(String... paths) {
7273
if (documentFiles != null && !documentFiles.isEmpty()) {
7374
if (logger.isInfoEnabled()) {
7475
logger.info(format("Writing %d files", documentFiles.size()));
76+
if (logFileUris ) {
77+
for (DocumentFile df : documentFiles) {
78+
logger.info("Writing: " + df.getUri());
79+
}
80+
}
7581
}
7682
batchWriter.write(documentFiles);
7783
if (waitForCompletion) {
@@ -186,4 +192,12 @@ public void setDocumentFileProcessors(List<DocumentFileProcessor> documentFilePr
186192
public void setAdditionalBinaryExtensions(String... additionalBinaryExtensions) {
187193
this.additionalBinaryExtensions = additionalBinaryExtensions;
188194
}
195+
196+
public boolean isLogFileUris() {
197+
return logFileUris;
198+
}
199+
200+
public void setLogFileUris(boolean logFileUris) {
201+
this.logFileUris = logFileUris;
202+
}
189203
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.marklogic.client.ext.datamovement.listener;
2+
3+
import com.marklogic.client.datamovement.DeleteListener;
4+
import com.marklogic.client.ext.AbstractIntegrationTest;
5+
import com.marklogic.client.ext.batch.RestBatchWriter;
6+
import com.marklogic.client.ext.batch.SimpleDocumentWriteOperation;
7+
import com.marklogic.client.ext.datamovement.QueryBatcherTemplate;
8+
import com.marklogic.client.ext.helper.ClientHelper;
9+
import com.marklogic.client.io.DocumentMetadataHandle;
10+
import org.junit.Test;
11+
12+
import java.util.Arrays;
13+
14+
public class ManagePermissionsTest extends AbstractIntegrationTest {
15+
16+
/**
17+
* Note that with ML9 and previous versions, rest-reader/read and rest-writer/update are always added to documents
18+
* inserted via /v1/documents.
19+
*/
20+
@Test
21+
public void test() {
22+
final String uri = "1.xml";
23+
24+
QueryBatcherTemplate qbt = new QueryBatcherTemplate(newClient("Documents"));
25+
26+
// Clear out the test documents
27+
qbt.applyOnDocuments(new DeleteListener(), uri);
28+
29+
// Insert documents
30+
RestBatchWriter writer = new RestBatchWriter(client, false);
31+
writer.write(Arrays.asList(
32+
new SimpleDocumentWriteOperation(uri, "<one/>").
33+
addPermissions("app-user", DocumentMetadataHandle.Capability.READ, DocumentMetadataHandle.Capability.UPDATE)
34+
));
35+
writer.waitForCompletion();
36+
37+
ClientHelper helper = new ClientHelper(client);
38+
DocumentMetadataHandle.DocumentPermissions perms = helper.getMetadata(uri).getPermissions();
39+
assertEquals(3, perms.size());
40+
assertEquals(2, perms.get("app-user").size());
41+
assertTrue(perms.get("app-user").contains(DocumentMetadataHandle.Capability.READ));
42+
assertTrue(perms.get("app-user").contains(DocumentMetadataHandle.Capability.UPDATE));
43+
44+
// Set permissions
45+
qbt.applyOnDocuments(new SetPermissionsListener("alert-user", "read", "alert-user", "update"), uri);
46+
perms = helper.getMetadata(uri).getPermissions();
47+
assertEquals(1, perms.size());
48+
assertEquals(2, perms.get("alert-user").size());
49+
assertTrue(perms.get("alert-user").contains(DocumentMetadataHandle.Capability.READ));
50+
assertTrue(perms.get("alert-user").contains(DocumentMetadataHandle.Capability.UPDATE));
51+
52+
// Add permissions
53+
qbt.applyOnDocuments(new AddPermissionsListener("app-user", "read", "app-user", "update"), uri);
54+
perms = helper.getMetadata(uri).getPermissions();
55+
assertEquals(2, perms.size());
56+
assertEquals(2, perms.get("alert-user").size());
57+
assertTrue(perms.get("alert-user").contains(DocumentMetadataHandle.Capability.READ));
58+
assertTrue(perms.get("alert-user").contains(DocumentMetadataHandle.Capability.UPDATE));
59+
assertEquals(2, perms.get("app-user").size());
60+
assertTrue(perms.get("app-user").contains(DocumentMetadataHandle.Capability.READ));
61+
assertTrue(perms.get("app-user").contains(DocumentMetadataHandle.Capability.UPDATE));
62+
63+
// Remove permissions
64+
qbt.applyOnDocuments(new RemovePermissionsListener("app-user", "read", "app-user", "update"), uri);
65+
perms = helper.getMetadata(uri).getPermissions();
66+
assertEquals(1, perms.size());
67+
assertEquals(2, perms.get("alert-user").size());
68+
assertTrue(perms.get("alert-user").contains(DocumentMetadataHandle.Capability.READ));
69+
assertTrue(perms.get("alert-user").contains(DocumentMetadataHandle.Capability.UPDATE));
70+
}
71+
}

0 commit comments

Comments
 (0)