summaryrefslogtreecommitdiffstats
path: root/src/lib/util
diff options
context:
space:
mode:
authorMarcin Siodelski <marcin@isc.org>2015-01-12 12:38:47 +0100
committerMarcin Siodelski <marcin@isc.org>2015-01-12 12:38:47 +0100
commitfbce7dd40fdc965ea439746797dcebb9cb83836e (patch)
tree84cdc2e2c9a99c8188e5f18d8625c7b87449a999 /src/lib/util
parent[3671] Memfile loads leases from multiple lease files. (diff)
downloadkea-fbce7dd40fdc965ea439746797dcebb9cb83836e.tar.xz
kea-fbce7dd40fdc965ea439746797dcebb9cb83836e.zip
[3671] Added unit test for loading v6 leases from multiple files.
Also, prevented opening the optional lease files if they don't exist.
Diffstat (limited to 'src/lib/util')
-rw-r--r--src/lib/util/csv_file.cc13
-rw-r--r--src/lib/util/csv_file.h10
-rw-r--r--src/lib/util/tests/csv_file_unittest.cc26
3 files changed, 46 insertions, 3 deletions
diff --git a/src/lib/util/csv_file.cc b/src/lib/util/csv_file.cc
index 7b29a38bf1..648d6ac3ba 100644
--- a/src/lib/util/csv_file.cc
+++ b/src/lib/util/csv_file.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
@@ -97,6 +97,17 @@ CSVFile::close() {
}
}
+bool
+CSVFile::exists() const {
+ std::ifstream fs(filename_);
+ if (fs.good()) {
+ fs.close();
+ return (true);
+ }
+ fs.close();
+ return (false);
+}
+
void
CSVFile::flush() const {
checkStreamStatusAndReset("flush");
diff --git a/src/lib/util/csv_file.h b/src/lib/util/csv_file.h
index 123948f8bd..2ac2bef05f 100644
--- a/src/lib/util/csv_file.h
+++ b/src/lib/util/csv_file.h
@@ -1,4 +1,4 @@
-// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
@@ -320,6 +320,14 @@ public:
/// @brief Closes the CSV file.
void close();
+ /// @brief Checks if the CSV file exists.
+ ///
+ /// This method doesn't check if the existing file has a correct file
+ /// format.
+ ///
+ /// @return true if file exists, false otherwise.
+ bool exists() const;
+
/// @brief Flushes a file.
void flush() const;
diff --git a/src/lib/util/tests/csv_file_unittest.cc b/src/lib/util/tests/csv_file_unittest.cc
index 0a0b12d297..234a826e20 100644
--- a/src/lib/util/tests/csv_file_unittest.cc
+++ b/src/lib/util/tests/csv_file_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
@@ -454,5 +454,29 @@ TEST_F(CSVFileTest, validateHeader) {
EXPECT_THROW(csv->open(), CSVFileError);
}
+// This test checks that the exists method of the CSVFile class properly
+// checks that the file exists.
+TEST_F(CSVFileTest, exists) {
+ // Create a new CSV file that contains a header and two data rows.
+ writeFile("animal,age,color\n"
+ "cat,10,white\n"
+ "lion,15,yellow\n");
+
+ boost::scoped_ptr<CSVFile> csv(new CSVFile(testfile_));
+ // The CSVFile class should return true even if the file hasn't been
+ // opened.
+ EXPECT_TRUE(csv->exists());
+ // Now open the file and make sure it still returns true.
+ ASSERT_NO_THROW(csv->open());
+ EXPECT_TRUE(csv->exists());
+
+ // Close the file and remove it.
+ csv->close();
+ removeFile();
+
+ // The file should not exist.
+ EXPECT_FALSE(csv->exists());
+}
+
} // end of anonymous namespace