blob: 7bdd4b9faa02ede56d8a4bfef125af7a386646ed [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;
import org.apache.jackrabbit.oak.plugins.document.util.Utils;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.junit.Test;
import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
import static org.apache.jackrabbit.oak.plugins.document.TestUtils.NO_BINARY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class SplitOperationsTest extends BaseDocumentMKTest {
private static final String ROOT_ID = Utils.getIdFromPath("/");
@Override
public void initDocumentMK() {
// prevent automatic background operations
mk = new DocumentMK.Builder().setAsyncDelay(0).open();
}
@Test
public void malformedStalePrev() throws Exception {
DocumentNodeStore ns = getDocumentMK().getNodeStore();
DocumentStore ds = ns.getDocumentStore();
for (int i = 0; i < 5; i++) {
NodeBuilder nb = ns.getRoot().builder();
nb.setProperty("p", "v" + i);
ns.merge(nb, EmptyHook.INSTANCE, CommitInfo.EMPTY);
}
// add a dangling _stalePrev
UpdateOp op = new UpdateOp(ROOT_ID, false);
NodeDocument.setStalePrevious(op, ns.newRevision(), 0);
assertNotNull(ds.findAndUpdate(NODES, op));
NodeDocument doc = ds.find(NODES, ROOT_ID);
assertNotNull(doc);
for (UpdateOp updateOp : SplitOperations.forDocument(
doc, ns, ns.getHeadRevision(), NO_BINARY, 3)) {
ds.createOrUpdate(NODES, updateOp);
}
doc = ds.find(NODES, ROOT_ID);
assertNotNull(doc);
// now _stalePrev entry must be gone
assertEquals(0, doc.getStalePrev().size());
}
}