Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/LongNameTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/LongNameTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/LongNameTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/LongNameTest.java Fri Dec 16 11:12:53 2016 @@ -20,6 +20,7 @@ package org.apache.jackrabbit.oak.upgrad import static com.google.common.collect.Iterables.cycle; import static com.google.common.collect.Iterables.limit; +import static org.junit.Assert.fail; import java.io.File; import java.io.IOException; @@ -34,17 +35,16 @@ import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.core.RepositoryContext; import org.apache.jackrabbit.core.RepositoryImpl; import org.apache.jackrabbit.core.config.RepositoryConfig; +import org.apache.jackrabbit.oak.plugins.document.DocumentMK; import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore; +import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore; import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore; -import org.apache.jackrabbit.oak.plugins.segment.SegmentStore; import org.apache.jackrabbit.oak.plugins.segment.memory.MemoryStore; -import org.apache.jackrabbit.oak.plugins.document.DocumentMK; import org.apache.jackrabbit.oak.spi.state.NodeState; import org.apache.jackrabbit.oak.spi.state.NodeStore; import org.apache.jackrabbit.oak.stats.Clock; import org.junit.Assert; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; public class LongNameTest { @@ -65,7 +65,8 @@ public class LongNameTest { FileUtils.deleteQuietly(crx2RepoDir); sourceRepositoryConfig = createCrx2Config(crx2RepoDir); - RepositoryImpl sourceRepository = RepositoryImpl.create(sourceRepositoryConfig); + RepositoryContext ctx = RepositoryContext.create(sourceRepositoryConfig); + RepositoryImpl sourceRepository = ctx.getRepository(); Session session = sourceRepository.login(CREDENTIALS); try { Assert.assertTrue(TOO_LONG_NAME.getBytes().length > 150); @@ -80,6 +81,7 @@ public class LongNameTest { Assert.assertTrue(longNameParent.hasNode(TOO_LONG_NAME)); Assert.assertTrue(longNameParent.hasNode(NOT_TOO_LONG_NAME)); + } finally { session.logout(); } @@ -96,7 +98,7 @@ public class LongNameTest { public void longNameShouldBeSkipped() throws RepositoryException, IOException { DocumentNodeStore nodeStore = new DocumentMK.Builder().getNodeStore(); try { - upgrade(nodeStore, true); + upgrade(nodeStore, false, true); NodeState parent = getParent(nodeStore.getRoot()); Assert.assertTrue(parent.hasChildNode(NOT_TOO_LONG_NAME)); @@ -109,39 +111,50 @@ public class LongNameTest { } } + @Test + public void assertNoLongNamesTest() throws IOException, RepositoryException { + RepositoryConfig config = createCrx2Config(crx2RepoDir); + RepositoryContext context = RepositoryContext.create(config); + try { + RepositoryUpgrade upgrade = new RepositoryUpgrade(context, new MemoryNodeStore()); + try { + upgrade.assertNoLongNames(); + fail("Exception should be thrown"); + } catch (RepositoryException e) { + // that's fine + } + } finally { + context.getRepository().shutdown(); + } + } + @Test(expected = RepositoryException.class) - @Ignore public void longNameOnDocumentStoreThrowsAnException() throws RepositoryException, IOException { DocumentNodeStore nodeStore = new DocumentMK.Builder().getNodeStore(); try { - upgrade(nodeStore, false); + upgrade(nodeStore, false, false); } finally { nodeStore.dispose(); } } @Test - @Ignore public void longNameOnSegmentStoreWorksFine() throws RepositoryException, IOException { - SegmentStore memoryStore = new MemoryStore(); - try { - SegmentNodeStore nodeStore = SegmentNodeStore.newSegmentNodeStore(memoryStore).create(); - upgrade(nodeStore, false); + NodeStore nodeStore = SegmentNodeStore.newSegmentNodeStore(new MemoryStore()).create(); + upgrade(nodeStore, false, false); - NodeState parent = getParent(nodeStore.getRoot()); - Assert.assertTrue(parent.hasChildNode(NOT_TOO_LONG_NAME)); - Assert.assertTrue(parent.hasChildNode(TOO_LONG_NAME)); - } finally { - memoryStore.close(); - } + NodeState parent = getParent(nodeStore.getRoot()); + Assert.assertTrue(parent.hasChildNode(NOT_TOO_LONG_NAME)); + Assert.assertTrue(parent.hasChildNode(TOO_LONG_NAME)); } - private static void upgrade(NodeStore target, boolean skipLongNames) throws RepositoryException, IOException { + private static void upgrade(NodeStore target, boolean skipNameCheck, boolean filterLongNames) throws RepositoryException, IOException { RepositoryConfig config = createCrx2Config(crx2RepoDir); RepositoryContext context = RepositoryContext.create(config); try { RepositoryUpgrade upgrade = new RepositoryUpgrade(context, target); - upgrade.setSkipLongNames(skipLongNames); + upgrade.setCheckLongNames(skipNameCheck); + upgrade.setFilterLongNames(filterLongNames); upgrade.copy(null); } finally { context.getRepository().shutdown();
Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositorySidegradeTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositorySidegradeTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositorySidegradeTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepeatedRepositorySidegradeTest.java Fri Dec 16 11:12:53 2016 @@ -86,7 +86,6 @@ public class RepeatedRepositorySidegrade SegmentNodeStore segmentNodeStore = SegmentNodeStore.newSegmentNodeStore(fileStore).create(); try { final RepositorySidegrade repositoryUpgrade = new RepositorySidegrade(segmentNodeStore, target); - repositoryUpgrade.setSkipInitialization(skipInit); repositoryUpgrade.copy(new RepositoryInitializer() { @Override public void initialize(@Nonnull NodeBuilder builder) { Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegradeTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegradeTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegradeTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegradeTest.java Fri Dec 16 11:12:53 2016 @@ -98,26 +98,10 @@ public class RepositorySidegradeTest { public JackrabbitSession createAdminSession() throws RepositoryException { return (JackrabbitSession) targetRepository.login(CREDENTIALS); } - - // OAK-2869 - private static void setAsync(NodeStore source) throws Exception { - NodeBuilder builder = source.getRoot().builder(); - builder.child(":async").setProperty("test", "123"); - source.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); - } - - // OAK-2869 - @Test - public void verifyAsync() throws Exception { - NodeState state = targetNodeStore.getRoot().getChildNode(":async"); - assertFalse(state.hasProperty("test")); - } @SuppressWarnings("unchecked") protected NodeStore createSourceContent() throws Exception { NodeStore source = new SegmentNodeStore(); - setAsync(source); - Repository repository = new Jcr(new Oak(source)).createRepository(); Session session = repository.login(CREDENTIALS); Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/SameNodeSiblingsTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/SameNodeSiblingsTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/SameNodeSiblingsTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/SameNodeSiblingsTest.java Fri Dec 16 11:12:53 2016 @@ -24,6 +24,8 @@ import static org.junit.Assert.assertEqu import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Set; import javax.jcr.Credentials; @@ -43,8 +45,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.google.common.io.Files; - public class SameNodeSiblingsTest { public static final Credentials CREDENTIALS = new SimpleCredentials("admin", "admin".toCharArray()); @@ -53,7 +53,7 @@ public class SameNodeSiblingsTest { @Before public void createCrx2RepoDir() throws IOException { - crx2RepoDir = Files.createTempDir(); + crx2RepoDir = Files.createTempDirectory(Paths.get("target"), "repo-crx2").toFile(); } @After Added: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/UpgradeOldSegmentTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/UpgradeOldSegmentTest.java?rev=1774571&view=auto ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/UpgradeOldSegmentTest.java (added) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/UpgradeOldSegmentTest.java Fri Dec 16 11:12:53 2016 @@ -0,0 +1,118 @@ +/* + * 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.upgrade; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.InputStream; +import java.io.StringReader; + +import javax.jcr.Node; +import javax.jcr.Repository; +import javax.jcr.Session; +import javax.jcr.SimpleCredentials; +import javax.jcr.nodetype.NodeType; +import javax.jcr.nodetype.NodeTypeManager; +import javax.jcr.nodetype.PropertyDefinition; + +import com.google.common.collect.Iterators; +import org.apache.commons.io.FileUtils; +import org.apache.jackrabbit.api.JackrabbitRepository; +import org.apache.jackrabbit.commons.cnd.CndImporter; +import org.apache.jackrabbit.oak.jcr.Jcr; +import org.apache.jackrabbit.oak.upgrade.cli.OakUpgrade; +import org.apache.jackrabbit.oak.upgrade.cli.Util; +import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; +import org.junit.Test; + +public class UpgradeOldSegmentTest { + + @Test + public void upgradeFrom10() throws Exception { + File testFolder = new File(new File("target"), UpgradeOldSegmentTest.class.getSimpleName()); + FileUtils.deleteDirectory(testFolder); + File oldRepo = new File(testFolder, "test-repo-1.0"); + oldRepo.mkdirs(); + try (InputStream in = UpgradeOldSegmentTest.class.getResourceAsStream("/test-repo-1.0.zip")) { + Util.unzip(in, oldRepo); + } + + SegmentNodeStoreContainer newRepoContainer = new SegmentNodeStoreContainer(); + OakUpgrade.main(oldRepo.getPath(), newRepoContainer.getDescription()); + + Repository repo = new Jcr(newRepoContainer.open()).createRepository(); + Session s = repo.login(new SimpleCredentials("admin", "admin".toCharArray())); + + Node myType = s.getNode("/jcr:system/jcr:nodeTypes/test:MyType"); + assertEquals(2, Iterators.size(myType.getNodes("jcr:propertyDefinition"))); + + NodeTypeManager ntMgr = s.getWorkspace().getNodeTypeManager(); + assertTrue(ntMgr.hasNodeType("test:MyType")); + NodeType nt = ntMgr.getNodeType("test:MyType"); + PropertyDefinition[] pDefs = nt.getDeclaredPropertyDefinitions(); + assertEquals(2, pDefs.length); + for (PropertyDefinition pd : pDefs) { + String name = pd.getName(); + if (name.equals("test:mandatory")) { + assertTrue(pd.isMandatory()); + } else if (name.equals("test:optional")) { + assertFalse(pd.isMandatory()); + } else { + fail("Unexpected property definition: " + name); + } + } + + // flip mandatory flag for test:mandatory + String cnd = "<'test'='http://www.apache.org/jackrabbit/test'>\n" + + "[test:MyType] > nt:unstructured\n" + + " - test:mandatory (string)\n" + + " - test:optional (string)"; + + CndImporter.registerNodeTypes(new StringReader(cnd), s, true); + + myType = s.getNode("/jcr:system/jcr:nodeTypes/test:MyType"); + assertEquals(2, Iterators.size(myType.getNodes("jcr:propertyDefinition"))); + + nt = ntMgr.getNodeType("test:MyType"); + pDefs = nt.getDeclaredPropertyDefinitions(); + assertEquals(2, pDefs.length); + for (PropertyDefinition pd : pDefs) { + String name = pd.getName(); + if (name.equals("test:mandatory")) { + assertFalse(pd.isMandatory()); + } else if (name.equals("test:optional")) { + assertFalse(pd.isMandatory()); + } else { + fail("Unexpected property definition: " + name); + } + } + + s.logout(); + if (repo instanceof JackrabbitRepository) { + ((JackrabbitRepository) repo).shutdown(); + } + newRepoContainer.close(); + newRepoContainer.clean(); + FileUtils.deleteQuietly(testFolder); + } +} \ No newline at end of file Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/blob/LengthCachingDataStoreTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/blob/LengthCachingDataStoreTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/blob/LengthCachingDataStoreTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/blob/LengthCachingDataStoreTest.java Fri Dec 16 11:12:53 2016 @@ -19,6 +19,10 @@ package org.apache.jackrabbit.oak.upgrade.blob; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; @@ -28,7 +32,7 @@ import java.nio.charset.Charset; import java.util.Properties; import java.util.Random; -import com.google.common.io.ByteStreams; +import com.google.common.io.ByteSource; import com.google.common.io.Files; import com.google.common.io.InputSupplier; import org.apache.jackrabbit.core.data.DataIdentifier; @@ -39,14 +43,10 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - public class LengthCachingDataStoreTest { @Rule - public final TemporaryFolder tempFolder = new TemporaryFolder(); + public final TemporaryFolder tempFolder = new TemporaryFolder(new File("target")); @Test public void mappingFileData() throws Exception { @@ -106,7 +106,7 @@ public class LengthCachingDataStoreTest assertEquals(dr, dr2); assertEquals(dr.getLength(), dr2.getLength()); - assertTrue(ByteStreams.equal(supplier(dr), supplier(dr2))); + assertTrue(supplier(dr).contentEquals(supplier(dr2))); } @Test @@ -181,10 +181,10 @@ public class LengthCachingDataStoreTest return data; } - private static InputSupplier<InputStream> supplier(final DataRecord dr) { - return new InputSupplier<InputStream>() { + private static ByteSource supplier(final DataRecord dr) { + return new ByteSource() { @Override - public InputStream getInput() throws IOException { + public InputStream openStream() throws IOException { try { return dr.getStream(); } catch (DataStoreException e) { Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/AbstractOak2OakTest.java Fri Dec 16 11:12:53 2016 @@ -16,7 +16,10 @@ */ package org.apache.jackrabbit.oak.upgrade.cli; +import static java.util.Collections.singletonMap; +import static junit.framework.Assert.assertFalse; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; @@ -24,6 +27,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.List; +import java.util.Map; import javax.annotation.Nullable; import javax.jcr.Node; @@ -36,13 +40,21 @@ import javax.jcr.Value; import com.google.common.base.Function; import com.google.common.collect.Lists; import org.apache.commons.codec.digest.DigestUtils; +import org.apache.jackrabbit.oak.api.CommitFailedException; +import org.apache.jackrabbit.oak.commons.IOUtils; import org.apache.jackrabbit.oak.jcr.Jcr; import org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl; import org.apache.jackrabbit.oak.plugins.index.reference.ReferenceIndexProvider; +import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState; +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.apache.jackrabbit.oak.spi.state.NodeState; import org.apache.jackrabbit.oak.spi.state.NodeStore; import org.apache.jackrabbit.oak.upgrade.RepositorySidegrade; import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; +import org.apache.jackrabbit.oak.upgrade.cli.parser.CliArgumentException; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; @@ -64,6 +76,8 @@ public abstract class AbstractOak2OakTes private RepositoryImpl repository; + private String checkpointReference; + protected abstract NodeStoreContainer getSourceContainer(); protected abstract NodeStoreContainer getDestinationContainer(); @@ -102,13 +116,21 @@ public abstract class AbstractOak2OakTes @After public void clean() throws IOException { - session.logout(); - repository.shutdown(); - getDestinationContainer().close(); - getDestinationContainer().clean(); + try { + if (session != null) { + session.logout(); + } + if (repository != null) { + repository.shutdown(); + } + } finally { + IOUtils.closeQuietly(getDestinationContainer()); + getDestinationContainer().clean(); + getSourceContainer().clean(); + } } - protected void initContent(NodeStore target) throws IOException, RepositoryException { + protected void initContent(NodeStore target) throws IOException, RepositoryException, CommitFailedException { NodeStore initialContent = testContent.open(); try { RepositorySidegrade sidegrade = new RepositorySidegrade(initialContent, target); @@ -116,12 +138,26 @@ public abstract class AbstractOak2OakTes } finally { testContent.close(); } + + NodeBuilder builder = target.getRoot().builder(); + builder.setProperty("checkpoint-state", "before"); + target.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); + checkpointReference = target.checkpoint(60000, singletonMap("key", "123")); + + builder.setProperty("checkpoint-state", "after"); + builder.child(":async").setProperty("test", "123"); + target.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); } @Test - public void validateMigration() throws RepositoryException, IOException { + public void validateMigration() throws RepositoryException, IOException, CliArgumentException { verifyContent(session); verifyBlob(session); + if (supportsCheckpointMigration()) { + verifyCheckpoint(); + } else { + verifyEmptyAsync(); + } } public static void verifyContent(Session session) throws RepositoryException { @@ -165,4 +201,44 @@ public abstract class AbstractOak2OakTes } } -} + private void verifyCheckpoint() { + assertEquals("after", destination.getRoot().getString("checkpoint-state")); + + Map<String, String> info = destination.checkpointInfo(checkpointReference); + assertEquals("123", info.get("key")); + + NodeState checkpoint = destination.retrieve(checkpointReference); + assertEquals("before", checkpoint.getString("checkpoint-state")); + + assertEquals("123", destination.getRoot().getChildNode(":async").getString("test")); + + for (String name : new String[] {"var", "etc", "sling.css", "apps", "libs", "sightly"}) { + assertSameRecord(destination.getRoot().getChildNode(name), checkpoint.getChildNode(name)); + } + } + + private static void assertSameRecord(NodeState ns1, NodeState ns2) { + String recordId1 = getRecordId(ns1); + String recordId2 = getRecordId(ns2); + assertNotNull(recordId1); + assertEquals(recordId1, recordId2); + } + + private static String getRecordId(NodeState node) { + if (node instanceof SegmentNodeState) { + return ((SegmentNodeState) node).getRecordId().toString(); + } else { + return null; + } + } + + // OAK-2869 + private void verifyEmptyAsync() { + NodeState state = destination.getRoot().getChildNode(":async"); + assertFalse(state.hasProperty("test")); + } + + protected boolean supportsCheckpointMigration() { + return false; + } +} \ No newline at end of file Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/Jcr2ToSegmentTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/Jcr2ToSegmentTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/Jcr2ToSegmentTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/Jcr2ToSegmentTest.java Fri Dec 16 11:12:53 2016 @@ -43,6 +43,9 @@ public class Jcr2ToSegmentTest { private Session session; + public Jcr2ToSegmentTest() throws IOException { + } + @Before public void prepare() throws Exception { File tempDir = new File("target", "test-jcr2"); Copied: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/MongoToMongoFdsTest.java (from r1774499, jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/MongoToMongoFds.java) URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/MongoToMongoFdsTest.java?p2=jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/MongoToMongoFdsTest.java&p1=jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/MongoToMongoFds.java&r1=1774499&r2=1774571&rev=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/MongoToMongoFds.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/MongoToMongoFdsTest.java Fri Dec 16 11:12:53 2016 @@ -26,7 +26,7 @@ import org.apache.jackrabbit.oak.upgrade import org.apache.jackrabbit.oak.upgrade.cli.container.MongoNodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; -public class MongoToMongoFds extends AbstractOak2OakTest { +public class MongoToMongoFdsTest extends AbstractOak2OakTest { private final BlobStoreContainer destinationBlob; @@ -34,7 +34,7 @@ public class MongoToMongoFds extends Abs private final NodeStoreContainer destination; - public MongoToMongoFds() throws IOException { + public MongoToMongoFdsTest() throws IOException { assumeTrue(isMongoAvailable()); destinationBlob = new FileDataStoreContainer(); source = new MongoNodeStoreContainer(); @@ -53,7 +53,7 @@ public class MongoToMongoFds extends Abs @Override protected String[] getArgs() { - return new String[] { "--copy-binaries", "--fileblobstore", destinationBlob.getDescription(), + return new String[] { "--copy-binaries", "--datastore", destinationBlob.getDescription(), source.getDescription(), destination.getDescription() }; } } Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToJdbcTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToJdbcTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToJdbcTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToJdbcTest.java Fri Dec 16 11:12:53 2016 @@ -46,7 +46,7 @@ public class SegmentToJdbcTest extends A @Override protected String[] getArgs() { - return new String[] { "--user", "sa", "--password", "sa", source.getDescription(), + return new String[] { "--disable-mmap", "--user", "sa", "--password", "sa", source.getDescription(), destination.getDescription() }; } } Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentTest.java Fri Dec 16 11:12:53 2016 @@ -19,13 +19,15 @@ package org.apache.jackrabbit.oak.upgrad import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; +import java.io.IOException; + public class SegmentToSegmentTest extends AbstractOak2OakTest { private final NodeStoreContainer source; private final NodeStoreContainer destination; - public SegmentToSegmentTest() { + public SegmentToSegmentTest() throws IOException { source = new SegmentNodeStoreContainer(); destination = new SegmentNodeStoreContainer(); } @@ -44,4 +46,9 @@ public class SegmentToSegmentTest extend protected String[] getArgs() { return new String[] { source.getDescription(), destination.getDescription() }; } + + @Override + protected boolean supportsCheckpointMigration() { + return true; + } } Copied: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java (from r1774499, jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyReferencesTest.java) URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java?p2=jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java&p1=jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyReferencesTest.java&r1=1774499&r2=1774571&rev=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyReferencesTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/SegmentToSegmentWithMissingDestinationDirectoryTest.java Fri Dec 16 11:12:53 2016 @@ -14,26 +14,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.jackrabbit.oak.upgrade.cli.blob; +package org.apache.jackrabbit.oak.upgrade.cli; -import org.apache.jackrabbit.oak.upgrade.cli.AbstractOak2OakTest; -import org.apache.jackrabbit.oak.upgrade.cli.container.BlobStoreContainer; -import org.apache.jackrabbit.oak.upgrade.cli.container.FileDataStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; -public class CopyReferencesTest extends AbstractOak2OakTest { - - private final BlobStoreContainer sourceBlob; +import java.io.IOException; +public class SegmentToSegmentWithMissingDestinationDirectoryTest extends AbstractOak2OakTest { private final NodeStoreContainer source; private final NodeStoreContainer destination; - public CopyReferencesTest() { - sourceBlob = new FileDataStoreContainer(); - source = new SegmentNodeStoreContainer(sourceBlob); - destination = new SegmentNodeStoreContainer(sourceBlob); + public SegmentToSegmentWithMissingDestinationDirectoryTest() throws IOException { + source = new SegmentNodeStoreContainer(); + destination = getSegmentNodeStoreContainerWithMissingDirectory(); + } + + private SegmentNodeStoreContainer getSegmentNodeStoreContainerWithMissingDirectory() throws IOException { + SegmentNodeStoreContainer segmentNodeStoreContainer = new SegmentNodeStoreContainer(); + segmentNodeStoreContainer.getDirectory().delete(); + return segmentNodeStoreContainer; } @Override @@ -48,7 +49,12 @@ public class CopyReferencesTest extends @Override protected String[] getArgs() { - return new String[] { "--src-datastore", sourceBlob.getDescription(), source.getDescription(), - destination.getDescription() }; + return new String[] { source.getDescription(), destination.getDescription() }; } + + @Override + protected boolean supportsCheckpointMigration() { + return true; + } + } Added: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java?rev=1774571&view=auto ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java (added) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java Fri Dec 16 11:12:53 2016 @@ -0,0 +1,201 @@ +/* + * 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.upgrade.cli.blob; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import com.google.common.base.Joiner; +import org.apache.jackrabbit.oak.spi.state.NodeStore; +import org.apache.jackrabbit.oak.upgrade.cli.AbstractOak2OakTest; +import org.apache.jackrabbit.oak.upgrade.cli.OakUpgrade; +import org.apache.jackrabbit.oak.upgrade.cli.container.BlobStoreContainer; +import org.apache.jackrabbit.oak.upgrade.cli.container.FileDataStoreContainer; +import org.apache.jackrabbit.oak.upgrade.cli.container.JdbcNodeStoreContainer; +import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; +import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; +import org.apache.jackrabbit.oak.upgrade.cli.parser.CliArgumentException; +import org.apache.jackrabbit.oak.upgrade.cli.parser.DatastoreArguments; +import org.apache.jackrabbit.oak.upgrade.cli.parser.MigrationCliArguments; +import org.apache.jackrabbit.oak.upgrade.cli.parser.MigrationOptions; +import org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory; +import org.apache.jackrabbit.oak.upgrade.cli.parser.StoreArguments; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.jcr.RepositoryException; + +@RunWith(Parameterized.class) +public class CopyBinariesTest extends AbstractOak2OakTest { + + private static final Logger log = LoggerFactory.getLogger(CopyBinariesTest.class); + + @Parameterized.Parameters(name = "{0}") + public static Collection<Object[]> data() throws IOException { + List<Object[]> params = new ArrayList<Object[]>(); + + BlobStoreContainer blob = new FileDataStoreContainer(); + BlobStoreContainer blob2 = new FileDataStoreContainer(); + params.add(new Object[]{ + "Copy references, no blobstores defined, segment -> segment", + new SegmentNodeStoreContainer(blob), + new SegmentNodeStoreContainer(blob), + asList(), + DatastoreArguments.BlobMigrationCase.COPY_REFERENCES + }); + params.add(new Object[]{ + "Copy references, no blobstores defined, document -> segment", + new JdbcNodeStoreContainer(blob), + new SegmentNodeStoreContainer(blob), + asList("--src-user=sa", "--src-password=sa"), + DatastoreArguments.BlobMigrationCase.COPY_REFERENCES + }); + params.add(new Object[]{ + "Copy references, no blobstores defined, segment -> document", + new SegmentNodeStoreContainer(blob), + new JdbcNodeStoreContainer(blob), + asList("--user=sa", "--password=sa"), + DatastoreArguments.BlobMigrationCase.UNSUPPORTED + }); + params.add(new Object[]{ + "Missing source, external destination", + new SegmentNodeStoreContainer(blob), + new SegmentNodeStoreContainer(blob), + asList("--datastore=" + blob.getDescription()), + DatastoreArguments.BlobMigrationCase.UNSUPPORTED + }); + params.add(new Object[]{ + "Copy embedded to embedded, no blobstores defined", + new SegmentNodeStoreContainer(), + new SegmentNodeStoreContainer(), + asList(), + DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EMBEDDED + }); + params.add(new Object[]{ + "Copy embedded to external, no blobstores defined", + new SegmentNodeStoreContainer(), + new SegmentNodeStoreContainer(blob), + asList("--datastore=" + blob.getDescription()), + DatastoreArguments.BlobMigrationCase.EMBEDDED_TO_EXTERNAL + }); + params.add(new Object[]{ + "Copy references, src blobstore defined", + new SegmentNodeStoreContainer(blob), + new SegmentNodeStoreContainer(blob), + asList("--src-datastore=" + blob.getDescription()), + DatastoreArguments.BlobMigrationCase.COPY_REFERENCES + }); + params.add(new Object[]{ + "Copy external to embedded, src blobstore defined", + new SegmentNodeStoreContainer(blob), + new SegmentNodeStoreContainer(), + asList("--copy-binaries", "--src-datastore=" + blob.getDescription()), + DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EMBEDDED + }); + params.add(new Object[]{ + "Copy external to external, src blobstore defined", + new SegmentNodeStoreContainer(blob), + new SegmentNodeStoreContainer(blob2), + asList("--copy-binaries", "--src-datastore=" + blob.getDescription(), "--datastore=" + blob2.getDescription()), + DatastoreArguments.BlobMigrationCase.EXTERNAL_TO_EXTERNAL + }); + return params; + } + + private final NodeStoreContainer source; + + private final NodeStoreContainer destination; + + private final List<String> args; + + private final DatastoreArguments.BlobMigrationCase blobMigrationCase; + + public CopyBinariesTest(String name, NodeStoreContainer source, NodeStoreContainer destination, List<String> args, DatastoreArguments.BlobMigrationCase blobMigrationCase) throws IOException, CliArgumentException { + this.source = source; + this.destination = destination; + this.args = args; + this.blobMigrationCase = blobMigrationCase; + + this.source.clean(); + this.destination.clean(); + } + + @Override + protected NodeStoreContainer getSourceContainer() { + return source; + } + + @Override + protected NodeStoreContainer getDestinationContainer() { + return destination; + } + + @Override + protected String[] getArgs() { + List<String> result = new ArrayList<>(args); + result.addAll(asList("--disable-mmap", source.getDescription(), destination.getDescription())); + return result.toArray(new String[result.size()]); + } + + @Before + @Override + public void prepare() throws Exception { + NodeStore source = getSourceContainer().open(); + try { + initContent(source); + } finally { + getSourceContainer().close(); + } + + String[] args = getArgs(); + log.info("oak2oak {}", Joiner.on(' ').join(args)); + try { + MigrationCliArguments cliArgs = new MigrationCliArguments(OptionParserFactory.create().parse(args)); + MigrationOptions options = new MigrationOptions(cliArgs); + StoreArguments stores = new StoreArguments(options, cliArgs.getArguments()); + DatastoreArguments datastores = new DatastoreArguments(options, stores, stores.srcUsesEmbeddedDatastore()); + OakUpgrade.migrate(options, stores, datastores); + assertEquals(blobMigrationCase, datastores.getBlobMigrationCase()); + } catch(CliArgumentException e) { + if (blobMigrationCase == DatastoreArguments.BlobMigrationCase.UNSUPPORTED) { + return; + } else { + throw e; + } + } + createSession(); + } + + @Test + @Override + public void validateMigration() throws RepositoryException, IOException, CliArgumentException { + if (blobMigrationCase == DatastoreArguments.BlobMigrationCase.UNSUPPORTED) { + return; + } + verifyContent(session); + verifyBlob(session); + } +} \ No newline at end of file Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFbsTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFbsTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFbsTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFbsTest.java Fri Dec 16 11:12:53 2016 @@ -22,6 +22,8 @@ import org.apache.jackrabbit.oak.upgrade import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; +import java.io.IOException; + public class FbsToFbsTest extends AbstractOak2OakTest { private final BlobStoreContainer sourceBlob; @@ -32,7 +34,7 @@ public class FbsToFbsTest extends Abstra private final NodeStoreContainer destination; - public FbsToFbsTest() { + public FbsToFbsTest() throws IOException { sourceBlob = new FileBlobStoreContainer(); destinationBlob = new FileBlobStoreContainer(); source = new SegmentNodeStoreContainer(sourceBlob); @@ -54,4 +56,9 @@ public class FbsToFbsTest extends Abstra return new String[] { "--copy-binaries", "--src-fileblobstore", sourceBlob.getDescription(), "--fileblobstore", destinationBlob.getDescription(), source.getDescription(), destination.getDescription() }; } + + @Override + protected boolean supportsCheckpointMigration() { + return true; + } } Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFdsTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFdsTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFdsTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToFdsTest.java Fri Dec 16 11:12:53 2016 @@ -23,6 +23,8 @@ import org.apache.jackrabbit.oak.upgrade import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; +import java.io.IOException; + public class FbsToFdsTest extends AbstractOak2OakTest { private final BlobStoreContainer sourceBlob; @@ -33,7 +35,7 @@ public class FbsToFdsTest extends Abstra private final NodeStoreContainer destination; - public FbsToFdsTest() { + public FbsToFdsTest() throws IOException { sourceBlob = new FileBlobStoreContainer(); destinationBlob = new FileDataStoreContainer(); source = new SegmentNodeStoreContainer(sourceBlob); @@ -55,4 +57,9 @@ public class FbsToFdsTest extends Abstra return new String[] { "--copy-binaries", "--src-fileblobstore", sourceBlob.getDescription(), "--datastore", destinationBlob.getDescription(), source.getDescription(), destination.getDescription() }; } + + @Override + protected boolean supportsCheckpointMigration() { + return true; + } } Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToS3Test.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToS3Test.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToS3Test.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FbsToS3Test.java Fri Dec 16 11:12:53 2016 @@ -62,4 +62,9 @@ public class FbsToS3Test extends Abstrac destinationBlob.getDescription(), "--s3config", S3_PROPERTIES, source.getDescription(), destination.getDescription() }; } + + @Override + protected boolean supportsCheckpointMigration() { + return true; + } } Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FdsToFbsTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FdsToFbsTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FdsToFbsTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/FdsToFbsTest.java Fri Dec 16 11:12:53 2016 @@ -23,6 +23,8 @@ import org.apache.jackrabbit.oak.upgrade import org.apache.jackrabbit.oak.upgrade.cli.container.NodeStoreContainer; import org.apache.jackrabbit.oak.upgrade.cli.container.SegmentNodeStoreContainer; +import java.io.IOException; + public class FdsToFbsTest extends AbstractOak2OakTest { private final BlobStoreContainer sourceBlob; @@ -33,7 +35,7 @@ public class FdsToFbsTest extends Abstra private final NodeStoreContainer destination; - public FdsToFbsTest() { + public FdsToFbsTest() throws IOException { sourceBlob = new FileDataStoreContainer(); destinationBlob = new FileBlobStoreContainer(); source = new SegmentNodeStoreContainer(sourceBlob); @@ -55,4 +57,9 @@ public class FdsToFbsTest extends Abstra return new String[] { "--copy-binaries", "--src-datastore", sourceBlob.getDescription(), "--fileblobstore", destinationBlob.getDescription(), source.getDescription(), destination.getDescription() }; } + + @Override + protected boolean supportsCheckpointMigration() { + return true; + } } Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/S3ToFbsTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/S3ToFbsTest.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/S3ToFbsTest.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/S3ToFbsTest.java Fri Dec 16 11:12:53 2016 @@ -62,4 +62,9 @@ public class S3ToFbsTest extends Abstrac S3_PROPERTIES, "--fileblobstore", destinationBlob.getDescription(), source.getDescription(), destination.getDescription() }; } + + @Override + protected boolean supportsCheckpointMigration() { + return true; + } } Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/FileBlobStoreContainer.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/FileBlobStoreContainer.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/FileBlobStoreContainer.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/FileBlobStoreContainer.java Fri Dec 16 11:12:53 2016 @@ -18,19 +18,19 @@ package org.apache.jackrabbit.oak.upgrad import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.apache.jackrabbit.oak.spi.blob.FileBlobStore; -import com.google.common.io.Files; - public class FileBlobStoreContainer implements BlobStoreContainer { private final File directory; - public FileBlobStoreContainer() { - this.directory = Files.createTempDir(); + public FileBlobStoreContainer() throws IOException { + this.directory = Files.createTempDirectory(Paths.get("target"), "repo-fbs").toFile(); } @Override @@ -44,7 +44,7 @@ public class FileBlobStoreContainer impl @Override public void clean() throws IOException { - FileUtils.deleteDirectory(directory); + FileUtils.deleteQuietly(directory); } @Override Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/FileDataStoreContainer.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/FileDataStoreContainer.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/FileDataStoreContainer.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/FileDataStoreContainer.java Fri Dec 16 11:12:53 2016 @@ -18,13 +18,14 @@ package org.apache.jackrabbit.oak.upgrad import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.apache.jackrabbit.oak.upgrade.cli.blob.FileDataStoreFactory; import com.google.common.io.Closer; -import com.google.common.io.Files; public class FileDataStoreContainer implements BlobStoreContainer { @@ -32,8 +33,8 @@ public class FileDataStoreContainer impl private final Closer closer; - public FileDataStoreContainer() { - this.directory = Files.createTempDir(); + public FileDataStoreContainer() throws IOException { + this.directory = Files.createTempDirectory(Paths.get("target"), "repo-fds").toFile(); this.closer = Closer.create(); } @@ -49,7 +50,7 @@ public class FileDataStoreContainer impl @Override public void clean() throws IOException { - FileUtils.deleteDirectory(directory); + FileUtils.deleteQuietly(directory); } @Override Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/JdbcNodeStoreContainer.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/JdbcNodeStoreContainer.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/JdbcNodeStoreContainer.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/JdbcNodeStoreContainer.java Fri Dec 16 11:12:53 2016 @@ -18,6 +18,8 @@ package org.apache.jackrabbit.oak.upgrad import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.oak.spi.state.NodeStore; @@ -26,7 +28,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.io.Closer; -import com.google.common.io.Files; public class JdbcNodeStoreContainer implements NodeStoreContainer { @@ -46,11 +47,11 @@ public class JdbcNodeStoreContainer impl this(new DummyBlobStoreContainer()); } - public JdbcNodeStoreContainer(BlobStoreContainer blob) { + public JdbcNodeStoreContainer(BlobStoreContainer blob) throws IOException { this.blob = blob; - this.h2Dir = Files.createTempDir(); - this.jdbcUri = String.format("jdbc:h2:%s", h2Dir.getPath()); - this.jdbcFactory = new JdbcFactory(jdbcUri, 2, "sa", "sa"); + this.h2Dir = Files.createTempDirectory(Paths.get("target"), "repo-h2").toFile(); + this.jdbcUri = String.format("jdbc:h2:%s", h2Dir.getAbsolutePath() + "/JdbcNodeStoreContainer"); + this.jdbcFactory = new JdbcFactory(jdbcUri, 2, "sa", "sa", false); } @Override @@ -62,7 +63,10 @@ public class JdbcNodeStoreContainer impl @Override public void close() { try { - closer.close(); + if (closer != null) { + closer.close(); + closer = null; + } } catch (IOException e) { LOG.error("Can't close document node store", e); } @@ -70,7 +74,7 @@ public class JdbcNodeStoreContainer impl @Override public void clean() throws IOException { - FileUtils.deleteDirectory(h2Dir); + FileUtils.deleteQuietly(h2Dir); blob.clean(); } Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/MongoNodeStoreContainer.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/MongoNodeStoreContainer.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/MongoNodeStoreContainer.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/MongoNodeStoreContainer.java Fri Dec 16 11:12:53 2016 @@ -56,7 +56,7 @@ public class MongoNodeStoreContainer imp public MongoNodeStoreContainer(BlobStoreContainer blob) throws IOException { Assume.assumeTrue(isMongoAvailable()); this.mongoUri = String.format("%s-%d", MONGO_URI, DATABASE_SUFFIX.getAndIncrement()); - this.mongoFactory = new MongoFactory(mongoUri, 2); + this.mongoFactory = new MongoFactory(mongoUri, 2, false); this.blob = blob; clean(); } Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/S3DataStoreContainer.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/S3DataStoreContainer.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/S3DataStoreContainer.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/S3DataStoreContainer.java Fri Dec 16 11:12:53 2016 @@ -18,6 +18,8 @@ package org.apache.jackrabbit.oak.upgrad import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.oak.spi.blob.BlobStore; @@ -26,7 +28,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.io.Closer; -import com.google.common.io.Files; public class S3DataStoreContainer implements BlobStoreContainer { @@ -39,7 +40,7 @@ public class S3DataStoreContainer implem private final Closer closer; public S3DataStoreContainer(String configFile) throws IOException { - this.directory = Files.createTempDir(); + this.directory = Files.createTempDirectory(Paths.get("target"), "repo-s3").toFile(); this.factory = new S3DataStoreFactory(configFile, directory.getPath(), false); this.closer = Closer.create(); } @@ -60,7 +61,7 @@ public class S3DataStoreContainer implem @Override public void clean() throws IOException { - FileUtils.deleteDirectory(directory); + FileUtils.deleteQuietly(directory); } @Override Modified: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java?rev=1774571&r1=1774570&r2=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java Fri Dec 16 11:12:53 2016 @@ -18,14 +18,14 @@ package org.apache.jackrabbit.oak.upgrad import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore; import org.apache.jackrabbit.oak.plugins.segment.file.FileStore; import org.apache.jackrabbit.oak.spi.state.NodeStore; -import com.google.common.io.Files; - public class SegmentNodeStoreContainer implements NodeStoreContainer { private final File directory; @@ -34,22 +34,26 @@ public class SegmentNodeStoreContainer i private FileStore fs; - public SegmentNodeStoreContainer() { - this(Files.createTempDir()); + public SegmentNodeStoreContainer() throws IOException { + this(null, null); + } + + public SegmentNodeStoreContainer(File directory) throws IOException { + this(null, directory); } - public SegmentNodeStoreContainer(File directory) { - this.blob = null; - this.directory = directory; + public SegmentNodeStoreContainer(BlobStoreContainer blob) throws IOException { + this(blob, null); } - public SegmentNodeStoreContainer(BlobStoreContainer blob) { + private SegmentNodeStoreContainer(BlobStoreContainer blob, File directory) throws IOException { this.blob = blob; - this.directory = Files.createTempDir(); + this.directory = directory == null ? Files.createTempDirectory(Paths.get("target"), "repo-segment").toFile() : directory; } @Override public NodeStore open() throws IOException { + directory.mkdirs(); FileStore.Builder builder = FileStore.newFileStore(new File(directory, "segmentstore")); if (blob != null) { builder.withBlobStore(blob.open()); @@ -60,12 +64,14 @@ public class SegmentNodeStoreContainer i @Override public void close() { - fs.close(); + if (fs != null) { + fs.close(); + } } @Override public void clean() throws IOException { - FileUtils.deleteDirectory(directory); + FileUtils.deleteQuietly(directory); if (blob != null) { blob.clean(); } @@ -76,4 +82,7 @@ public class SegmentNodeStoreContainer i return directory.getPath(); } + public File getDirectory() { + return directory; + } } Copied: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArgumentsTest.java (from r1774499, jackrabbit/oak/branches/1.4/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/NodeStoreFactory.java) URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArgumentsTest.java?p2=jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArgumentsTest.java&p1=jackrabbit/oak/branches/1.4/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/NodeStoreFactory.java&r1=1774499&r2=1774571&rev=1774571&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/NodeStoreFactory.java (original) +++ jackrabbit/oak/branches/1.4/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArgumentsTest.java Fri Dec 16 11:12:53 2016 @@ -14,16 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.jackrabbit.oak.upgrade.cli.node; +package org.apache.jackrabbit.oak.upgrade.cli.parser; -import java.io.IOException; +import org.junit.Test; -import org.apache.jackrabbit.oak.spi.blob.BlobStore; -import org.apache.jackrabbit.oak.spi.state.NodeStore; +public class StoreArgumentsTest { -import com.google.common.io.Closer; - -public interface NodeStoreFactory { - - NodeStore create(BlobStore blobStore, Closer closer) throws IOException; + @Test(expected = CliArgumentException.class) + public void testSameRepositoryFails() throws CliArgumentException { + MigrationCliArguments parsed = new MigrationCliArguments(OptionParserFactory.create().parse("my/repo", "my/repo")); + MigrationOptions options = new MigrationOptions(parsed); + new StoreArguments(options, parsed.getArguments()); + } } Added: jackrabbit/oak/branches/1.4/oak-upgrade/src/test/resources/test-repo-1.0.zip URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-upgrade/src/test/resources/test-repo-1.0.zip?rev=1774571&view=auto ============================================================================== Binary files jackrabbit/oak/branches/1.4/oak-upgrade/src/test/resources/test-repo-1.0.zip (added) and jackrabbit/oak/branches/1.4/oak-upgrade/src/test/resources/test-repo-1.0.zip Fri Dec 16 11:12:53 2016 differ
