Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.marklogic.client.fastfunctest;

import com.marklogic.client.ContentNoVersionException;
import com.marklogic.client.FailedRequestException;
import com.marklogic.client.admin.ServerConfigurationManager;
import com.marklogic.client.admin.ServerConfigurationManager.UpdatePolicy;
Expand All @@ -29,6 +30,8 @@

import java.io.File;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class TestBug18920 extends AbstractFunctionalTest {
Expand Down Expand Up @@ -81,23 +84,9 @@ public void testBug18920() {
String docUri = desc.getUri();
System.out.println(docUri);

String exception = "";
String statusCode = "";
String expectedException = "com.marklogic.client.FailedRequestException: Local message: Content version required to write document. Server Message: RESTAPI-CONTENTNOVERSION: (err:FOER0000) No content version supplied: uri /bug18920/xml-original.xml";
int expCode = 0;
// update document with no content version
try {
docMgr.write(docUri, handle);
} catch (FailedRequestException e) {
exception = e.toString();
statusCode = e.getFailedRequest().getMessageCode();
expCode = e.getFailedRequest().getStatusCode();
}
System.out.println("Exception is " + exception);
System.out.println("Status message --- codenumber are " + statusCode + " --- " + expCode);
assertTrue( statusCode.contains("RESTAPI-CONTENTNOVERSION"));
assertTrue( expCode == 428);
assertTrue( exception.contains(expectedException));
ContentNoVersionException ex = assertThrows(ContentNoVersionException.class, () -> docMgr.write(docUri, handle));
assertEquals(428, ex.getServerStatusCode());
}

@AfterAll
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package com.marklogic.client.fastfunctest;

import com.fasterxml.jackson.databind.JsonNode;
import com.marklogic.client.ContentNoVersionException;
import com.marklogic.client.ContentWrongVersionException;
import com.marklogic.client.DatabaseClient;
import com.marklogic.client.FailedRequestException;
import com.marklogic.client.ResourceNotFoundException;
Expand Down Expand Up @@ -46,7 +48,7 @@
import java.security.NoSuchAlgorithmException;
import java.time.Instant;
import java.time.temporal.ChronoUnit;

import java.util.concurrent.atomic.AtomicReference;


public class TestOptimisticLocking extends AbstractFunctionalTest {
Expand Down Expand Up @@ -109,24 +111,10 @@ public void testRequired() throws KeyManagementException, NoSuchAlgorithmExcepti

// create document descriptor
DocumentDescriptor desc = docMgr.newDescriptor(docId);
AtomicReference<DocumentDescriptor> descRef = new AtomicReference<>(desc);

desc.setVersion(badVersion);

String exception = "";
String expectedException = "com.marklogic.client.FailedRequestException: Local message: Content version must match to write document. Server Message: RESTAPI-CONTENTWRONGVERSION: (err:FOER0000) Content version mismatch: uri /optimistic-locking/xml-original.xml doesn't match if-match: 1111";

// CREATE
// write document with bad version
try
{
docMgr.write(desc, handle);
} catch (FailedRequestException e) {
exception = e.toString();
}

boolean isExceptionThrown = exception.contains(expectedException);
assertTrue( isExceptionThrown);
System.out.println(exception);
assertThrows(ContentWrongVersionException.class, () -> docMgr.write(descRef.get(), handle));

// write document with unknown version
desc.setVersion(DocumentDescriptor.UNKNOWN_VERSION);
Expand All @@ -151,36 +139,14 @@ public void testRequired() throws KeyManagementException, NoSuchAlgorithmExcepti

// update with bad version
desc.setVersion(badVersion);

String updateException = "";
String expectedUpdateException = "com.marklogic.client.FailedRequestException: Local message: Content version must match to write document. Server Message: RESTAPI-CONTENTWRONGVERSION: (err:FOER0000) Content version mismatch: uri /optimistic-locking/xml-original.xml has current version";

try {
docMgr.write(desc, updateHandle);
} catch (FailedRequestException e) {
updateException = e.toString();
}
System.out.println(updateException);
boolean isUpdateExceptionThrown = updateException.contains(expectedUpdateException);
assertTrue( isUpdateExceptionThrown);
assertThrows(ContentWrongVersionException.class, () -> docMgr.write(descRef.get(), updateHandle));

// update with unknown version
desc.setVersion(DocumentDescriptor.UNKNOWN_VERSION);

String updateUnknownException = "";
String expectedUpdateUnknownException = "com.marklogic.client.FailedRequestException: Local message: Content version required to write document. Server Message: RESTAPI-CONTENTNOVERSION: (err:FOER0000) No content version supplied: uri /optimistic-locking/xml-original.xml";

try {
docMgr.write(desc, updateHandle);
} catch (FailedRequestException e) {
updateUnknownException = e.toString();
}

boolean isUpdateUnknownExceptionThrown = updateUnknownException.contains(expectedUpdateUnknownException);
System.out.println(updateUnknownException);
assertTrue( isUpdateUnknownExceptionThrown);
assertThrows(ContentNoVersionException.class, () -> docMgr.write(descRef.get(), updateHandle));

desc = docMgr.exists(docId);
descRef.set(desc);
goodVersion = desc.getVersion();

System.out.println("version before update: " + goodVersion);
Expand All @@ -197,35 +163,11 @@ public void testRequired() throws KeyManagementException, NoSuchAlgorithmExcepti
// DELETE
// delete using bad version
desc.setVersion(badVersion);

String deleteException = "";
String expectedDeleteException = "com.marklogic.client.FailedRequestException: Local message: Content version must match to delete document. Server Message: RESTAPI-CONTENTWRONGVERSION: (err:FOER0000) Content version mismatch: uri /optimistic-locking/xml-original.xml has current version";

try {
docMgr.delete(desc);
} catch (FailedRequestException e) {
deleteException = e.toString();
}

boolean isDeleteExceptionThrown = deleteException.contains(expectedDeleteException);
System.out.println("Delete exception" + deleteException);
assertTrue( isDeleteExceptionThrown);
assertThrows(ContentWrongVersionException.class, () -> docMgr.delete(descRef.get()));

// delete using unknown version
desc.setVersion(DocumentDescriptor.UNKNOWN_VERSION);

String deleteUnknownException = "";
String expectedDeleteUnknownException = "com.marklogic.client.FailedRequestException: Local message: Content version required to delete document. Server Message: RESTAPI-CONTENTNOVERSION: (err:FOER0000) No content version supplied: uri /optimistic-locking/xml-original.xml";

try {
docMgr.delete(desc);
} catch (FailedRequestException e) {
deleteUnknownException = e.toString();
}

boolean isDeleteUnknownExceptionThrown = deleteUnknownException.contains(expectedDeleteUnknownException);
System.out.println("Delete exception" + deleteUnknownException);
assertTrue( isDeleteUnknownExceptionThrown);
assertThrows(ContentNoVersionException.class, () -> docMgr.delete(descRef.get()));

// delete using good version
desc = docMgr.exists(docId);
Expand Down Expand Up @@ -291,20 +233,7 @@ public void testOptionalWithUnknownVersion() throws KeyManagementException, NoSu
DocumentDescriptor desc = docMgr.newDescriptor(docId);

desc.setVersion(badVersion);

String exception = "";
String expectedException = "com.marklogic.client.FailedRequestException: Local message: Content version must match to write document. Server Message: RESTAPI-CONTENTWRONGVERSION";

// CREATE
// write document with bad version
try {
docMgr.write(desc, handle);
} catch (FailedRequestException e) {
exception = e.toString();
}

boolean isExceptionThrown = exception.contains(expectedException);
assertTrue( isExceptionThrown);
assertThrows(ContentWrongVersionException.class, () -> docMgr.write(desc, handle));

// write document with unknown version
desc.setVersion(DocumentDescriptor.UNKNOWN_VERSION);
Expand All @@ -329,18 +258,7 @@ public void testOptionalWithUnknownVersion() throws KeyManagementException, NoSu

// update with bad version
desc.setVersion(badVersion);

String updateException = "";
String expectedUpdateException = "com.marklogic.client.FailedRequestException: Local message: Content version must match to write document. Server Message: RESTAPI-CONTENTWRONGVERSION";

try {
docMgr.write(desc, updateHandle);
} catch (FailedRequestException e) {
updateException = e.toString();
}

boolean isUpdateExceptionThrown = updateException.contains(expectedUpdateException);
assertTrue( isUpdateExceptionThrown);
assertThrows(ContentWrongVersionException.class, () -> docMgr.write(desc, updateHandle));

// update with unknown version
desc.setVersion(DocumentDescriptor.UNKNOWN_VERSION);
Expand All @@ -366,18 +284,7 @@ public void testOptionalWithUnknownVersion() throws KeyManagementException, NoSu
// DELETE
// delete using bad version
desc.setVersion(badVersion);

String deleteException = "";
String expectedDeleteException = "com.marklogic.client.FailedRequestException: Local message: Content version must match to delete document";

try {
docMgr.delete(desc);
} catch (FailedRequestException e) {
deleteException = e.toString();
}

boolean isDeleteExceptionThrown = deleteException.contains(expectedDeleteException);
assertTrue( isDeleteExceptionThrown);
assertThrows(ContentWrongVersionException.class, () -> docMgr.delete(desc));

// delete using unknown version
desc.setVersion(DocumentDescriptor.UNKNOWN_VERSION);
Expand Down Expand Up @@ -441,21 +348,10 @@ public void testOptionalWithGoodVersion() throws KeyManagementException, NoSuchA
// create document descriptor
DocumentDescriptor desc = docMgr.newDescriptor(docId);

desc.setVersion(badVersion);

String exception = "";
String expectedException = "com.marklogic.client.FailedRequestException: Local message: Content version must match to write document. Server Message: RESTAPI-CONTENTWRONGVERSION";

// CREATE
// write document with bad version
try {
docMgr.write(desc, handle);
} catch (FailedRequestException e) {
exception = e.toString();
}

boolean isExceptionThrown = exception.contains(expectedException);
assertTrue( isExceptionThrown);
desc.setVersion(badVersion);
assertThrows(ContentWrongVersionException.class, () -> docMgr.write(desc, handle));

// write document with unknown version
desc.setVersion(DocumentDescriptor.UNKNOWN_VERSION);
Expand All @@ -480,18 +376,7 @@ public void testOptionalWithGoodVersion() throws KeyManagementException, NoSuchA

// update with bad version
desc.setVersion(badVersion);

String updateException = "";
String expectedUpdateException = "com.marklogic.client.FailedRequestException: Local message: Content version must match to write document. Server Message: RESTAPI-CONTENTWRONGVERSION";

try {
docMgr.write(desc, updateHandle);
} catch (FailedRequestException e) {
updateException = e.toString();
}

boolean isUpdateExceptionThrown = updateException.contains(expectedUpdateException);
assertTrue( isUpdateExceptionThrown);
assertThrows(ContentWrongVersionException.class, () -> docMgr.write(desc, updateHandle));

// update with good version
desc.setVersion(goodVersion);
Expand All @@ -517,18 +402,7 @@ public void testOptionalWithGoodVersion() throws KeyManagementException, NoSuchA
// DELETE
// delete using bad version
desc.setVersion(badVersion);

String deleteException = "";
String expectedDeleteException = "com.marklogic.client.FailedRequestException: Local message: Content version must match to delete document";

try {
docMgr.delete(desc);
} catch (FailedRequestException e) {
deleteException = e.toString();
}

boolean isDeleteExceptionThrown = deleteException.contains(expectedDeleteException);
assertTrue( isDeleteExceptionThrown);
assertThrows(ContentWrongVersionException.class, () -> docMgr.delete(desc));

// delete using good version
desc.setVersion(goodVersion);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.marklogic.client;

import com.marklogic.client.impl.FailedRequest;

/**
* Represents a "RESTAPI-CONTENTNOVERSION" error from the REST API that can occur when using optimistic locking.
*
* @since 6.3.0
*/
public class ContentNoVersionException extends FailedRequestException {

public ContentNoVersionException(String message, FailedRequest failedRequest) {
super(message, failedRequest);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.marklogic.client;

import com.marklogic.client.impl.FailedRequest;

/**
* Represents a "RESTAPI-CONTENTWRONGVERSION" error from the REST API that can occur when using optimistic locking.
*
* @since 6.3.0
*/
public class ContentWrongVersionException extends FailedRequestException {

public ContentWrongVersionException(String message, FailedRequest failedRequest) {
super(message, failedRequest);
}

}
Loading