[libcamera-devel] [RFC PATCH] tests: ipa_data_serializer_test: Test serializing fds
Paul Elder
paul.elder at ideasonboard.com
Wed Aug 4 13:35:29 CEST 2021
Add tests to test IPADataSerializer serializing FileDescriptors.
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
include/libcamera/file_descriptor.h | 1 +
src/libcamera/file_descriptor.cpp | 9 ++++
.../ipa_data_serializer_test.cpp | 43 +++++++++++++++++++
3 files changed, 53 insertions(+)
diff --git a/include/libcamera/file_descriptor.h b/include/libcamera/file_descriptor.h
index d514aac7..8f1d6f21 100644
--- a/include/libcamera/file_descriptor.h
+++ b/include/libcamera/file_descriptor.h
@@ -22,6 +22,7 @@ public:
FileDescriptor &operator=(const FileDescriptor &other);
FileDescriptor &operator=(FileDescriptor &&other);
+ bool operator==(const FileDescriptor &other) const;
bool isValid() const { return fd_ != nullptr; }
int fd() const { return fd_ ? fd_->fd() : -1; }
diff --git a/src/libcamera/file_descriptor.cpp b/src/libcamera/file_descriptor.cpp
index 638b3bbe..f1394153 100644
--- a/src/libcamera/file_descriptor.cpp
+++ b/src/libcamera/file_descriptor.cpp
@@ -191,6 +191,15 @@ FileDescriptor &FileDescriptor::operator=(FileDescriptor &&other)
return *this;
}
+/**
+ * \brief Compare FileDescriptor instances for equality
+ * \return True if the underlying file descriptor is equal, false otherwise
+ */
+bool FileDescriptor::operator==(const FileDescriptor &other) const
+{
+ return this->fd() == other.fd();
+}
+
/**
* \fn FileDescriptor::isValid()
* \brief Check if the FileDescriptor instance is valid
diff --git a/test/serialization/ipa_data_serializer_test.cpp b/test/serialization/ipa_data_serializer_test.cpp
index 1e8f7e21..9c8ff69c 100644
--- a/test/serialization/ipa_data_serializer_test.cpp
+++ b/test/serialization/ipa_data_serializer_test.cpp
@@ -11,6 +11,7 @@
#include <iostream>
#include <limits>
#include <stdlib.h>
+#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <tuple>
@@ -144,6 +145,10 @@ protected:
if (ret != TestPass)
return ret;
+ ret = testFd();
+ if (ret != TestPass)
+ return ret;
+
return TestPass;
}
@@ -435,6 +440,44 @@ private:
return TestPass;
}
+
+ int testFd()
+ {
+ /* Test serdes of single fd */
+ int memfd = memfd_create("test", 0);
+ if (memfd < 0) {
+ cerr << "Failed to create memfd" << endl;
+ return TestFail;
+ }
+
+ FileDescriptor fd = FileDescriptor(std::move(memfd));
+ if (memfd != -1) {
+ cerr << "FileDescriptor move constructor failed" << endl;
+ return TestFail;
+ }
+
+ if (testPodSerdes(fd) != TestPass)
+ return TestFail;
+
+ /* Test serdes of vector of fds */
+ std::vector<FileDescriptor> vecFds;
+
+ for (unsigned int i = 0; i < 10; i++) {
+ std::string name = "test" + std::to_string(i);
+ int mfd = memfd_create(name.c_str(), 0);
+ if (mfd < 0)
+ return TestFail;
+
+ vecFds.push_back(FileDescriptor(std::move(mfd)));
+ if (mfd != -1)
+ return TestFail;
+ }
+
+ if (testVectorSerdes(vecFds) != TestPass)
+ return TestFail;
+
+ return TestPass;
+ }
};
TEST_REGISTER(IPADataSerializerTest)
--
2.27.0
More information about the libcamera-devel
mailing list