summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorPatrick Venture <venture@google.com>2018-11-12 10:46:30 -0800
committerPatrick Venture <venture@google.com>2018-11-13 11:07:44 -0800
commit4125880028cc4a825f710b9e1b09986aacd4e1bb (patch)
treeb6d8defec27f0aefd5ac9b82356a9dd931a95ec4 /test
parent45e428a2b22f5ba134fa07ede6be1f99d12a6c2c (diff)
downloadphosphor-ipmi-blobs-4125880028cc4a825f710b9e1b09986aacd4e1bb.tar.gz
phosphor-ipmi-blobs-4125880028cc4a825f710b9e1b09986aacd4e1bb.zip
process: add IPMI error return mechanism and update errors
The IPMI packet validation code must return specific IPMI errors corresponding to what error has occurred instead of the invalid command error. Update all IPMI handler pieces to return more specific errors. Change-Id: I8d21e92015d84cc0880e3b83991aed7288e19eab Signed-off-by: Patrick Venture <venture@google.com>
Diffstat (limited to 'test')
-rw-r--r--test/ipmi_close_unittest.cpp3
-rw-r--r--test/ipmi_commit_unittest.cpp6
-rw-r--r--test/ipmi_delete_unittest.cpp6
-rw-r--r--test/ipmi_enumerate_unittest.cpp3
-rw-r--r--test/ipmi_open_unittest.cpp6
-rw-r--r--test/ipmi_sessionstat_unittest.cpp3
-rw-r--r--test/ipmi_stat_unittest.cpp6
-rw-r--r--test/ipmi_write_unittest.cpp3
-rw-r--r--test/ipmi_writemeta_unittest.cpp3
-rw-r--r--test/process_unittest.cpp31
10 files changed, 50 insertions, 20 deletions
diff --git a/test/ipmi_close_unittest.cpp b/test/ipmi_close_unittest.cpp
index f315ea0..edfddca 100644
--- a/test/ipmi_close_unittest.cpp
+++ b/test/ipmi_close_unittest.cpp
@@ -38,7 +38,8 @@ TEST(BlobCloseTest, ManagerRejectsCloseReturnsFailure)
std::memcpy(request, &req, sizeof(req));
EXPECT_CALL(mgr, close(sessionId)).WillOnce(Return(false));
- EXPECT_EQ(IPMI_CC_INVALID, closeBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_UNSPECIFIED_ERROR,
+ closeBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobCloseTest, BlobClosedReturnsSuccess)
diff --git a/test/ipmi_commit_unittest.cpp b/test/ipmi_commit_unittest.cpp
index 34ff10d..30f78bf 100644
--- a/test/ipmi_commit_unittest.cpp
+++ b/test/ipmi_commit_unittest.cpp
@@ -35,7 +35,8 @@ TEST(BlobCommitTest, InvalidCommitDataLengthReturnsFailure)
dataLen = sizeof(struct BmcBlobCommitTx);
- EXPECT_EQ(IPMI_CC_INVALID, commitBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_REQ_DATA_LEN_INVALID,
+ commitBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobCommitTest, ValidCommitNoDataHandlerRejectsReturnsFailure)
@@ -57,7 +58,8 @@ TEST(BlobCommitTest, ValidCommitNoDataHandlerRejectsReturnsFailure)
EXPECT_CALL(mgr, commit(req->sessionId, _)).WillOnce(Return(false));
- EXPECT_EQ(IPMI_CC_INVALID, commitBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_UNSPECIFIED_ERROR,
+ commitBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobCommitTest, ValidCommitNoDataHandlerAcceptsReturnsSuccess)
diff --git a/test/ipmi_delete_unittest.cpp b/test/ipmi_delete_unittest.cpp
index 409635d..6985eb1 100644
--- a/test/ipmi_delete_unittest.cpp
+++ b/test/ipmi_delete_unittest.cpp
@@ -36,7 +36,8 @@ TEST(BlobDeleteTest, InvalidRequestLengthReturnsFailure)
dataLen = sizeof(struct BmcBlobDeleteTx) + blobId.length();
- EXPECT_EQ(IPMI_CC_INVALID, deleteBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_REQ_DATA_LEN_INVALID,
+ deleteBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobDeleteTest, RequestRejectedReturnsFailure)
@@ -60,7 +61,8 @@ TEST(BlobDeleteTest, RequestRejectedReturnsFailure)
EXPECT_CALL(mgr, deleteBlob(StrEq(blobId))).WillOnce(Return(false));
- EXPECT_EQ(IPMI_CC_INVALID, deleteBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_UNSPECIFIED_ERROR,
+ deleteBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobDeleteTest, BlobDeleteReturnsOk)
diff --git a/test/ipmi_enumerate_unittest.cpp b/test/ipmi_enumerate_unittest.cpp
index 041a8cb..184c686 100644
--- a/test/ipmi_enumerate_unittest.cpp
+++ b/test/ipmi_enumerate_unittest.cpp
@@ -31,7 +31,8 @@ TEST(BlobEnumerateTest, VerifyIfRequestByIdInvalidReturnsFailure)
EXPECT_CALL(mgr, getBlobId(req.blobIdx)).WillOnce(Return(""));
- EXPECT_EQ(IPMI_CC_INVALID, enumerateBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_INVALID_FIELD_REQUEST,
+ enumerateBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobEnumerateTest, BoringRequestByIdAndReceive)
diff --git a/test/ipmi_open_unittest.cpp b/test/ipmi_open_unittest.cpp
index 523025d..704c144 100644
--- a/test/ipmi_open_unittest.cpp
+++ b/test/ipmi_open_unittest.cpp
@@ -39,7 +39,8 @@ TEST(BlobOpenTest, InvalidRequestLengthReturnsFailure)
dataLen = sizeof(struct BmcBlobOpenTx) + blobId.length();
- EXPECT_EQ(IPMI_CC_INVALID, openBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_REQ_DATA_LEN_INVALID,
+ openBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobOpenTest, RequestRejectedReturnsFailure)
@@ -65,7 +66,8 @@ TEST(BlobOpenTest, RequestRejectedReturnsFailure)
EXPECT_CALL(mgr, open(req->flags, StrEq(blobId), _))
.WillOnce(Return(false));
- EXPECT_EQ(IPMI_CC_INVALID, openBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_UNSPECIFIED_ERROR,
+ openBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobOpenTest, BlobOpenReturnsOk)
diff --git a/test/ipmi_sessionstat_unittest.cpp b/test/ipmi_sessionstat_unittest.cpp
index 70c36ec..a71252c 100644
--- a/test/ipmi_sessionstat_unittest.cpp
+++ b/test/ipmi_sessionstat_unittest.cpp
@@ -37,7 +37,8 @@ TEST(BlobSessionStatTest, RequestRejectedByManagerReturnsFailure)
Matcher<struct BlobMeta*>(_)))
.WillOnce(Return(false));
- EXPECT_EQ(IPMI_CC_INVALID, sessionStatBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_UNSPECIFIED_ERROR,
+ sessionStatBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobSessionStatTest, RequestSucceedsNoMetadata)
diff --git a/test/ipmi_stat_unittest.cpp b/test/ipmi_stat_unittest.cpp
index 75f90c4..e7ff277 100644
--- a/test/ipmi_stat_unittest.cpp
+++ b/test/ipmi_stat_unittest.cpp
@@ -39,7 +39,8 @@ TEST(BlobStatTest, InvalidRequestLengthReturnsFailure)
dataLen = sizeof(struct BmcBlobStatTx) + blobId.length();
- EXPECT_EQ(IPMI_CC_INVALID, statBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_REQ_DATA_LEN_INVALID,
+ statBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobStatTest, RequestRejectedReturnsFailure)
@@ -65,7 +66,8 @@ TEST(BlobStatTest, RequestRejectedReturnsFailure)
Matcher<struct BlobMeta*>(_)))
.WillOnce(Return(false));
- EXPECT_EQ(IPMI_CC_INVALID, statBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_UNSPECIFIED_ERROR,
+ statBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobStatTest, RequestSucceedsNoMetadata)
diff --git a/test/ipmi_write_unittest.cpp b/test/ipmi_write_unittest.cpp
index 7b5e45f..99615af 100644
--- a/test/ipmi_write_unittest.cpp
+++ b/test/ipmi_write_unittest.cpp
@@ -40,7 +40,8 @@ TEST(BlobWriteTest, ManagerReturnsFailureReturnsFailure)
ElementsAreArray(expectedBytes, sizeof(expectedBytes))))
.WillOnce(Return(false));
- EXPECT_EQ(IPMI_CC_INVALID, writeBlob(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_UNSPECIFIED_ERROR,
+ writeBlob(&mgr, request, reply, &dataLen));
}
TEST(BlobWriteTest, ManagerReturnsTrueWriteSucceeds)
diff --git a/test/ipmi_writemeta_unittest.cpp b/test/ipmi_writemeta_unittest.cpp
index 2dfbe59..2d63452 100644
--- a/test/ipmi_writemeta_unittest.cpp
+++ b/test/ipmi_writemeta_unittest.cpp
@@ -39,7 +39,8 @@ TEST(BlobWriteMetaTest, ManagerReturnsFailureReturnsFailure)
ElementsAreArray(expectedBytes, sizeof(expectedBytes))))
.WillOnce(Return(false));
- EXPECT_EQ(IPMI_CC_INVALID, writeMeta(&mgr, request, reply, &dataLen));
+ EXPECT_EQ(IPMI_CC_UNSPECIFIED_ERROR,
+ writeMeta(&mgr, request, reply, &dataLen));
}
TEST(BlobWriteMetaTest, ManagerReturnsTrueWriteSucceeds)
diff --git a/test/process_unittest.cpp b/test/process_unittest.cpp
index 63e6f5e..4f8c9a6 100644
--- a/test/process_unittest.cpp
+++ b/test/process_unittest.cpp
@@ -57,8 +57,11 @@ TEST(ValidateBlobCommandTest, InvalidCommandReturnsFailure)
request[0] = 0xff; // There is no command 0xff.
dataLen = sizeof(uint8_t); // There is no payload for CRC.
+ ipmi_ret_t rc;
- EXPECT_EQ(nullptr, validateBlobCommand(&crc, request, reply, &dataLen));
+ EXPECT_EQ(nullptr,
+ validateBlobCommand(&crc, request, reply, &dataLen, &rc));
+ EXPECT_EQ(IPMI_CC_INVALID_FIELD_REQUEST, rc);
}
TEST(ValidateBlobCommandTest, ValidCommandWithoutPayload)
@@ -72,8 +75,10 @@ TEST(ValidateBlobCommandTest, ValidCommandWithoutPayload)
request[0] = BlobOEMCommands::bmcBlobGetCount;
dataLen = sizeof(uint8_t); // There is no payload for CRC.
+ ipmi_ret_t rc;
- IpmiBlobHandler res = validateBlobCommand(&crc, request, reply, &dataLen);
+ IpmiBlobHandler res =
+ validateBlobCommand(&crc, request, reply, &dataLen, &rc);
EXPECT_FALSE(res == nullptr);
EqualFunctions(getBlobCount, res);
}
@@ -91,8 +96,11 @@ TEST(ValidateBlobCommandTest, WithPayloadMinimumLengthIs3VerifyChecks)
request[0] = BlobOEMCommands::bmcBlobGetCount;
dataLen = sizeof(uint8_t) + sizeof(uint16_t);
// There is a payload, but there are insufficient bytes.
+ ipmi_ret_t rc;
- EXPECT_EQ(nullptr, validateBlobCommand(&crc, request, reply, &dataLen));
+ EXPECT_EQ(nullptr,
+ validateBlobCommand(&crc, request, reply, &dataLen, &rc));
+ EXPECT_EQ(IPMI_CC_REQ_DATA_LEN_INVALID, rc);
}
TEST(ValidateBlobCommandTest, WithPayloadAndInvalidCrc)
@@ -125,7 +133,11 @@ TEST(ValidateBlobCommandTest, WithPayloadAndInvalidCrc)
}));
EXPECT_CALL(crc, get()).WillOnce(Return(0x1234));
- EXPECT_EQ(nullptr, validateBlobCommand(&crc, request, reply, &dataLen));
+ ipmi_ret_t rc;
+
+ EXPECT_EQ(nullptr,
+ validateBlobCommand(&crc, request, reply, &dataLen, &rc));
+ EXPECT_EQ(IPMI_CC_UNSPECIFIED_ERROR, rc);
}
TEST(ValidateBlobCommandTest, WithPayloadAndValidCrc)
@@ -158,7 +170,10 @@ TEST(ValidateBlobCommandTest, WithPayloadAndValidCrc)
}));
EXPECT_CALL(crc, get()).WillOnce(Return(0x3412));
- IpmiBlobHandler res = validateBlobCommand(&crc, request, reply, &dataLen);
+ ipmi_ret_t rc;
+
+ IpmiBlobHandler res =
+ validateBlobCommand(&crc, request, reply, &dataLen, &rc);
EXPECT_FALSE(res == nullptr);
EqualFunctions(writeBlob, res);
}
@@ -181,8 +196,10 @@ TEST(ValidateBlobCommandTest, InputIntegrationTest)
uint8_t reply[MAX_IPMI_BUFFER] = {0};
dataLen = sizeof(request);
+ ipmi_ret_t rc;
- IpmiBlobHandler res = validateBlobCommand(&crc, request, reply, &dataLen);
+ IpmiBlobHandler res =
+ validateBlobCommand(&crc, request, reply, &dataLen, &rc);
EXPECT_FALSE(res == nullptr);
EqualFunctions(openBlob, res);
}
@@ -250,7 +267,7 @@ TEST(ProcessBlobCommandTest, CommandReturnsOkWithInvalidPayloadLength)
dataLen = sizeof(request);
- EXPECT_EQ(IPMI_CC_INVALID,
+ EXPECT_EQ(IPMI_CC_UNSPECIFIED_ERROR,
processBlobCommand(h, &manager, &crc, request, reply, &dataLen));
}
OpenPOWER on IntegriCloud