/* * Copyright (c) 2016 Nuxeo SA (http://nuxeo.com/) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Benoit Delbosc */ package org.nuxeo.ecm.core.storage.mongodb; import static org.junit.Assert.assertEquals; import static org.nuxeo.ecm.core.storage.dbs.DBSDocument.KEY_ID; import static org.nuxeo.ecm.core.storage.mongodb.MongoDBRepository.MONGODB_SET; import org.junit.Test; import org.nuxeo.ecm.core.storage.mongodb.MongoDBConverter.UpdateBuilder; public class TestMongoUpdateConflict { protected UpdateBuilder newUpdateBuilder() { UpdateBuilder ub = new MongoDBConverter(KEY_ID).new UpdateBuilder(); ub.newUpdate(); return ub; } @Test public void testEmpty() throws Exception { UpdateBuilder ulb = newUpdateBuilder(); assertEquals(1, ulb.updates.size()); } @Test public void testComplexPropNoConflict() throws Exception { UpdateBuilder ub = newUpdateBuilder(); ub.update(MONGODB_SET, "foo.0.bar", "val"); ub.update(MONGODB_SET, "foo.0.zoo", "val"); assertEquals(1, ub.updates.size()); } @Test public void testComplexPropNoConflict2() throws Exception { UpdateBuilder ub = newUpdateBuilder(); ub.update(MONGODB_SET, "foo.0.bar.zoo.x", "val"); ub.update(MONGODB_SET, "foo.0.bar.zoo.y", "val"); assertEquals(1, ub.updates.size()); } @Test public void testComplexPropNoConflict3() throws Exception { UpdateBuilder ub = newUpdateBuilder(); ub.update(MONGODB_SET, "foo.0.bar.zoo.x", "val"); ub.update(MONGODB_SET, "foo.0.bar.z", "val"); assertEquals(1, ub.updates.size()); } @Test public void testComplexPropNoConflict4() throws Exception { UpdateBuilder ub = newUpdateBuilder(); ub.update(MONGODB_SET, "foo.0.bar.zoo", "val"); ub.update(MONGODB_SET, "foo.00.bar", "val"); ub.update(MONGODB_SET, "foobar", "val"); ub.update(MONGODB_SET, "foobar1.0.bar.zoo", "val"); ub.update(MONGODB_SET, "foo.1.0.bar.zoo", "val"); ub.update(MONGODB_SET, "foo.bar", "val"); ub.update(MONGODB_SET, "bar.foo", "val"); ub.update(MONGODB_SET, "zz", "val"); assertEquals(1, ub.updates.size()); } @Test public void testConflictEqual() throws Exception { UpdateBuilder ub = newUpdateBuilder(); ub.update(MONGODB_SET, "foo.0.bar", "val"); ub.update(MONGODB_SET, "foo.0.bar", "val2"); assertEquals(2, ub.updates.size()); } @Test public void testConflictEqual2() throws Exception { UpdateBuilder ub = newUpdateBuilder(); ub.update(MONGODB_SET, "foo", "val"); ub.update(MONGODB_SET, "foo", "val2"); assertEquals(2, ub.updates.size()); } @Test public void testConflict1() throws Exception { UpdateBuilder ub = newUpdateBuilder(); ub.update(MONGODB_SET, "foo.0.bar", "val"); ub.update(MONGODB_SET, "foo.0.bar.zoo", "val"); assertEquals(2, ub.updates.size()); } @Test public void testConflict2() throws Exception { UpdateBuilder ub = newUpdateBuilder(); ub.update(MONGODB_SET, "foo.0.bar.zoo", "val"); ub.update(MONGODB_SET, "foo.0.bar", "val"); assertEquals(2, ub.updates.size()); } @Test public void testConflict3() throws Exception { UpdateBuilder ub = newUpdateBuilder(); ub.update(MONGODB_SET, "foo.0.bar.zoo", "val"); ub.update(MONGODB_SET, "foo", "val"); assertEquals(2, ub.updates.size()); } @Test public void testBigComplex() throws Exception { UpdateBuilder ub = newUpdateBuilder(); for (int i = 0; i < 10000; i++) { ub.update(MONGODB_SET, "foo." + i + ".bar.zoo", "val"); } assertEquals(1, ub.updates.size()); } }