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

Commit 637f3c9

Browse files
authored
Merge pull request #167 from marklogic-community/feature/150-load-schemas
DEVEXP-150: No error thrown when no schemas to load and invalid client
2 parents 054d12f + 431ba22 commit 637f3c9

File tree

4 files changed

+33
-6
lines changed

4 files changed

+33
-6
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ public GenericFileLoader(BatchWriter batchWriter) {
7171
* @return list of files from the given paths
7272
*/
7373
public List<DocumentFile> loadFiles(String... paths) {
74-
batchWriter.initialize();
7574
List<DocumentFile> documentFiles = getDocumentFiles(paths);
7675
writeDocumentFiles(documentFiles);
7776
return documentFiles;
@@ -84,6 +83,7 @@ protected final List<DocumentFile> getDocumentFiles(String... paths) {
8483

8584
protected final void writeDocumentFiles(List<DocumentFile> documentFiles) {
8685
if (documentFiles != null && !documentFiles.isEmpty()) {
86+
batchWriter.initialize();
8787
writeBatchOfDocuments(documentFiles, 0);
8888
if (waitForCompletion) {
8989
batchWriter.waitForCompletion();

src/main/java/com/marklogic/client/ext/schemasloader/impl/DefaultSchemasLoader.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,12 @@ protected void initializeDefaultSchemasLoader() {
8484
*/
8585
@Override
8686
public List<DocumentFile> loadSchemas(String... paths) {
87+
final List<DocumentFile> documentFiles = super.getDocumentFiles(paths);
88+
if (documentFiles.isEmpty()) {
89+
return documentFiles;
90+
}
91+
8792
if (TdeUtil.templateBatchInsertSupported(schemasDatabaseClient) && StringUtils.hasText(tdeValidationDatabase)) {
88-
final List<DocumentFile> documentFiles = super.getDocumentFiles(paths);
8993
final List<DocumentFile> tdeFiles = new ArrayList<>();
9094
final List<DocumentFile> nonTdeFiles = new ArrayList<>();
9195

@@ -111,7 +115,8 @@ public List<DocumentFile> loadSchemas(String... paths) {
111115
return documentFiles;
112116
}
113117

114-
return super.loadFiles(paths);
118+
writeDocumentFiles(documentFiles);
119+
return documentFiles;
115120
}
116121

117122
public String getTdeValidationDatabase() {

src/test/java/com/marklogic/client/ext/schemasloader/impl/LoadSchemasTest.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.marklogic.client.ext.schemasloader.impl;
22

3+
import com.marklogic.client.FailedRequestException;
34
import com.marklogic.client.ext.batch.RestBatchWriter;
45
import com.marklogic.client.ext.file.DocumentFile;
56
import com.marklogic.client.ext.helper.ClientHelper;
@@ -9,15 +10,14 @@
910
import java.nio.file.Paths;
1011
import java.util.List;
1112

12-
import static org.junit.jupiter.api.Assertions.assertEquals;
13-
import static org.junit.jupiter.api.Assertions.assertTrue;
13+
import static org.junit.jupiter.api.Assertions.*;
1414

1515
public class LoadSchemasTest extends AbstractSchemasTest {
1616

1717
@Test
1818
public void test() {
1919
DefaultSchemasLoader loader = new DefaultSchemasLoader(client);
20-
RestBatchWriter writer = (RestBatchWriter)loader.getBatchWriter();
20+
RestBatchWriter writer = (RestBatchWriter) loader.getBatchWriter();
2121
assertEquals(1, writer.getThreadCount(), "Should default to 1 so that any error from loading a document " +
2222
"into a schemas database is immediately thrown to the client");
2323

@@ -57,4 +57,25 @@ public void testTemplateBatchInsert() {
5757
assertTrue(handle.getPermissions().get("rest-writer").contains(DocumentMetadataHandle.Capability.UPDATE),
5858
"Permissions defined in permissions.properties should be applied on the document");
5959
}
60+
61+
@Test
62+
public void invalidClientAndNoFilesToLoad() {
63+
DefaultSchemasLoader loader = new DefaultSchemasLoader(newClient("invalid-database-doesnt-exist"));
64+
List<DocumentFile> files = loader.loadSchemas(Paths.get("src", "test", "resources", "no-schemas").toString());
65+
assertEquals(0, files.size(),
66+
"When there aren't any files to load, then no error should be thrown when the client is invalid (which in " +
67+
"this scenario is due to a missing database); instead, an empty list should be returned");
68+
}
69+
70+
@Test
71+
public void invalidClientWithFilesToLoad() {
72+
DefaultSchemasLoader loader = new DefaultSchemasLoader(newClient("invalid-database-doesnt-exist"));
73+
FailedRequestException ex = assertThrows(FailedRequestException.class,
74+
() -> loader.loadSchemas(Paths.get("src", "test", "resources", "good-schemas").toString()));
75+
76+
String message = ex.getServerMessage();
77+
assertTrue(message.startsWith("XDMP-NOSUCHDB: No such database invalid-database-doesnt-exist"),
78+
"Because there are files to load and the client points to a database that doesn't exist, an error " +
79+
"should be thrown with no files loaded; actual message: " + message);
80+
}
6081
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# This file is only included to ensure this directory exists for the purpose of testing

0 commit comments

Comments
 (0)