[libcamera-devel] [RFC PATCH] tests: ipa_data_serializer_test: Test serializing fds
Umang Jain
umang.jain at ideasonboard.com
Wed Aug 4 14:01:21 CEST 2021
Hi Paul
On 8/4/21 5:05 PM, Paul Elder wrote:
> 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();
In context of testVectorSerdes() which serdes a vector of
FileDescriptors, this makes sense to me.
Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
> +}
> +
> /**
> * \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)
More information about the libcamera-devel
mailing list