Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
cmake_minimum_required(VERSION 3.10)

project(tof-driver-tests)

# Set C++ standard
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Find GoogleTest
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})

# Build test utilities library
add_library(driver_test_utils STATIC
utilities/test_utils.cpp
)
target_include_directories(driver_test_utils PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
${GTEST_INCLUDE_DIRS}
)
target_link_libraries(driver_test_utils
${GTEST_LIBRARIES}
pthread
)

# Build V4L2 driver test
add_executable(driver-v4l2_test
system/driver-v4l2_test.cpp
)
target_include_directories(driver-v4l2_test PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${GTEST_INCLUDE_DIRS}
)
target_link_libraries(driver-v4l2_test
driver_test_utils
${GTEST_LIBRARIES}
pthread
)

# Build I2C driver test
add_executable(driver-i2c_test
system/driver-i2c_test.cpp
)
target_include_directories(driver-i2c_test PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${GTEST_INCLUDE_DIRS}
)
target_link_libraries(driver-i2c_test
driver_test_utils
${GTEST_LIBRARIES}
pthread
)

# Enable testing
enable_testing()

# Add tests to CTest
add_test(NAME V4L2DriverTest COMMAND driver-v4l2_test)
add_test(NAME I2CDriverTest COMMAND driver-i2c_test)

# Install targets
install(TARGETS driver-v4l2_test driver-i2c_test
RUNTIME DESTINATION bin
)

# Install test utilities
install(FILES utilities/test_utils.h
DESTINATION include/driver_tests
)

# Install CSV configuration
install(FILES test_csvs/driver_test_list.csv
DESTINATION share/driver_tests
)
131 changes: 131 additions & 0 deletions tests/docker/Dockerfile.local
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
FROM ubuntu:20.04

# ToF-drivers test container for NVIDIA Jetson Orin Nano
# Tests V4L2 and I2C driver functionality for ADSD3500
#
# NOTE: Using Ubuntu 20.04 base for compatibility
# For native NVIDIA L4T image, use: nvcr.io/nvidia/l4t-base:r35.3.1
# Check your JetPack version: cat /etc/nv_tegra_release
#
# Build modes:
# Local dev: docker build --build-arg PREBUILD_TESTS=OFF ...
# CI/CD: docker build --build-arg PREBUILD_TESTS=ON ...

LABEL maintainer="ADI ToF Team"
LABEL description="ToF-drivers system test environment for ADSD3500"

# Build arguments
ARG PREBUILD_TESTS=OFF
ARG BUILD_JOBS=4
ARG GIT_REPO=""
ARG GIT_BRANCH="main"

# Prevent interactive prompts
ENV DEBIAN_FRONTEND=noninteractive

# Set test environment variables
ENV TEST_RESULTS_DIR=/workspace/test-results
ENV TEST_LOGS_DIR=/workspace/test-logs
ENV GTEST_OUTPUT=json:/workspace/test-results/gtest_results.json
ENV GTEST_COLOR=1

# Create workspace
RUN mkdir -p /workspace/test-results /workspace/test-logs
WORKDIR /workspace

# Install system dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
sudo \
build-essential \
cmake \
git \
ca-certificates \
# GoogleTest framework
googletest \
libgtest-dev \
# Linux kernel headers for V4L2/I2C definitions
linux-libc-dev \
# V4L2 utilities for debugging
v4l-utils \
# I2C tools for debugging
i2c-tools \
# Python for test analysis
python3 \
python3-pip \
# Development utilities (useful for both modes)
gdb \
strace \
ltrace \
nano \
vim \
wget \
curl \
htop \
tree \
&& rm -rf /var/lib/apt/lists/*

# Build GoogleTest libraries (if not already built)
RUN if [ ! -f /usr/lib/libgtest.a ]; then \
cd /usr/src/googletest/googletest && \
cmake . && \
make -j${BUILD_JOBS} && \
cp lib/*.a /usr/lib/ && \
echo "GoogleTest libraries built and installed"; \
else \
echo "GoogleTest libraries already available"; \
fi

# Install additional Python tools for analysis
RUN pip3 install --no-cache-dir \
pytest \
pytest-json-report \
pandas \
matplotlib

# Conditional: Get source code
# Mode 1: Git clone from repository (if GIT_REPO specified)
# Mode 2: Copy from build context (if GIT_REPO empty)
# Mode 3: Mount at runtime (local dev, handled by docker run)
RUN if [ -n "${GIT_REPO}" ]; then \
echo "=== Cloning from Git repository ===" && \
echo "Repository: ${GIT_REPO}" && \
echo "Branch: ${GIT_BRANCH}" && \
cd /workspace && \
git clone --depth 1 --branch "${GIT_BRANCH}" "${GIT_REPO}" ToF-drivers && \
echo "=== Clone complete ==="; \
else \
echo "=== Using local source (will be copied or mounted) ==="; \
fi

# Copy source from build context if not cloning from git
# This will be skipped in local dev mode (source mounted at runtime)
COPY ToF-drivers/tests /workspace/ToF-drivers/tests

RUN if [ "$PREBUILD_TESTS" = "ON" ]; then \
echo "=== CI/CD Mode: Pre-building tests ===" && \
cd /workspace/ToF-drivers/tests && \
mkdir -p build && \
cd build && \
cmake .. && \
cmake --build . -j${BUILD_JOBS} && \
echo "=== Tests pre-built successfully ==="; \
else \
echo "=== Local Dev Mode: Tests will be built at runtime ==="; \
fi

# Set working directory
WORKDIR /workspace/ToF-drivers/tests

# Default command depends on build mode
# CI/CD: run pre-built tests
# Local dev: interactive shell
CMD if [ "$PREBUILD_TESTS" = "ON" ]; then \
cd build && ctest --output-on-failure || true; \
else \
/bin/bash; \
fi

# Health check - verify required tools are available
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD which cmake && which g++ || exit 1
Loading
Loading