summaryrefslogtreecommitdiffstats
path: root/test/message/payload.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/message/payload.cpp')
-rw-r--r--test/message/payload.cpp134
1 files changed, 134 insertions, 0 deletions
diff --git a/test/message/payload.cpp b/test/message/payload.cpp
index 9d20ff0..56d8d41 100644
--- a/test/message/payload.cpp
+++ b/test/message/payload.cpp
@@ -13,8 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#define SD_JOURNAL_SUPPRESS_LOCATION
+
+#include <systemd/sd-journal.h>
+
#include <ipmid/api.hpp>
#include <ipmid/message.hpp>
+#include <stdexcept>
#include <gtest/gtest.h>
@@ -306,3 +311,132 @@ TEST(PayloadRequest, PartialPayload)
uint32_t k2 = 0x02008604;
ASSERT_EQ(v2, k2);
}
+
+std::vector<std::string> logs;
+
+extern "C" {
+int sd_journal_send(const char* format, ...)
+{
+ logs.push_back(format);
+ return 0;
+}
+
+int sd_journal_send_with_location(const char* file, const char* line,
+ const char* func, const char* format, ...)
+{
+ logs.push_back(format);
+ return 0;
+}
+}
+
+class PayloadLogging : public testing::Test
+{
+ public:
+ void SetUp()
+ {
+ logs.clear();
+ }
+};
+
+TEST_F(PayloadLogging, TrailingOk)
+{
+ {
+ ipmi::message::Payload p({1, 2});
+ }
+ EXPECT_EQ(logs.size(), 0);
+}
+
+TEST_F(PayloadLogging, EnforcingUnchecked)
+{
+ {
+ ipmi::message::Payload p({1, 2});
+ p.trailingOk = false;
+ }
+ EXPECT_EQ(logs.size(), 1);
+}
+
+TEST_F(PayloadLogging, EnforcingUncheckedUnpacked)
+{
+ {
+ ipmi::message::Payload p({1, 2});
+ p.trailingOk = false;
+ uint8_t out;
+ p.unpack(out, out);
+ }
+ EXPECT_EQ(logs.size(), 1);
+}
+
+TEST_F(PayloadLogging, EnforcingUncheckedError)
+{
+ {
+ ipmi::message::Payload p({1, 2});
+ p.trailingOk = false;
+ uint32_t out;
+ p.unpack(out);
+ }
+ EXPECT_EQ(logs.size(), 0);
+}
+
+TEST_F(PayloadLogging, EnforcingChecked)
+{
+ {
+ ipmi::message::Payload p({1, 2});
+ p.trailingOk = false;
+ EXPECT_FALSE(p.fullyUnpacked());
+ }
+ EXPECT_EQ(logs.size(), 0);
+}
+
+TEST_F(PayloadLogging, EnforcingCheckedUnpacked)
+{
+ {
+ ipmi::message::Payload p({1, 2});
+ p.trailingOk = false;
+ uint8_t out;
+ p.unpack(out, out);
+ EXPECT_TRUE(p.fullyUnpacked());
+ }
+ EXPECT_EQ(logs.size(), 0);
+}
+
+TEST_F(PayloadLogging, EnforcingUnpackPayload)
+{
+ {
+ ipmi::message::Payload p;
+ {
+ ipmi::message::Payload q({1, 2});
+ q.trailingOk = false;
+ q.unpack(p);
+ }
+ EXPECT_EQ(logs.size(), 0);
+ }
+ EXPECT_EQ(logs.size(), 1);
+}
+
+TEST_F(PayloadLogging, EnforcingMove)
+{
+ {
+ ipmi::message::Payload p;
+ {
+ ipmi::message::Payload q({1, 2});
+ q.trailingOk = false;
+ p = std::move(q);
+ }
+ EXPECT_EQ(logs.size(), 0);
+ }
+ EXPECT_EQ(logs.size(), 1);
+}
+
+TEST_F(PayloadLogging, EnforcingException)
+{
+ try
+ {
+ ipmi::message::Payload p({1, 2});
+ p.trailingOk = false;
+ throw std::runtime_error("test");
+ }
+ catch (...)
+ {
+ }
+ EXPECT_EQ(logs.size(), 0);
+}
OpenPOWER on IntegriCloud