[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