From 98c8bde68cceb8523ede780b4823eff785282050 Mon Sep 17 00:00:00 2001 From: Axel Hanikel Date: Fri, 2 Nov 2018 13:45:52 +0100 Subject: [PATCH] OAK-7878 - Add LoggingHookTest --- .../jackrabbit/oak/segment/LoggingHook.java | 18 ++--- .../oak/segment/LoggingHookTest.java | 79 +++++++++++++++++++ 2 files changed, 86 insertions(+), 11 deletions(-) create mode 100644 oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java index de26567126..4d76c1478e 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LoggingHook.java @@ -54,24 +54,24 @@ public class LoggingHook implements CommitHook, NodeStateDiff { } public void leave(NodeState before, NodeState after) { - log("n!"); + writer.accept("n!"); } @Override public boolean propertyAdded(PropertyState after) { - log("p+ " + toString(after)); + writer.accept("p+ " + toString(after)); return true; } @Override public boolean propertyChanged(PropertyState before, PropertyState after) { - log("p^ " + toString(after)); + writer.accept("p^ " + toString(after)); return true; } @Override public boolean propertyDeleted(PropertyState before) { - log("p- " + toString(before)); + writer.accept("p- " + toString(before)); return true; } @@ -85,7 +85,7 @@ public class LoggingHook implements CommitHook, NodeStateDiff { @Override public boolean childNodeAdded(String name, NodeState after) { - log("n+ " + safeEncode(name)); + writer.accept("n+ " + safeEncode(name)); this.enter(null, after); boolean ret = after.compareAgainstBaseState(EmptyNodeState.EMPTY_NODE, this); this.leave(null, after); @@ -94,7 +94,7 @@ public class LoggingHook implements CommitHook, NodeStateDiff { @Override public boolean childNodeChanged(String name, NodeState before, NodeState after) { - log("n^ " + safeEncode(name)); + writer.accept("n^ " + safeEncode(name)); this.enter(before, after); boolean ret = after.compareAgainstBaseState(before, this); this.leave(before, after); @@ -103,7 +103,7 @@ public class LoggingHook implements CommitHook, NodeStateDiff { @Override public boolean childNodeDeleted(String name, NodeState before) { - log("n- " + safeEncode(name)); + writer.accept("n- " + safeEncode(name)); return true; } @@ -145,10 +145,6 @@ public class LoggingHook implements CommitHook, NodeStateDiff { } } - private void log(String s) { - writer.accept(System.currentTimeMillis() + " " + safeEncode(Thread.currentThread().getName()) + " " + s); - } - private static void appendBlob(StringBuilder sb, Blob blob) { final InputStream is = blob.getNewStream(); final char[] hex = "0123456789ABCDEF".toCharArray(); diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java new file mode 100644 index 0000000000..92a99003c0 --- /dev/null +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/LoggingHookTest.java @@ -0,0 +1,79 @@ +/* + * 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.segment; + +import static org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.time.Instant; +import java.util.Date; +import java.util.function.Consumer; +import java.util.regex.Pattern; + +import org.apache.jackrabbit.oak.api.CommitFailedException; +import org.apache.jackrabbit.oak.api.Type; +import org.apache.jackrabbit.oak.segment.file.FileStore; +import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; +import org.apache.jackrabbit.oak.segment.test.TemporaryFileStore; +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.junit.Rule; +import org.junit.Test; +import org.junit.rules.RuleChain; +import org.junit.rules.TemporaryFolder; + +public class LoggingHookTest { + + private TemporaryFolder folder = new TemporaryFolder(new File("target")); + + private TemporaryFileStore fileStore = new TemporaryFileStore(folder, false); + + @Rule + public RuleChain chain = RuleChain.outerRule(folder) + .around(fileStore); + + @Test + public void testChildNode() throws Exception { + String result = + "n+ child\n" + + "n!\n" + + "n!\n"; + assertCommitProduces(result, root -> root.setChildNode("child")); + } + + private void assertCommitProduces(String expected, Consumer committer) throws Exception { + StringBuilder result = new StringBuilder(); + + SegmentNodeStore store = SegmentNodeStoreBuilders.builder(fileStore.fileStore()) + .withLoggingHook(s -> result.append(s).append("\n")) + .build(); + + NodeBuilder root = store.getRoot().builder(); + committer.accept(root); + store.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY); + + assertEquals(expected, result.toString()); + } + +} -- 2.17.1