From dcee88841e48d4b67223bf465acb80c74d5d982a Mon Sep 17 00:00:00 2001 From: "Christian P. MOMON" Date: Wed, 14 May 2014 00:08:45 +0200 Subject: [PATCH] Fix ConcurrentModificationException in RSSCache. Add test. --- src/fr/devinsy/util/rss/RSSCache.java | 28 ++++++++++- .../devinsy/util/util/rss/RSSCacheTest.java | 49 +++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 test/fr/devinsy/util/util/rss/RSSCacheTest.java diff --git a/src/fr/devinsy/util/rss/RSSCache.java b/src/fr/devinsy/util/rss/RSSCache.java index fcff04d..806e7d8 100644 --- a/src/fr/devinsy/util/rss/RSSCache.java +++ b/src/fr/devinsy/util/rss/RSSCache.java @@ -21,6 +21,8 @@ package fr.devinsy.util.rss; import java.util.HashMap; import java.util.Locale; +import fr.devinsy.util.StringList; + /** * * @author christian.momon@devinsy.fr @@ -167,7 +169,7 @@ public class RSSCache */ public void setOudated(final String name) { - for (String subkey : this.cache.keySet()) + for (String subkey : subkeys(name)) { if (subkey.startsWith(name)) { @@ -176,6 +178,30 @@ public class RSSCache } } + /** + * + * @param key + */ + public StringList subkeys(final String name) + { + StringList result; + + // + result = new StringList(); + + // + for (String key : this.cache.keySet()) + { + if (key.startsWith(name)) + { + result.add(key); + } + } + + // + return result; + } + /** * * @return diff --git a/test/fr/devinsy/util/util/rss/RSSCacheTest.java b/test/fr/devinsy/util/util/rss/RSSCacheTest.java new file mode 100644 index 0000000..298f0fd --- /dev/null +++ b/test/fr/devinsy/util/util/rss/RSSCacheTest.java @@ -0,0 +1,49 @@ +package fr.devinsy.util.util.rss; + +import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.junit.Before; +import org.junit.Test; + +import fr.devinsy.util.rss.RSSCache; + +/** + * + * @author Christian P. Momon + */ +public class RSSCacheTest +{ + static protected org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(RSSCacheTest.class); + + /** + * + */ + @Before + public void before() + { + BasicConfigurator.configure(); + Logger.getRootLogger().setLevel(Level.ERROR); + } + + /** + * + */ + @Test + public void test01() + { + // + logger.debug("===== test starting..."); + + RSSCache cache = RSSCache.instance(); + + cache.put("ALPHA", "Mignonne, allons voir si la rose"); + cache.put("BRAVO", "Qui ce matin avoit desclose"); + cache.put("CHARLIE", "Sa robe de pourpre au Soleil,"); + + cache.setOudated("CHARLIE"); + + // + logger.debug("===== test done."); + } +}