You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2023/01/19 14:08:13 UTC
[jackrabbit-filevault] branch master updated: JCRVLT-677 store attributes within "entries.xml" (#270)
This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git
The following commit(s) were added to refs/heads/master by this push:
new 4ab75123 JCRVLT-677 store attributes within "entries.xml" (#270)
4ab75123 is described below
commit 4ab7512355ad97bbbcbc592dc7252f4058ee364d
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Thu Jan 19 15:08:07 2023 +0100
JCRVLT-677 store attributes within "entries.xml" (#270)
This fixes the NPE being issued when trying to resolve conflicts
Convert tests to JUnit5
---
parent/pom.xml | 7 ++
vault-vlt/pom.xml | 4 +-
.../vault/vlt/meta/xml/XmlEntryInfo.java | 15 ++--
.../vault/vlt/{Test.java => ManualIT.java} | 4 +-
.../jackrabbit/vault/vlt/meta/TextXMLEntries.java | 82 ---------------------
...bstractTestEntries.java => XmlEntriesTest.java} | 85 ++++++++++++++++++----
6 files changed, 89 insertions(+), 108 deletions(-)
diff --git a/parent/pom.xml b/parent/pom.xml
index b2c17e37..60b25c99 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -529,6 +529,13 @@ Bundle-Category: jackrabbit
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
+ <dependency>
+ <groupId>org.junit</groupId>
+ <artifactId>junit-bom</artifactId>
+ <version>5.9.2</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
</dependencies>
</dependencyManagement>
diff --git a/vault-vlt/pom.xml b/vault-vlt/pom.xml
index 85a12530..50d5eea3 100644
--- a/vault-vlt/pom.xml
+++ b/vault-vlt/pom.xml
@@ -87,8 +87,8 @@
<scope>compile</scope>
</dependency>
<dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntryInfo.java b/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntryInfo.java
index b5246314..06942ac8 100644
--- a/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntryInfo.java
+++ b/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntryInfo.java
@@ -39,7 +39,7 @@ import org.xml.sax.helpers.AttributesImpl;
*/
public class XmlEntryInfo implements VltEntryInfo {
- private static final String AN_NAME = "name";
+ private static final String AN_NAME = "name"; // file name, mandatory for type "mine" and "theirs"
private static final String AN_DATE = "date";
private static final String AN_MD5 = "md5";
private static final String AN_CONTENT_TYPE = "contentType";
@@ -212,27 +212,28 @@ public class XmlEntryInfo implements VltEntryInfo {
public void write(XMLStreamWriter writer) throws XMLStreamException {
writer.writeStartElement(type.name().toLowerCase());
+ writeAttributes(writer);
writer.writeEndElement();
dirty = false;
}
- protected void addAttributes(AttributesImpl attrs) {
+ protected void writeAttributes(XMLStreamWriter writer) throws XMLStreamException {
if (name != null) {
- attrs.addAttribute("", AN_NAME, "", "CDATA", name);
+ writer.writeAttribute(AN_NAME, name);
}
if (date > 0) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(date);
- attrs.addAttribute("", AN_DATE, "", "CDATA", ISO8601.format(c));
+ writer.writeAttribute(AN_DATE, ISO8601.format(c));
}
if (md5 != null) {
- attrs.addAttribute("", AN_MD5, "", "CDATA", md5.toString());
+ writer.writeAttribute(AN_MD5, md5.toString());
}
if (contentType != null) {
- attrs.addAttribute("", AN_CONTENT_TYPE, "", "CDATA", contentType);
+ writer.writeAttribute(AN_CONTENT_TYPE, contentType);
}
if (size > 0) {
- attrs.addAttribute("", AN_SIZE, "", "CDATA", String.valueOf(size));
+ writer.writeAttribute(AN_SIZE, String.valueOf(size));
}
}
diff --git a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/Test.java b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/ManualIT.java
similarity index 98%
rename from vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/Test.java
rename to vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/ManualIT.java
index 17f86209..422980ae 100644
--- a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/Test.java
+++ b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/ManualIT.java
@@ -31,13 +31,11 @@ import java.util.zip.ZipOutputStream;
import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.vault.vlt.meta.xml.zip.UpdateableZipFile;
-import org.junit.Ignore;
/**
* {@code Test}...
*/
-@Ignore
-public class Test {
+public class ManualIT {
public static final String TEXT = "/*\n" +
" * Licensed to the Apache Software Foundation (ASF) under one or more\n" +
diff --git a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/TextXMLEntries.java b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/TextXMLEntries.java
deleted file mode 100644
index 6a55c8a2..00000000
--- a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/TextXMLEntries.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.vault.vlt.meta;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.StandardCharsets;
-
-import org.apache.jackrabbit.vault.vlt.VltException;
-import org.apache.jackrabbit.vault.vlt.meta.xml.XmlEntries;
-import org.apache.jackrabbit.vault.vlt.meta.xml.zip.ZipMetaDir;
-
-/**
- * {@code TextXMLEntries}...
- */
-public class TextXMLEntries extends AbstractTestEntries {
-
- private File file = new File("target/vlt-test-entries.zip");
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- if (file.exists()) {
- file.delete();
- }
- dir = new ZipMetaDir(file);
- dir.create("/a/b/c");
- dir.close();
- dir = null;
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- }
-
- protected void open() throws IOException, VltException {
- dir = new ZipMetaDir(file);
- entries = dir.getEntries();
- }
-
-
- public void testXSS() throws VltException {
- String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<!DOCTYPE entries [\n" +
- " <!ENTITY % foo \"bar\">\n" +
- "]>\n" +
- "<entries path=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3\">\n" +
- " <entry name=\".content.xml\" rp=\"\" ap=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3\">\n" +
- " <base date=\"2018-10-02T11:44:02.000+02:00\" md5=\"268b8e1f6d7b3fc9ec71226ee1a9dc70\" contentType=\"text/xml\" size=\"946\"/>\n" +
- " <work date=\"2018-10-02T11:44:02.000+02:00\" md5=\"268b8e1f6d7b3fc9ec71226ee1a9dc70\" contentType=\"text/xml\" size=\"946\"/>\n" +
- " </entry>\n" +
- " <entry name=\"_rep_policy.xml\" rp=\"\" ap=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3/rep:policy\">\n" +
- " <base date=\"2018-10-02T11:44:02.000+02:00\" md5=\"5a788decc1968551e2838bc46914f75a\" contentType=\"text/xml\" size=\"500\"/>\n" +
- " <work date=\"2018-10-02T11:44:02.000+02:00\" md5=\"5a788decc1968551e2838bc46914f75a\" contentType=\"text/xml\" size=\"500\"/>\n" +
- " </entry>\n" +
- "</entries>";
- try {
- XmlEntries entries = XmlEntries.load(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
- assertTrue(entries.hasEntry(".content.xml"));
- fail("XML entries with DTD should fail.");
- } catch (VltException e) {
- // ok
- }
- }
-}
\ No newline at end of file
diff --git a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/AbstractTestEntries.java b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/XmlEntriesTest.java
similarity index 51%
rename from vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/AbstractTestEntries.java
rename to vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/XmlEntriesTest.java
index f9214247..648a1ae8 100644
--- a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/AbstractTestEntries.java
+++ b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/XmlEntriesTest.java
@@ -14,26 +14,36 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.jackrabbit.vault.vlt.meta;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import org.apache.jackrabbit.vault.fs.api.DumpContext;
import org.apache.jackrabbit.vault.fs.api.Dumpable;
import org.apache.jackrabbit.vault.util.MD5;
import org.apache.jackrabbit.vault.vlt.VltException;
+import org.apache.jackrabbit.vault.vlt.meta.xml.XmlEntries;
+import org.apache.jackrabbit.vault.vlt.meta.xml.XmlEntryInfo;
+import org.apache.jackrabbit.vault.vlt.meta.xml.zip.ZipMetaDir;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
-import junit.framework.TestCase;
-
-/**
- * {@code TestEntries}...
- */
-public abstract class AbstractTestEntries extends TestCase {
+class XmlEntriesTest {
- protected File file = new File("target/vlt-test-entries.zip");
+ private File file;
private boolean verbose;
@@ -41,7 +51,13 @@ public abstract class AbstractTestEntries extends TestCase {
protected VltEntries entries;
- abstract protected void open() throws IOException, VltException;
+ @TempDir
+ File tempDir;
+
+ protected void open() throws IOException, VltException {
+ dir = new ZipMetaDir(file);
+ entries = dir.getEntries();
+ }
protected void close() throws IOException {
if (entries != null) {
@@ -58,7 +74,8 @@ public abstract class AbstractTestEntries extends TestCase {
open();
}
- public void testRepoAddress() throws IOException, VltException {
+ @Test
+ void testRepoAddress() throws IOException, VltException {
open();
assertNull(dir.getRepositoryUrl());
dir.setRepositoryUrl("http://localhost:8080");
@@ -67,15 +84,17 @@ public abstract class AbstractTestEntries extends TestCase {
assertEquals("http://localhost:8080", dir.getRepositoryUrl());
}
- public void testAddEntry() throws VltException, IOException {
+ @Test
+ void testAddEntry() throws VltException, IOException {
open();
assertFalse(entries.hasEntry("foo.png"));
- VltEntry e = entries.update("foo.png", "/bla", "foo.png");
+ entries.update("foo.png", "/bla", "foo.png");
reopen();
assertTrue(entries.hasEntry("foo.png"));
}
- public void testAddInfo() throws VltException, IOException {
+ @Test
+ void testAddInfo() throws VltException, IOException {
testAddEntry();
assertTrue(entries.hasEntry("foo.png"));
@@ -89,7 +108,8 @@ public abstract class AbstractTestEntries extends TestCase {
assertNotNull(e.base());
}
- public void testModifyInfo() throws VltException, IOException {
+ @Test
+ void testModifyInfo() throws VltException, IOException {
testAddInfo();
reopen();
@@ -101,6 +121,7 @@ public abstract class AbstractTestEntries extends TestCase {
base.setDate(1000);
base.setMd5(new MD5(2,3));
base.setSize(4);
+ ((XmlEntryInfo) base).setName("myName");
reopen();
e = entries.getEntry("foo.png");
base = e.base();
@@ -108,8 +129,19 @@ public abstract class AbstractTestEntries extends TestCase {
assertEquals(1000, base.getDate());
assertEquals(new MD5(2,3), base.getMd5());
assertEquals(4, base.getSize());
+ assertEquals("myName", ((XmlEntryInfo) base).getName());
}
+ @BeforeEach
+ protected void setUp() throws Exception {
+ file = new File(tempDir, "vlt-test-entries.zip");
+ dir = new ZipMetaDir(file);
+ dir.create("/a/b/c");
+ dir.close();
+ dir = null;
+ }
+
+ @AfterEach
protected void tearDown() throws Exception {
if (entries != null && verbose) {
PrintWriter out = new PrintWriter(System.out);
@@ -120,4 +152,29 @@ public abstract class AbstractTestEntries extends TestCase {
out.flush();
}
}
+
+ @Test
+ void testXSS() throws VltException {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<!DOCTYPE entries [\n" +
+ " <!ENTITY % foo \"bar\">\n" +
+ "]>\n" +
+ "<entries path=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3\">\n" +
+ " <entry name=\".content.xml\" rp=\"\" ap=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3\">\n" +
+ " <base date=\"2018-10-02T11:44:02.000+02:00\" md5=\"268b8e1f6d7b3fc9ec71226ee1a9dc70\" contentType=\"text/xml\" size=\"946\"/>\n" +
+ " <work date=\"2018-10-02T11:44:02.000+02:00\" md5=\"268b8e1f6d7b3fc9ec71226ee1a9dc70\" contentType=\"text/xml\" size=\"946\"/>\n" +
+ " </entry>\n" +
+ " <entry name=\"_rep_policy.xml\" rp=\"\" ap=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3/rep:policy\">\n" +
+ " <base date=\"2018-10-02T11:44:02.000+02:00\" md5=\"5a788decc1968551e2838bc46914f75a\" contentType=\"text/xml\" size=\"500\"/>\n" +
+ " <work date=\"2018-10-02T11:44:02.000+02:00\" md5=\"5a788decc1968551e2838bc46914f75a\" contentType=\"text/xml\" size=\"500\"/>\n" +
+ " </entry>\n" +
+ "</entries>";
+ try {
+ XmlEntries entries = XmlEntries.load(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
+ assertTrue(entries.hasEntry(".content.xml"));
+ fail("XML entries with DTD should fail.");
+ } catch (VltException e) {
+ // ok
+ }
+ }
}
\ No newline at end of file