diff --git a/agent/src/com/cloud/agent/dao/impl/PropertiesStorage.java b/agent/src/com/cloud/agent/dao/impl/PropertiesStorage.java index 2bf26f48642..411d946a294 100755 --- a/agent/src/com/cloud/agent/dao/impl/PropertiesStorage.java +++ b/agent/src/com/cloud/agent/dao/impl/PropertiesStorage.java @@ -17,7 +17,6 @@ package com.cloud.agent.dao.impl; import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; @@ -26,6 +25,7 @@ import java.util.Properties; import javax.ejb.Local; +import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; import com.cloud.agent.dao.StorageComponent; @@ -59,18 +59,10 @@ public class PropertiesStorage implements StorageComponent { _properties.store(output, _name); output.flush(); output.close(); - } catch (FileNotFoundException e) { - s_logger.error("Who deleted the file? ", e); } catch (IOException e) { s_logger.error("Uh-oh: ", e); } finally { - if (output != null) { - try { - output.close(); - } catch (IOException e) { - // ignore. - } - } + IOUtils.closeQuietly(output); } } @@ -99,7 +91,7 @@ public class PropertiesStorage implements StorageComponent { } try { - _properties.load(new FileInputStream(file)); + PropertiesUtil.loadFromFile(_properties, file); _file = file; } catch (FileNotFoundException e) { s_logger.error("How did we get here? ", e); diff --git a/agent/test/com/cloud/agent/dao/impl/PropertiesStorageTest.java b/agent/test/com/cloud/agent/dao/impl/PropertiesStorageTest.java new file mode 100644 index 00000000000..40758921b93 --- /dev/null +++ b/agent/test/com/cloud/agent/dao/impl/PropertiesStorageTest.java @@ -0,0 +1,51 @@ +package com.cloud.agent.dao.impl; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; + +import junit.framework.Assert; + +import org.apache.commons.io.FileUtils; +import org.junit.Test; + +public class PropertiesStorageTest { + @Test + public void configureWithNotExistingFile() { + String fileName = "target/notyetexistingfile" + + System.currentTimeMillis(); + File file = new File(fileName); + + PropertiesStorage storage = new PropertiesStorage(); + HashMap params = new HashMap(); + params.put("path", fileName); + Assert.assertTrue(storage.configure("test", params)); + Assert.assertTrue(file.exists()); + storage.persist("foo", "bar"); + Assert.assertEquals("bar", storage.get("foo")); + + storage.stop(); + file.delete(); + } + + @Test + public void configureWithExistingFile() throws IOException { + String fileName = "target/existingfile" + + System.currentTimeMillis(); + File file = new File(fileName); + + FileUtils.writeStringToFile(file, "a=b\n\n"); + + PropertiesStorage storage = new PropertiesStorage(); + HashMap params = new HashMap(); + params.put("path", fileName); + Assert.assertTrue(storage.configure("test", params)); + Assert.assertEquals("b", storage.get("a")); + Assert.assertTrue(file.exists()); + storage.persist("foo", "bar"); + Assert.assertEquals("bar", storage.get("foo")); + + storage.stop(); + file.delete(); + } +}