diff --git a/Jenkinsfile b/Jenkinsfile index 398ca4856..d2ed4436a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -101,6 +101,7 @@ pipeline{ export PATH=$GRADLE_USER_HOME:$JAVA_HOME/bin:$PATH cd java-client-api ./gradlew -i marklogic-client-api:test || true + ./gradlew marklogic-client-api-functionaltests:runFastFunctionalTests || true ''' junit '**/build/**/TEST*.xml' } diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/datamovement/functionaltests/WBFailover.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/datamovement/functionaltests/WBFailover.java index cbc73061a..56ff3337f 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/datamovement/functionaltests/WBFailover.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/datamovement/functionaltests/WBFailover.java @@ -332,7 +332,7 @@ public void testBlackListHost() throws Exception { final AtomicInteger successCount = new AtomicInteger(0); final AtomicBoolean containsBLHost = new AtomicBoolean(false); final AtomicBoolean failState = new AtomicBoolean(false); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("admin", "admin"); + SecurityContext secContext = newSecurityContext("admin", "admin"); DatabaseClient dbClient = DatabaseClientFactory.newClient(hostLists.get(3), 8000, secContext, getConnType()); DataMovementManager dmManager = dbClient.newDataMovementManager(); WriteBatcher ihb2 = dmManager.newWriteBatcher(); diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/AbstractFunctionalTest.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/AbstractFunctionalTest.java index b4fff3d03..ad3e7c963 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/AbstractFunctionalTest.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/AbstractFunctionalTest.java @@ -61,11 +61,11 @@ public static void initializeClients() throws Exception { adminModulesClient = getDatabaseClientOnDatabase(getRestServerHostName(), getRestServerPort(), modulesDbName, getAdminUser(), getAdminPassword(), getConnType()); } else { schemasClient = DatabaseClientFactory.newClient(getRestServerHostName(), getRestServerPort(), schemasDbName, - new DatabaseClientFactory.DigestAuthContext(OPTIC_USER, OPTIC_USER_PASSWORD)); + newSecurityContext(OPTIC_USER, OPTIC_USER_PASSWORD)); client = DatabaseClientFactory.newClient(getRestServerHostName(), getRestServerPort(), - new DatabaseClientFactory.DigestAuthContext(OPTIC_USER, OPTIC_USER_PASSWORD)); + newSecurityContext(OPTIC_USER, OPTIC_USER_PASSWORD)); adminModulesClient = DatabaseClientFactory.newClient(getRestServerHostName(), getRestServerPort(), modulesDbName, - new DatabaseClientFactory.DigestAuthContext(getAdminUser(), getAdminPassword())); + newSecurityContext(getAdminUser(), getAdminPassword())); } // Required to ensure that tests using the "/ext/" prefix work reliably. Expand to other directories as needed. @@ -155,12 +155,12 @@ protected final String toWKT(String latLon) { protected static DatabaseClient connectAsRestWriter() { return DatabaseClientFactory.newClient(getRestServerHostName(), getRestServerPort(), - new DatabaseClientFactory.DigestAuthContext("rest-writer", "x"), getConnType()); + newSecurityContext("rest-writer", "x"), getConnType()); } protected static DatabaseClient connectAsAdmin() { return DatabaseClientFactory.newClient(getRestServerHostName(), getRestServerPort(), - new DatabaseClientFactory.DigestAuthContext(getAdminUser(), getAdminPassword()), getConnType()); + newSecurityContext(getAdminUser(), getAdminPassword()), getConnType()); } protected static void removeFieldIndices() { diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestBulkWriteWithTransformations.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestBulkWriteWithTransformations.java index 2fec9d26a..8bb005ba9 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestBulkWriteWithTransformations.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestBulkWriteWithTransformations.java @@ -74,7 +74,7 @@ public void setUp() throws Exception { if (isLBHost()) client = getDatabaseClient("eval-user", "x", getConnType()); else { - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); client = DatabaseClientFactory.newClient(appServerHostname, uberPort, "java-functest", secContext, getConnType()); } } diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestDatabaseAuthentication.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestDatabaseAuthentication.java index 5cf3c3e7d..e50da7984 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestDatabaseAuthentication.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestDatabaseAuthentication.java @@ -21,13 +21,10 @@ import com.marklogic.client.DatabaseClientFactory.SecurityContext; import com.marklogic.client.io.InputStreamHandle; import org.junit.After; -import org.junit.AfterClass; import org.junit.Test; import java.io.IOException; import java.io.InputStream; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; import static org.junit.Assert.assertEquals; @@ -42,13 +39,14 @@ public class TestDatabaseAuthentication extends AbstractFunctionalTest { private static String restServerName = "java-functest"; @After - public void testCleanUp() throws Exception { - deleteDocuments(connectAsAdmin()); + public void teardown() throws Exception { + setAuthentication(securityContextType, restServerName); + setDefaultUser("nobody", restServerName); } // Should throw exceptions when none specified. @Test - public void testAuthenticationNone() throws KeyManagementException, NoSuchAlgorithmException, IOException + public void testAuthenticationNone() throws IOException { System.out.println("Running testAuthenticationNone"); if (!IsSecurityEnabled()) { @@ -63,13 +61,11 @@ public void testAuthenticationNone() throws KeyManagementException, NoSuchAlgori } assertEquals("Write Text difference", "makeSecurityContext should only be called with BASIC or DIGEST Authentication", str.toString().trim()); - setAuthentication("digest", restServerName); - setDefaultUser("nobody", restServerName); } } @Test - public void testAuthenticationBasic() throws KeyManagementException, NoSuchAlgorithmException, IOException + public void testAuthenticationBasic() throws IOException { if (!IsSecurityEnabled()) { setAuthentication("basic", restServerName); @@ -100,15 +96,6 @@ public void testAuthenticationBasic() throws KeyManagementException, NoSuchAlgor // release client client.release(); - - setAuthentication("digest", restServerName); - setDefaultUser("nobody", restServerName); } } - - @AfterClass - public static void tearDown() throws Exception { - setAuthentication("digest", restServerName); - setDefaultUser("nobody", restServerName); - } } diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestHandles.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestHandles.java index b514efb8b..8f7d47109 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestHandles.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestHandles.java @@ -78,7 +78,7 @@ public void testXmlCRUD_BytesHandle() throws KeyManagementException, NoSuchAlgor XMLUnit.setNormalizeWhitespace(true); // connect the client - DatabaseClientFactory.SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + DatabaseClientFactory.SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -140,7 +140,7 @@ public void testTextCRUD_BytesHandle() throws KeyManagementException, NoSuchAlgo System.out.println("Runing test TextCRUD_BytesHandle"); // connect the client - DatabaseClientFactory.SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + DatabaseClientFactory.SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -201,7 +201,7 @@ public void testJsonCRUD_BytesHandle() throws KeyManagementException, NoSuchAlgo ObjectMapper mapper = new ObjectMapper(); // connect the client - DatabaseClientFactory.SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + DatabaseClientFactory.SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -262,7 +262,7 @@ public void testBinaryCRUD_BytesHandle() throws KeyManagementException, NoSuchAl System.out.println("Running testBinaryCRUD_BytesHandle"); // connect the client - DatabaseClientFactory.SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + DatabaseClientFactory.SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestPartialUpdate.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestPartialUpdate.java index a7f9cee01..2c70ac2a4 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestPartialUpdate.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestPartialUpdate.java @@ -66,7 +66,7 @@ public void testPartialUpdateXML() throws IOException { String[] filenames = { "constraint1.xml", "constraint2.xml", "constraint3.xml", "constraint4.xml", "constraint5.xml" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -141,7 +141,7 @@ public void testJSONParserException() throws IOException String[] filenames = { "json-original.json" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("bad-eval-user", "x"); + SecurityContext secContext = newSecurityContext("bad-eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -158,7 +158,7 @@ public void testPartialUpdateJSON() throws IOException { String[] filenames = { "json-original.json" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -232,7 +232,7 @@ public void testPartialUpdateContent() throws IOException String filename = "constraint1.xml"; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -326,7 +326,7 @@ public void testPartialUpdateDeletePath() throws IOException { System.out.println("Running testPartialUpdateDeletePath"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -369,7 +369,7 @@ public void testPartialUpdateDeletePath() throws IOException @Test public void testPartialUpdateFragments() throws Exception { System.out.println("Running testPartialUpdateFragments"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -407,7 +407,7 @@ public void testPartialUpdateFragments() throws Exception { @Test public void testPartialUpdateInsertFragments() throws Exception { System.out.println("Running testPartialUpdateInsertFragments"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -442,7 +442,7 @@ public void testPartialUpdateInsertFragments() throws Exception { @Test public void testPartialUpdateInsertExistingFragments() throws Exception { System.out.println("Running testPartialUpdateInsertExistingFragments"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -477,7 +477,7 @@ public void testPartialUpdateInsertExistingFragments() throws Exception { @Test public void testPartialUpdateReplaceApply() throws Exception { System.out.println("Running testPartialUpdateReplaceApply"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("rest-admin", "x"); + SecurityContext secContext = newSecurityContext("rest-admin", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, 8000, secContext, getConnType()); ExtensionLibrariesManager libsMgr = client.newServerConfigManager().newExtensionLibrariesManager(); @@ -602,7 +602,7 @@ public void testPartialUpdateReplaceApply() throws Exception { @Test public void testPartialUpdateCombination() throws Exception { System.out.println("Running testPartialUpdateCombination"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -634,7 +634,7 @@ public void testPartialUpdateCombination() throws Exception { @Test public void testPartialUpdateCombinationTransc() throws Exception { System.out.println("Running testPartialUpdateCombination"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); Transaction t = client.openTransaction("Transac"); // write docs @@ -672,7 +672,7 @@ public void testPartialUpdateCombinationTransc() throws Exception { @Test public void testPartialUpdateCombinationTranscRevert() throws Exception { System.out.println("Running testPartialUpdateCombinationTranscRevert"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs String[] filenames = { "constraint1.xml", "constraint2.xml" }; @@ -765,7 +765,7 @@ public void testPartialUpdateCombinationJSON() throws Exception { @Test public void testPartialUpdateMetadata() throws Exception { System.out.println("Running testPartialUpdateMetadata"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -840,7 +840,7 @@ public void testPartialUpdateXMLDscriptor() throws IOException { String[] filenames = { "constraint1.xml", "constraint2.xml", "constraint3.xml", "constraint4.xml", "constraint5.xml" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -877,7 +877,7 @@ public void testPartialUpdateJSONDescriptor() throws IOException { String[] filenames = { "json-original.json" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -922,7 +922,7 @@ public void testPartialUpdateXMLDscriptorTranc() throws IOException { String[] filenames = { "constraint1.xml", "constraint2.xml", "constraint3.xml", "constraint4.xml", "constraint5.xml" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -961,7 +961,7 @@ public void testPartialUpdateJSONDescriptorTranc() throws IOException { String[] filenames = { "json-original.json" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -1006,7 +1006,7 @@ public void testPartialUpdateCardinality() throws IOException { String filename = "constraint1.xml"; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -1064,7 +1064,7 @@ public void testPartialUpdateReplaceValueJSON() throws IOException, JSONExceptio String[] filenames = { "json-original.json" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -1111,7 +1111,7 @@ public void testPartialUpdateReplaceFragmentJSON() throws IOException, JSONExcep String[] filenames = { "json-original.json" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -1159,7 +1159,7 @@ public void testPartialUpdateReplaceInsertFragmentNewJSON() throws IOException, String[] filenames = { "json-original.json" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -1208,7 +1208,7 @@ public void testPartialUpdateReplaceInsertFragmentExistingJSON() throws IOExcept String[] filenames = { "json-original.json" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -1255,7 +1255,7 @@ public void testPartialUpdateDeleteJSON() throws IOException, JSONException String[] filenames = { "json-original.json" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); // write docs @@ -1307,7 +1307,7 @@ public void testRestrictedXPath() throws IOException, JSONException { content1.append("{ \"RegionId\": \"1004\", \"Direction\": \"SW\" }"); content1.append("]}}]}"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); int count = 1; XMLDocumentManager docMgr = client.newXMLDocumentManager(); @@ -1389,7 +1389,7 @@ public void testMetaDataUpdateJSON() throws IOException, JSONException String[] filenames = { "json-original.json" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, uberPort, dbName, secContext, getConnType()); DocumentMetadataHandle mhRead = new DocumentMetadataHandle(); diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestRuntimeDBselection.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestRuntimeDBselection.java index ee30ec4a1..c809e6439 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestRuntimeDBselection.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestRuntimeDBselection.java @@ -63,7 +63,7 @@ public void testRuntimeDBclientWithDifferentAuthType() throws Exception { assertEquals("count of documents ", 0, response2); client.release(); } finally { - associateRESTServerWithDefaultUser("java-functest", "nobody", "digest"); + associateRESTServerWithDefaultUser("java-functest", "nobody", securityContextType); } } } diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/BulkIOCallersFnTest.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/BulkIOCallersFnTest.java index 0fd38c032..1eb3abe87 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/BulkIOCallersFnTest.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/BulkIOCallersFnTest.java @@ -176,8 +176,7 @@ public static void setUp() throws Exception { createUserRolesWithPrevilages("ForbiddenRole", "any-uri"); createRESTUser("ForbiddenUser", "ap1U53r", "apiRole", "rest-admin", "rest-writer", "rest-reader", "manage-user"); - //SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("apiUser", "ap1U53r"); - secContext = new DatabaseClientFactory.DigestAuthContext("admin", "admin"); + secContext = newSecurityContext("admin", "admin"); schemaDBclient = getDatabaseClientOnDatabase(host, modulesPort, dbNameMod, user, "admin", getConnType()); diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/ClientApiFunctionalTest.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/ClientApiFunctionalTest.java index dc1490132..e6035627d 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/ClientApiFunctionalTest.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/ClientApiFunctionalTest.java @@ -122,7 +122,7 @@ public static void setUp() throws Exception { createUserRolesWithPrevilages("ForbiddenRole", "any-uri"); createRESTUser("ForbiddenUser", "ap1U53r", "apiRole", "rest-admin", "rest-writer", "rest-reader", "manage-user"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("apiUser", "ap1U53r"); + SecurityContext secContext = newSecurityContext("apiUser", "ap1U53r"); dbclient = DatabaseClientFactory.newClient(host, port, secContext, getConnType()); schemaDBclient = getDatabaseClientOnDatabase(host, modulesPort, dbNameMod, user, "admin", getConnType()); @@ -427,8 +427,8 @@ public void TestE2ERequiredParam() throws Exception { public void TestE2EUnAuthorizedUser() throws Exception { System.out.println("Running TestE2EUnAuthorizedUser"); - associateRESTServerWithDefaultUser(serverName, "security", "digest"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("ForbiddenUser", "ap1U53r"); + associateRESTServerWithDefaultUser(serverName, "security", securityContextType); + SecurityContext secContext = newSecurityContext("ForbiddenUser", "ap1U53r"); DatabaseClient dbForbiddenclient = DatabaseClientFactory.newClient(host, port, secContext, getConnType()); String msg; try { @@ -441,7 +441,7 @@ public void TestE2EUnAuthorizedUser() throws Exception { assertTrue("Expected exception returned", msg.contains( "failed to POST at /ext/TestE2EIntegerParamReturnDouble/TestE2EIntegerParamReturnDoubleErrorCond.sjs")); } finally { - associateRESTServerWithDefaultUser(serverName, "nobody", "digest"); + associateRESTServerWithDefaultUser(serverName, "nobody", securityContextType); } } @@ -531,7 +531,7 @@ public void TestE2EuserWithInvalidRole() throws Exception { // Used this test to verify ResourceNotFoundException when sjs module is installed with incorrect doc URI System.out.println("Running TestE2EuserWithInvalidRole"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("secondApiUser", "ap1U53r"); + SecurityContext secContext = newSecurityContext("secondApiUser", "ap1U53r"); DatabaseClient dbSecondClient = DatabaseClientFactory.newClient(host, port, secContext, getConnType()); String msg; try { @@ -602,7 +602,7 @@ public void TestE2ESessions() throws Exception { } catch (Exception ex) { System.out.println("Exception - session2.json / session3.json - Client API call is " + ex.toString()); } - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("apiUser", "ap1U53r"); + SecurityContext secContext = newSecurityContext("apiUser", "ap1U53r"); DatabaseClient dbclientRest = DatabaseClientFactory.newClient(host, restTestport, secContext, getConnType()); this.waitForPropertyPropagate(); JSONDocumentManager docMgr = dbclientRest.newJSONDocumentManager(); diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/ConnectedRESTQA.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/ConnectedRESTQA.java index 7b478cf42..c8de10d4d 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/ConnectedRESTQA.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/ConnectedRESTQA.java @@ -45,6 +45,7 @@ public abstract class ConnectedRESTQA { + protected static String securityContextType; private static String restServerName = null; private static String restSslServerName = null; private static String ssl_enabled = null; @@ -82,7 +83,7 @@ public abstract class ConnectedRESTQA { private static OkHttpClient createManageAdminClient(String username, String password) { // build client with authentication information. RESTServices services = new OkHttpServices(); - services.connect(host_name, Integer.parseInt(admin_port), ML_MANAGE_DB, new DatabaseClientFactory.DigestAuthContext(username, password)); + services.connect(host_name, Integer.parseInt(admin_port), ML_MANAGE_DB, newSecurityContext(username, password)); OkHttpClient okHttpClient = (OkHttpClient) services.getClientImplementation(); return okHttpClient; } @@ -2216,7 +2217,7 @@ public static DatabaseClient getDatabaseClient(String user, String password, Con DatabaseClient client = null; SSLContext sslcontext = null; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext(user,password); + SecurityContext secContext = newSecurityContext(user,password); if (IsSecurityEnabled()) { try { sslcontext = getSslContext(); @@ -2273,12 +2274,12 @@ public static DatabaseClient getDatabaseClientOnDatabase(String hostName, int po if (hostName.equalsIgnoreCase(host_name)) hostName = getSslServer(); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext(user,password); + SecurityContext secContext = newSecurityContext(user,password); secContext.withSSLContext(sslcontext).withSSLHostnameVerifier(SSLHostnameVerifier.ANY); client = DatabaseClientFactory.newClient(hostName, port, databaseName, secContext, connType); } else { - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext(user,password); + SecurityContext secContext = newSecurityContext(user,password); if (hostName.equalsIgnoreCase(host_name)) hostName = getServer(); client = DatabaseClientFactory.newClient(hostName, port, databaseName, secContext, connType); @@ -2335,7 +2336,7 @@ public static void loadGradleProperties() { } // Set the variable values. - // Rest App server names and ports. + securityContextType = property.getProperty("securityContextType"); restServerName = property.getProperty("mlAppServerName"); restSslServerName = property.getProperty("mlAppServerSSLName"); @@ -2881,4 +2882,11 @@ else if (response.code() == ML_RES_CHANGED) { client = null; } } + + public static DatabaseClientFactory.SecurityContext newSecurityContext(String username, String password) { + if ("basic".equalsIgnoreCase(securityContextType)) { + return new DatabaseClientFactory.BasicAuthContext(username, password); + } + return new DatabaseClientFactory.DigestAuthContext(username, password); + } } diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestDatabaseClientConnection.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestDatabaseClientConnection.java index 9b9ddea42..15b815454 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestDatabaseClientConnection.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestDatabaseClientConnection.java @@ -174,7 +174,7 @@ public void testDatabaseClientGetters() throws KeyManagementException, NoSuchAlg DatabaseClient client = null; SSLContext sslcontext = null; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("rest-reader", "x"); + SecurityContext secContext = newSecurityContext("rest-reader", "x"); try { sslcontext = getSslContext(); @@ -219,7 +219,7 @@ public void testDatabaseClientConnectionInvalidPort() throws IOException String filename = "facebook-10443244874876159931"; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("rest-reader", "x"); + SecurityContext secContext = newSecurityContext("rest-reader", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, 8033, secContext, getConnType()); String expectedException = null; @@ -306,7 +306,7 @@ public void testDatabaseClientConnectionInvalidHost() throws IOException String filename = "facebook-10443244874876159931"; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("rest-writer", "x"); + SecurityContext secContext = newSecurityContext("rest-writer", "x"); DatabaseClient client = DatabaseClientFactory.newClient("foobarhost", 8011, secContext, getConnType()); // String expectedException = @@ -354,7 +354,7 @@ public void testDBClientUsingWithoutDatabaseName() throws IOException, SAXExcept String filename = "xml-original-test.xml"; String uri = "/write-xml-string/"; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, Uberport, secContext, getConnType()); // write doc @@ -387,7 +387,7 @@ public void testDBClientUsingWithDatabaseName() throws IOException, SAXException if (isLBHost()) client = getDatabaseClient("eval-user", "x", getConnType()); else { - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); client = DatabaseClientFactory.newClient(appServerHostname, Uberport, UberdbName, secContext, getConnType()); } @@ -417,7 +417,7 @@ public void testUberSearchSuggestionMultiByte() throws FileNotFoundException String[] filenames = { "multibyte1.xml", "multibyte2.xml", "multibyte3.xml" }; String queryOptionName = "suggestionOpt.xml"; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, Uberport, UberdbName, secContext, getConnType()); // write docs for (String filename : filenames) { @@ -447,7 +447,7 @@ public void testQueryManagerTuples() throws IOException, ParserConfigurationExce String[] filenames = { "aggr1.xml", "aggr2.xml", "aggr3.xml", "aggr4.xml", "aggr5.xml" }; String queryOptionName = "aggregatesOpt.xml"; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, Uberport, UberdbName, secContext, getConnType()); // write docs @@ -505,7 +505,7 @@ public void testValuesOccurences() throws IOException, ParserConfigurationExcept String[] filenames = { "aggr1.xml", "aggr2.xml", "aggr3.xml", "aggr4.xml" }; String queryOptionName = "aggregatesOpt5Occ.xml"; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, Uberport, UberdbName, secContext, getConnType()); // write docs @@ -540,7 +540,7 @@ public void testTransactionReadStatus() throws Exception { System.out.println("Running testTransactionReadStatus"); String docId[] = { "/foo/test/transactionURIFoo1.txt", "/foo/test/transactionURIFoo2.txt", "/foo/test/transactionURIFoo3.txt" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, Uberport, UberdbName, secContext, getConnType()); Transaction transaction = client.openTransaction(); try { @@ -659,7 +659,7 @@ public void testAddAs() throws Exception { System.out.println("Running testAddAs"); String[] docId = { "aggr1.xml", "aggr2.xml", "aggr3.xml" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); DatabaseClient client = DatabaseClientFactory.newClient(appServerHostname, Uberport, UberdbName, secContext, getConnType()); Transaction transaction = client.openTransaction(); @@ -720,7 +720,7 @@ public void testRuleManagerReadAs() throws IOException, ParserConfigurationExcep try { String[] filenames = { "constraint1.xml", "constraint2.xml", "constraint3.xml", "constraint4.xml", "constraint5.xml" }; - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("eval-user", "x"); + SecurityContext secContext = newSecurityContext("eval-user", "x"); client = DatabaseClientFactory.newClient(appServerHostname, Uberport, UberdbName, secContext, getConnType()); // write docs for (String filename : filenames) { @@ -860,7 +860,7 @@ public void testDatabaseClientFactoryBean() throws IOException, ParserConfigurat clientFactoryBean.setHost(getRestAppServerHostName()); clientFactoryBean.setPort(getRestAppServerPort()); clientFactoryBean.setConnectionType(getConnType()); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("rest-admin", "x"); + SecurityContext secContext = newSecurityContext("rest-admin", "x"); clientFactoryBean.setSecurityContext(secContext); client = clientFactoryBean.newClient(); @@ -897,7 +897,7 @@ public void testDBClientFactoryBeanTransaction() throws Exception { clientFactoryBean.setHost(getRestAppServerHostName()); clientFactoryBean.setPort(getRestAppServerPort()); clientFactoryBean.setConnectionType(getConnType()); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("rest-writer", "x"); + SecurityContext secContext = newSecurityContext("rest-writer", "x"); clientFactoryBean.setSecurityContext(secContext); client = clientFactoryBean.newClient(); @@ -1045,7 +1045,7 @@ public static void tearDown() throws Exception { if (!IsSecurityEnabled()) { setDefaultUser("nobody", restServerName); - setAuthentication("digest", restServerName); + setAuthentication(securityContextType, restServerName); } // Associate the Server with Documents. Due to test orders being // undeterministic not sure which DB will be associated. diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestDatabaseClientWithCertBasedAuth.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestDatabaseClientWithCertBasedAuth.java index 42d48be1a..2aad2e0ea 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestDatabaseClientWithCertBasedAuth.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestDatabaseClientWithCertBasedAuth.java @@ -69,7 +69,7 @@ public static void setUpBeforeClass() throws Exception { createRESTServerWithDB(server, port); createRESTUser("portal", "seekrit", "admin", "rest-admin", "rest-writer", "rest-reader"); associateRESTServerWithDB(setupServer, "Security"); - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("admin", "admin"); + SecurityContext secContext = newSecurityContext("admin", "admin"); secClient = DatabaseClientFactory.newClient(host, setupPort, secContext, getConnType()); createCACert(); diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestSSLConnection.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestSSLConnection.java index 7b6ae78e9..54019e18d 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestSSLConnection.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/functionaltest/TestSSLConnection.java @@ -221,7 +221,7 @@ public X509Certificate[] getAcceptedIssuers() { // create the client // (note: a real application should use a COMMON, STRICT, or implemented // hostname verifier) - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("rest-admin", "x").withSSLContext(sslContext, new X509TrustManager() { + SecurityContext secContext = newSecurityContext("rest-admin", "x").withSSLContext(sslContext, new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { @@ -285,7 +285,7 @@ public X509Certificate[] getAcceptedIssuers() { // create the client // (note: a real application should use a COMMON, STRICT, or implemented // hostname verifier) - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("rest-admin", "x").withSSLContext(sslContext, new X509TrustManager() { + SecurityContext secContext = newSecurityContext("rest-admin", "x").withSSLContext(sslContext, new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { @@ -349,7 +349,7 @@ public X509Certificate[] getAcceptedIssuers() { // create the client // (note: a real application should use a COMMON, STRICT, or implemented // hostname verifier) - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("rest-admin", "foo").withSSLContext(sslContext, new X509TrustManager() { + SecurityContext secContext = newSecurityContext("rest-admin", "foo").withSSLContext(sslContext, new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { @@ -416,7 +416,7 @@ public X509Certificate[] getAcceptedIssuers() { // create the client // (note: a real application should use a COMMON, STRICT, or implemented // hostname verifier) - SecurityContext secContext = new DatabaseClientFactory.DigestAuthContext("MyFooUser", "x"); + SecurityContext secContext = newSecurityContext("MyFooUser", "x"); secContext.withSSLContext(sslContext, new X509TrustManager() { @Override diff --git a/marklogic-client-api-functionaltests/src/test/resources/test.properties b/marklogic-client-api-functionaltests/src/test/resources/test.properties index 0aa96eb63..2d35d44f9 100644 --- a/marklogic-client-api-functionaltests/src/test/resources/test.properties +++ b/marklogic-client-api-functionaltests/src/test/resources/test.properties @@ -1,3 +1,4 @@ +securityContextType=digest restSSLset=false restHost=localhost restSSLHost=localhost diff --git a/marklogic-client-api/src/main/java/com/marklogic/client/example/cookbook/datamovement/BulkExportWithDataService.java b/marklogic-client-api/src/main/java/com/marklogic/client/example/cookbook/datamovement/BulkExportWithDataService.java index e40d04f02..4ef3815de 100644 --- a/marklogic-client-api/src/main/java/com/marklogic/client/example/cookbook/datamovement/BulkExportWithDataService.java +++ b/marklogic-client-api/src/main/java/com/marklogic/client/example/cookbook/datamovement/BulkExportWithDataService.java @@ -22,10 +22,12 @@ import com.marklogic.client.document.DocumentWriteSet; import com.marklogic.client.document.JSONDocumentManager; import com.marklogic.client.document.TextDocumentManager; +import com.marklogic.client.example.cookbook.Util; import com.marklogic.client.io.DocumentMetadataHandle; import com.marklogic.client.io.StringHandle; -import com.marklogic.client.example.cookbook.Util; -import com.marklogic.client.query.*; +import com.marklogic.client.query.DeleteQueryDefinition; +import com.marklogic.client.query.QueryManager; +import com.marklogic.client.query.StructuredQueryBuilder; import java.io.*; import java.util.concurrent.atomic.AtomicInteger; @@ -47,87 +49,90 @@ public class BulkExportWithDataService { + private final static String COLLECTION = "BulkExportWithDataService"; + private static Util.ExampleProperties properties = getProperties(); - private DatabaseClient dbClient = DatabaseClientFactory.newClient(properties.host, 8012, - new DatabaseClientFactory.DigestAuthContext(properties.writerUser, properties.writerPassword)); - private DatabaseClient dbModulesClient = DatabaseClientSingleton.getAdmin("java-unittest-modules"); - private DataMovementManager moveMgr = dbClient.newDataMovementManager(); + private DatabaseClient dbClient; + private DatabaseClient dbModulesClient; + private DataMovementManager moveMgr; private int count = 100; public static void main(String args[]) throws IOException { - new BulkExportWithDataService().run(); + DatabaseClient dbClient = DatabaseClientFactory.newClient(properties.host, 8012, + new DatabaseClientFactory.DigestAuthContext(properties.writerUser, properties.writerPassword)); + DatabaseClient dbModulesClient = DatabaseClientSingleton.getAdmin("java-unittest-modules"); + new BulkExportWithDataService(dbClient, dbModulesClient).run(); + } + + public BulkExportWithDataService(DatabaseClient dbClient, DatabaseClient modulesClient) { + this.dbClient = dbClient; + this.dbModulesClient = modulesClient; + this.moveMgr = dbClient.newDataMovementManager(); } - private void run() throws IOException { + public void run() throws IOException { setup(); exportJson(); tearDown(); } private void setup() throws IOException { - - writeDocuments(count,"BulkExportWithDataService"); + writeDocuments(count, COLLECTION); writeScriptFile("readJsonDocs.api"); writeScriptFile("readJsonDocs.sjs"); } - private void tearDown(){ - + private void tearDown() { QueryManager queryMgr = dbClient.newQueryManager(); QueryManager queryMgrModules = dbModulesClient.newQueryManager(); DeleteQueryDefinition deletedef = queryMgr.newDeleteDefinition(); - deletedef.setCollections("BulkExportWithDataService"); + deletedef.setCollections(COLLECTION); queryMgr.delete(deletedef); queryMgrModules.delete(deletedef); } - - private void exportJson(){ + private void exportJson() { BulkExportServices bulkExportServices = BulkExportServices.on(dbClient); StructuredQueryBuilder structuredQueryBuilder = new StructuredQueryBuilder(); AtomicInteger docCount = new AtomicInteger(); - QueryBatcher queryBatcher = moveMgr.newQueryBatcher(structuredQueryBuilder.collection("BulkExportWithDataService")) - .withBatchSize(3) - .withThreadCount(3) - .onQueryFailure(batch -> new InternalError("An exception occured in queryBatcher")) - .onUrisReady(batch -> (bulkExportServices.readJsonDocs(Stream.of(batch.getItems()))) - .forEach(reader -> { - try { - BufferedReader br = new BufferedReader(reader); - StringBuilder out = new StringBuilder(); - String line; - while ((line = br.readLine()) != null) { - out.append(line); - docCount.getAndIncrement(); - } - System.out.println(out.toString()); - reader.close(); - } - catch (IOException e) { - e.printStackTrace(); - } - })); + QueryBatcher queryBatcher = moveMgr + .newQueryBatcher(structuredQueryBuilder.collection(COLLECTION)) + .withBatchSize(10) + .withThreadCount(3) + .onUrisReady(batch -> { + try { + Stream docStream = bulkExportServices.readJsonDocs(Stream.of(batch.getItems())); + docStream.forEach(doc -> docCount.getAndIncrement()); + } catch (Exception ex) { + ex.printStackTrace(); + } + }); + moveMgr.startJob(queryBatcher); queryBatcher.awaitCompletion(); moveMgr.stopJob(queryBatcher); - if(docCount.get()!= count) - throw new InternalError("Mismatch between the number of documents written and read from the database."); + if (docCount.get() != count) { + throw new RuntimeException("Expected " + count + " documents; found: " + docCount.get()); + } } private void writeDocuments(int count, String collection) { JSONDocumentManager manager = dbClient.newJSONDocumentManager(); - DocumentMetadataHandle metadata = new DocumentMetadataHandle().withCollections(collection); - - for(int i=1;i<=count;i++) { - StringHandle data = new StringHandle("{\"docNum\":"+i+", \"docName\":\"doc"+i+"\"}"); - String docId = "/example/cookbook/bulkExport/"+i+".json"; - manager.write(docId, metadata, data); + DocumentMetadataHandle metadata = new DocumentMetadataHandle() + .withCollections(collection) + .withPermission("rest-reader", DocumentMetadataHandle.Capability.READ, DocumentMetadataHandle.Capability.UPDATE); + DocumentWriteSet writeSet = manager.newWriteSet(); + for (int i = 1; i <= count; i++) { + StringHandle data = new StringHandle("{\"docNum\":" + i + ", \"docName\":\"doc" + i + "\"}"); + String docId = "/example/cookbook/bulkExport/" + i + ".json"; + writeSet.add(docId, metadata, data); } + manager.write(writeSet); } private void writeScriptFile(String fileName) throws IOException { - try (InputStream in = (Util.openStream("scripts"+ File.separator+"bulkExport"+File.separator+fileName))) { + try (InputStream in = (Util.openStream("scripts" + File.separator + "bulkExport" + File.separator + fileName))) { final TextDocumentManager modMgr = dbModulesClient.newTextDocumentManager(); final DocumentWriteSet writeSet = modMgr.newWriteSet(); @@ -143,8 +148,8 @@ private void writeScriptFile(String fileName) throws IOException { out.append(line); } - writeSet.add("/example/cookbook/bulkExport/"+fileName, metadata, - new StringHandle(out.toString())); + writeSet.add("/example/cookbook/bulkExport/" + fileName, metadata, + new StringHandle(out.toString())); modMgr.write(writeSet); } diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/BitemporalTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/BitemporalTest.java index d3238157b..7de601e62 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/BitemporalTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/BitemporalTest.java @@ -319,7 +319,7 @@ public void c_testOther() throws Exception { static public void cleanUp() { - DatabaseClient client = DatabaseClientFactory.newClient(Common.HOST, Common.PORT, new DigestAuthContext(Common.SERVER_ADMIN_USER, Common.SERVER_ADMIN_PASS)); + DatabaseClient client = Common.newServerAdminClient(); try { QueryManager queryMgr = client.newQueryManager(); queryMgr.setPageLength(1000); diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/Common.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/Common.java index 120a5116e..4cb5f9b7e 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/Common.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/Common.java @@ -59,8 +59,8 @@ public class Common { final public static String HOST = System.getProperty("TEST_HOST", "localhost"); final public static int PORT = Integer.parseInt(System.getProperty("TEST_PORT", "8012")); + final public static String SECURITY_CONTEXT_TYPE = System.getProperty("TEST_SECURITY_CONTEXT_TYPE", "digest"); final public static boolean WITH_WAIT = Boolean.parseBoolean(System.getProperty("TEST_WAIT", "false")); - final public static int MODULES_WAIT = Integer.parseInt(System.getProperty("TEST_MODULES_WAIT", WITH_WAIT ? "1200" : "0")); final public static int PROPERTY_WAIT = Integer.parseInt(System.getProperty("TEST_PROPERTY_WAIT", WITH_WAIT ? "8200" : "0")); final public static DatabaseClient.ConnectionType CONNECTION_TYPE = @@ -106,40 +106,73 @@ public static DatabaseClient newClient(String databaseName) { public static DatabaseClient newClientAsUser(String username) { return newClientAsUser(username, null); } + + public static DatabaseClientFactory.SecurityContext newSecurityContext(String username, String password) { + if ("basic".equalsIgnoreCase(SECURITY_CONTEXT_TYPE)) { + return new DatabaseClientFactory.BasicAuthContext(username, password); + } + return new DatabaseClientFactory.DigestAuthContext(username, password); + } + public static DatabaseClient newClientAsUser(String username, String databaseName) { - System.out.println("Connecting to: " + Common.HOST); - return DatabaseClientFactory.newClient(Common.HOST, Common.PORT, databaseName, - new DatabaseClientFactory.DigestAuthContext(username, Common.PASS), - CONNECTION_TYPE); + return makeNewClient(Common.HOST, Common.PORT, databaseName, newSecurityContext(username, Common.PASS)); + } + + public static DatabaseClient makeNewClient(String host, int port, DatabaseClientFactory.SecurityContext securityContext) { + return makeNewClient(host, port, null, securityContext); + } + + public static DatabaseClient makeNewClient(String host, int port, String database, DatabaseClientFactory.SecurityContext securityContext) { + return makeNewClient(host, port, database, securityContext, CONNECTION_TYPE); + } + + public static DatabaseClient makeNewClient(String host, int port, DatabaseClientFactory.SecurityContext securityContext, + DatabaseClient.ConnectionType connectionType) { + return makeNewClient(host, port, null, securityContext, connectionType); } + + /** + * Intent is to route every call to this method so that changes to how newClient works can easily be made in the + * future. + * + * @param host + * @param port + * @param database + * @param securityContext + * @param connectionType + * @return + */ + public static DatabaseClient makeNewClient(String host, int port, String database, + DatabaseClientFactory.SecurityContext securityContext, + DatabaseClient.ConnectionType connectionType) { + System.out.println("Connecting to: " + Common.HOST + ":" + port); + return DatabaseClientFactory.newClient(host, port, database, securityContext, connectionType); + } + public static DatabaseClient newAdminClient() { return newAdminClient(null); } public static DatabaseClient newAdminClient(String databaseName) { - return DatabaseClientFactory.newClient(Common.HOST, Common.PORT, databaseName, - new DigestAuthContext(Common.REST_ADMIN_USER, Common.REST_ADMIN_PASS), - CONNECTION_TYPE); + return makeNewClient(Common.HOST, Common.PORT, databaseName, + newSecurityContext(Common.REST_ADMIN_USER, Common.REST_ADMIN_PASS), CONNECTION_TYPE); } public static DatabaseClient newServerAdminClient() { return newServerAdminClient(null); } public static DatabaseClient newServerAdminClient(String databaseName) { - return DatabaseClientFactory.newClient(Common.HOST, Common.PORT, databaseName, - new DigestAuthContext(Common.SERVER_ADMIN_USER, Common.SERVER_ADMIN_PASS), - CONNECTION_TYPE); + return makeNewClient(Common.HOST, Common.PORT, databaseName, + newSecurityContext(Common.SERVER_ADMIN_USER, Common.SERVER_ADMIN_PASS), CONNECTION_TYPE); } public static DatabaseClient newEvalClient() { return newEvalClient(null); } public static DatabaseClient newEvalClient(String databaseName) { - return DatabaseClientFactory.newClient( - Common.HOST, Common.PORT, databaseName, new DigestAuthContext(Common.EVAL_USER, Common.EVAL_PASS), - CONNECTION_TYPE); + return makeNewClient(Common.HOST, Common.PORT, databaseName, + newSecurityContext(Common.EVAL_USER, Common.EVAL_PASS), CONNECTION_TYPE); } public static DatabaseClient newReadOnlyClient() { - return DatabaseClientFactory.newClient( - Common.HOST, Common.PORT, new DigestAuthContext(Common.READ_ONLY_USER, Common.READ_ONLY_PASS), - CONNECTION_TYPE); + return makeNewClient(Common.HOST, Common.PORT, + newSecurityContext(Common.READ_ONLY_USER, Common.READ_ONLY_PASS), CONNECTION_TYPE); } public static MarkLogicVersion getMarkLogicVersion() { @@ -233,9 +266,6 @@ public static Document testStringToDocument(String document) { throw new RuntimeException(e); } } - public static void modulesWait() { - waitFor(MODULES_WAIT); - } public static void propertyWait() { waitFor(PROPERTY_WAIT); } diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/DatabaseClientFactoryTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/DatabaseClientFactoryTest.java index 5f3a3fd2f..04d969e81 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/DatabaseClientFactoryTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/DatabaseClientFactoryTest.java @@ -169,8 +169,8 @@ public void testConfigurator() { DatabaseClientFactory.addConfigurator(configurator); - DatabaseClient client = DatabaseClientFactory.newClient( - Common.HOST, Common.PORT, new DigestAuthContext(Common.USER, Common.PASS)); + DatabaseClient client = Common.makeNewClient( + Common.HOST, Common.PORT, Common.newSecurityContext(Common.USER, Common.PASS)); try { assertTrue("Factory did not apply custom configurator", configurator.isConfigured); OkHttpClient okClient = (OkHttpClient) client.getClientImplementation(); diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/DatabaseClientTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/DatabaseClientTest.java index be438eb97..8064944b7 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/DatabaseClientTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/DatabaseClientTest.java @@ -124,8 +124,8 @@ public void testGetClientImplementationObject() { @Test public void testCheckConnectionWithValidUser() { - DatabaseClient marklogic = DatabaseClientFactory.newClient(Common.HOST, - 8000, "unittest-nodeapi", new DatabaseClientFactory.DigestAuthContext( + DatabaseClient marklogic = Common.makeNewClient(Common.HOST, + 8000, "unittest-nodeapi", Common.newSecurityContext( Common.SERVER_ADMIN_USER, Common.SERVER_ADMIN_PASS)); ConnectionResult connResult = marklogic.checkConnection(); @@ -135,9 +135,8 @@ public void testCheckConnectionWithValidUser() { @Test public void testCheckConnectionWithInvalidUser() { - DatabaseClient marklogic = DatabaseClientFactory.newClient(Common.HOST, - 8000, "unittest-nodeapi", new DatabaseClientFactory.DigestAuthContext( - "invalid", "invalid")); + DatabaseClient marklogic = Common.makeNewClient(Common.HOST, + 8000, "unittest-nodeapi", Common.newSecurityContext("invalid", "invalid")); ConnectionResult connResult = marklogic.checkConnection(); assertFalse(connResult.isConnected()); diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/FailedRequestTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/FailedRequestTest.java index 5837e9318..84241f147 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/FailedRequestTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/FailedRequestTest.java @@ -121,8 +121,7 @@ public void testFailedRequestParsing() { @Test public void testErrorOnNonREST() throws ForbiddenUserException { - DatabaseClient badClient = DatabaseClientFactory.newClient(Common.HOST, - 8001, new DigestAuthContext(Common.USER, Common.PASS)); + DatabaseClient badClient = Common.makeNewClient(Common.HOST, 8001, Common.newSecurityContext(Common.USER, Common.PASS)); ServerConfigurationManager serverConfig = badClient .newServerConfigManager(); diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/HandleAsTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/HandleAsTest.java index 0c3475a04..8b6dfe35f 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/HandleAsTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/HandleAsTest.java @@ -392,15 +392,14 @@ private DatabaseClientFactory.Bean makeClientFactory() { clientFactoryBean.setAuthentication(Authentication.DIGEST); return clientFactoryBean; } - + private DatabaseClientFactory.Bean makeClientBeanFactory() { - DatabaseClientFactory.Bean clientFactoryBean = new DatabaseClientFactory.Bean(); - DatabaseClientFactory.DigestAuthContext clientFactoryContext = new DatabaseClientFactory.DigestAuthContext(Common.USER, Common.PASS); - clientFactoryBean.setHost(Common.HOST); - clientFactoryBean.setPort(Common.PORT); - clientFactoryBean.setSecurityContext(clientFactoryContext); - return clientFactoryBean; - } + DatabaseClientFactory.Bean clientFactoryBean = new DatabaseClientFactory.Bean(); + clientFactoryBean.setHost(Common.HOST); + clientFactoryBean.setPort(Common.PORT); + clientFactoryBean.setSecurityContext(Common.newSecurityContext(Common.USER, Common.PASS)); + return clientFactoryBean; + } static public class BufferHandle diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/InvalidUserTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/InvalidUserTest.java index f87f0418a..410a2b0b1 100755 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/InvalidUserTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/InvalidUserTest.java @@ -30,8 +30,8 @@ public class InvalidUserTest { @Test public void testInvalidUserAuth() { // create the client - DatabaseClient client = DatabaseClientFactory.newClient( - Common.HOST, Common.PORT, new DigestAuthContext("MyFooUser", "x")); + DatabaseClient client = Common.makeNewClient(Common.HOST, Common.PORT, + Common.newSecurityContext("MyFooUser", "x")); String expectedException = "com.marklogic.client.FailedRequestException: " + diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/SSLTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/SSLTest.java index 69b48b0a6..393bb72ac 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/SSLTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/SSLTest.java @@ -67,7 +67,7 @@ public void testSSLAuth() throws NoSuchAlgorithmException, KeyManagementExceptio sslContext.init(null, trustMgrs, null); // create the client - DatabaseClient client = DatabaseClientFactory.newClient(Common.HOST, Common.PORT, new DigestAuthContext("rest-writer", "x") + DatabaseClient client = Common.makeNewClient(Common.HOST, Common.PORT, Common.newSecurityContext("rest-writer", "x") .withSSLContext(sslContext, x509trustMgr) .withSSLHostnameVerifier(SSLHostnameVerifier.ANY)); diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/SemanticsPermissionsTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/SemanticsPermissionsTest.java index 0fe6e3252..62a7683c7 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/SemanticsPermissionsTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/SemanticsPermissionsTest.java @@ -43,10 +43,10 @@ public class SemanticsPermissionsTest { private static GraphManager gmgr; private static String graphUri = "SemanticsPermissionsTest"; - private static DatabaseClient readPrivilegedClient = DatabaseClientFactory.newClient( - Common.HOST, Common.PORT, new DigestAuthContext(Common.READ_PRIVILIGED_USER, Common.READ_PRIVILIGED_PASS)); - private static DatabaseClient writePrivilegedClient = DatabaseClientFactory.newClient( - Common.HOST, Common.PORT, new DigestAuthContext(Common.WRITE_PRIVILIGED_USER, Common.WRITE_PRIVILIGED_PASS)); + private static DatabaseClient readPrivilegedClient = Common.makeNewClient( + Common.HOST, Common.PORT, Common.newSecurityContext(Common.READ_PRIVILIGED_USER, Common.READ_PRIVILIGED_PASS)); + private static DatabaseClient writePrivilegedClient = Common.makeNewClient( + Common.HOST, Common.PORT, Common.newSecurityContext(Common.WRITE_PRIVILIGED_USER, Common.WRITE_PRIVILIGED_PASS)); @BeforeClass public static void beforeClass() { diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/datamovement/JacksonCSVSplitterTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/datamovement/JacksonCSVSplitterTest.java index c877d3db5..deb0c4fd1 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/datamovement/JacksonCSVSplitterTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/datamovement/JacksonCSVSplitterTest.java @@ -52,8 +52,7 @@ public class JacksonCSVSplitterTest { @Before public void setUp() { - client = DatabaseClientFactory.newClient(Common.HOST, 8012, - new DatabaseClientFactory.DigestAuthContext("rest-admin", "x")); + client = Common.makeNewClient(Common.HOST, Common.PORT, Common.newSecurityContext("rest-admin", "x")); moveMgr = client.newDataMovementManager(); } diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/example/cookbook/BulkExportWithDataServiceTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/example/cookbook/BulkExportWithDataServiceTest.java index 69136f732..8bd6a79ea 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/example/cookbook/BulkExportWithDataServiceTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/example/cookbook/BulkExportWithDataServiceTest.java @@ -16,11 +16,17 @@ package com.marklogic.client.test.example.cookbook; import com.marklogic.client.example.cookbook.datamovement.BulkExportWithDataService; +import com.marklogic.client.test.Common; import org.junit.Test; public class BulkExportWithDataServiceTest { + @Test public void testMain() throws Exception { - BulkExportWithDataService.main(new String[0]); + new BulkExportWithDataService( + Common.connect(), + Common.newEvalClient("java-unittest-modules") + ).run(); } + }