From 8e9d7ff89a66bf987d7fcb7c298a53a992625375 Mon Sep 17 00:00:00 2001 From: Godin Date: Tue, 7 Dec 2010 15:13:02 +0000 Subject: [PATCH] SONAR-1605: Correct backup should be created if value of property already contains CDATA section --- .../sonar/server/configuration/Backup.java | 14 +++++++++--- .../server/configuration/BackupTest.java | 22 +++++++++++++++++++ .../BackupTest/backup-with-splitted-cdata.xml | 22 +++++++++++++++++++ 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 sonar-server/src/test/resources/org/sonar/server/configuration/BackupTest/backup-with-splitted-cdata.xml diff --git a/sonar-server/src/main/java/org/sonar/server/configuration/Backup.java b/sonar-server/src/main/java/org/sonar/server/configuration/Backup.java index 1e88d02b3db..a8ed347761e 100644 --- a/sonar-server/src/main/java/org/sonar/server/configuration/Backup.java +++ b/sonar-server/src/main/java/org/sonar/server/configuration/Backup.java @@ -27,6 +27,7 @@ import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; import com.thoughtworks.xstream.io.xml.XppDriver; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.CharEncoding; +import org.apache.commons.lang.StringUtils; import org.sonar.api.database.DatabaseSession; import org.sonar.jpa.entity.SchemaMigration; @@ -147,17 +148,24 @@ public class Backup { @Override protected void writeText(QuickWriter writer, String text) { writer.write("' + * so we will split all occurrences of this sequence into two CDATA + * first one would contain ']]' and second '>' + */ + text = StringUtils.replace(text, "]]>", "]]]]>"); writer.write(text); writer.write("]]>"); } }; } - } - ); + }); xStream.processAnnotations(SonarConfig.class); xStream.addDefaultImplementation(ArrayList.class, Collection.class); - xStream.registerConverter(new DateConverter(DATE_FORMAT, new String[]{})); + xStream.registerConverter(new DateConverter(DATE_FORMAT, new String[] {})); for (Backupable backupable : backupables) { backupable.configure(xStream); diff --git a/sonar-server/src/test/java/org/sonar/server/configuration/BackupTest.java b/sonar-server/src/test/java/org/sonar/server/configuration/BackupTest.java index 07d86fce8e6..4bcc6d92584 100644 --- a/sonar-server/src/test/java/org/sonar/server/configuration/BackupTest.java +++ b/sonar-server/src/test/java/org/sonar/server/configuration/BackupTest.java @@ -181,6 +181,19 @@ public class BackupTest { assertThat(metric.getId(), nullValue()); } + @Test + public void shouldExportAndImportInnerCDATA() throws Exception { + SonarConfig sonarConfig = getSonarConfig(); + sonarConfig.setProperties(getPropertiesWithCDATA()); + + Backup backup = new Backup(Arrays.asList(new MetricsBackup(null), new PropertiesBackup(null))); + String xml = backup.getXmlFromSonarConfig(sonarConfig); + assertXmlAreSimilar(xml, "backup-with-splitted-cdata.xml"); + + sonarConfig = backup.getSonarConfigFromXml(xml); + assertTrue(CollectionUtils.isEqualCollection(sonarConfig.getProperties(), getPropertiesWithCDATA())); + } + private SonarConfig getSonarConfig() throws ParseException { DateFormat dateFormat = new SimpleDateFormat(Backup.DATE_FORMAT); Date date = dateFormat.parse("2008-11-18"); @@ -225,6 +238,15 @@ public class BackupTest { return properties; } + private List getPropertiesWithCDATA() { + List properties = new ArrayList(); + properties.add(new Property("key1", "")); + properties.add(new Property("key2", "]]>value2")); + properties.add(new Property("key3", "prefix]]>value3")); + properties.add(new Property("key4", "")); + return properties; + } + private List getPropertiesWithXmlIlliciteCharacters() { List properties = new ArrayList(); properties.add(new Property("key", "")); diff --git a/sonar-server/src/test/resources/org/sonar/server/configuration/BackupTest/backup-with-splitted-cdata.xml b/sonar-server/src/test/resources/org/sonar/server/configuration/BackupTest/backup-with-splitted-cdata.xml new file mode 100644 index 00000000000..cc6031719bc --- /dev/null +++ b/sonar-server/src/test/resources/org/sonar/server/configuration/BackupTest/backup-with-splitted-cdata.xml @@ -0,0 +1,22 @@ + + + + + + + ]]> + + + + value2]]> + + + + value3]]> + + + + ]]> + + + -- 2.39.5