blob: 73a1d9d49d040042793289e1a7395c5c93d212eb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.oak.plugins.document.mongo;
import org.apache.jackrabbit.oak.plugins.document.Collection;
import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
import org.apache.jackrabbit.oak.plugins.document.DocumentStoreException;
import org.apache.jackrabbit.oak.plugins.document.MongoUtils;
import org.apache.jackrabbit.oak.plugins.document.NodeDocument;
import org.apache.jackrabbit.oak.plugins.document.Path;
import org.apache.jackrabbit.oak.plugins.document.Revision;
import org.apache.jackrabbit.oak.plugins.document.UpdateOp;
import org.apache.jackrabbit.oak.plugins.document.util.Utils;
import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static java.util.Collections.singletonList;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class MongoDBExceptionTest {
private MongoDocumentStore store;
private String exceptionMsg;
private MongoTestClient client;
@BeforeClass
public static void checkMongoAvailable() {
Assume.assumeTrue(MongoUtils.isAvailable());
}
@Before
public void before() {
MongoUtils.dropCollections(MongoUtils.DB);
client = new MongoTestClient(MongoUtils.URL);
store = new MongoDocumentStore(client, client.getDatabase(MongoUtils.DB),
new DocumentMK.Builder());
}
@After
public void after() {
MongoUtils.dropCollections(MongoUtils.DB);
}
@Test
public void idInExceptionMessage() {
String id = Utils.getIdFromPath("/foo");
UpdateOp insert = new UpdateOp(id, true);
assertTrue(store.create(Collection.NODES, singletonList(insert)));
UpdateOp op = new UpdateOp(id, false);
NodeDocument.setModified(op, new Revision(System.currentTimeMillis(), 0, 1));
exceptionMsg = "findAndUpdate failed";
setExceptionMsg();
try {
store.findAndUpdate(Collection.NODES, op);
fail("DocumentStoreException expected");
} catch (DocumentStoreException e) {
assertTrue(e.getMessage().contains(exceptionMsg));
assertTrue("Exception message does not contain id: '" + e.getMessage() + "'",
e.getMessage().contains(id));
}
exceptionMsg = "createOrUpdate failed";
setExceptionMsg();
try {
store.createOrUpdate(Collection.NODES, op);
fail("DocumentStoreException expected");
} catch (DocumentStoreException e) {
assertTrue(e.getMessage().contains(exceptionMsg));
assertTrue("Exception message does not contain id: '" + e.getMessage() + "'",
e.getMessage().contains(id));
}
exceptionMsg = "createOrUpdate (multiple) failed";
setExceptionMsg();
try {
store.createOrUpdate(Collection.NODES, singletonList(op));
fail("DocumentStoreException expected");
} catch (DocumentStoreException e) {
assertTrue(e.getMessage().contains(exceptionMsg));
assertTrue("Exception message does not contain id: '" + e.getMessage() + "'",
e.getMessage().contains(id));
}
exceptionMsg = "find failed";
setExceptionMsg();
try {
store.find(Collection.NODES, id);
fail("DocumentStoreException expected");
} catch (DocumentStoreException e) {
assertThat(e.getMessage(), containsString(exceptionMsg));
assertTrue("Exception message does not contain id: '" + e.getMessage() + "'",
e.getMessage().contains(id));
}
Path foo = Path.fromString("/foo");
String fromKey = Utils.getKeyLowerLimit(foo);
String toKey = Utils.getKeyUpperLimit(foo);
exceptionMsg = "query failed";
setExceptionMsg();
try {
store.query(Collection.NODES, fromKey, toKey, 100);
fail("DocumentStoreException expected");
} catch (DocumentStoreException e) {
assertThat(e.getMessage(), containsString(exceptionMsg));
assertTrue("Exception message does not contain id: '" + e.getMessage() + "'",
e.getMessage().contains(fromKey));
assertTrue("Exception message does not contain id: '" + e.getMessage() + "'",
e.getMessage().contains(toKey));
}
}
private void setExceptionMsg() {
client.setExceptionBeforeUpdate(exceptionMsg);
client.setExceptionBeforeQuery(exceptionMsg);
}
}