]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2491] Added a function to add boolean data field to an array.
authorMarcin Siodelski <marcin@isc.org>
Mon, 3 Dec 2012 12:26:14 +0000 (13:26 +0100)
committerMarcin Siodelski <marcin@isc.org>
Mon, 3 Dec 2012 12:26:14 +0000 (13:26 +0100)
src/lib/dhcp/option_custom.cc
src/lib/dhcp/option_custom.h
src/lib/dhcp/tests/option_custom_unittest.cc

index a3012bfeb60b83df260e725a795cb90fb9256f56..600d80a6c9456e7249e295b8749080111eb1995b 100644 (file)
@@ -63,6 +63,15 @@ OptionCustom::addArrayDataField(const asiolink::IOAddress& address) {
     buffers_.push_back(buf);
 }
 
+void
+OptionCustom::addArrayDataField(const bool value) {
+    checkArrayType();
+
+    OptionBuffer buf;
+    OptionDataTypeUtil::writeBool(value, buf);
+    buffers_.push_back(buf);
+}
+
 void
 OptionCustom::checkArrayType() const {
     if (!definition_.getArrayType()) {
index 420245895cdf91e63fe6e3947476eece1e00e89c..ce5bf65819f808193cc0008febde784f94359fdf 100644 (file)
@@ -93,6 +93,11 @@ public:
     /// a buffer being created.
     void addArrayDataField(const asiolink::IOAddress& address);
 
+    /// @brief Create new buffer and store boolean value in it.
+    ///
+    /// @param value value to be stored in the created buffer.
+    void addArrayDataField(const bool value);
+
     /// @brief Return a number of the data fields.
     ///
     /// @return number of data fields held by the option.
index eccc5b29725a470befa9c50a7d67cb8f95076e4f..64df0d734da096d8df03710c01a2345453a4bfb7 100644 (file)
@@ -973,6 +973,9 @@ TEST_F(OptionCustomTest, setFqdnData) {
     EXPECT_EQ("example.com.", fqdn);
 }
 
+// The purpose of this test is to verify that an option carrying
+// an array of boolean values can be created with no values
+// initially and that values can be later added to it.
 TEST_F(OptionCustomTest, setBooleanDataArray) {
     OptionDefinition opt_def("OPTION_FOO", 1000, "boolean", true);
 
@@ -984,7 +987,24 @@ TEST_F(OptionCustomTest, setBooleanDataArray) {
     );
     ASSERT_TRUE(option);
 
+    // Initially, the array should contain no values.
     ASSERT_EQ(0, option->getDataFieldsNum());
+
+    // Add some boolean values to it.
+    ASSERT_NO_THROW(option->addArrayDataField(true));
+    ASSERT_NO_THROW(option->addArrayDataField(false));
+    ASSERT_NO_THROW(option->addArrayDataField(true));
+
+    // Verify that the new data fields can be added.
+    bool value0 = false;
+    ASSERT_NO_THROW(value0 = option->readBoolean(0));
+    EXPECT_TRUE(value0);
+    bool value1 = true;
+    ASSERT_NO_THROW(value1 = option->readBoolean(1));
+    EXPECT_FALSE(value1);
+    bool value2 = false;
+    ASSERT_NO_THROW(value2 = option->readBoolean(2));
+    EXPECT_TRUE(value2);
 }
 
 /// The purpose of this test is to verify that an option comprising