Skip to main content
Version: 028-rc11

xconnect Service Mesh Test Plan

Tests for pv-xconnect container-to-container communication via the appengine environment.

For pv-ctrl API tests (daemons, graph, metadata, objects, etc.), see testplan-pvctrl.md.


Prerequisites

Build Appengine Image

./kas-container build .github/configs/release/docker-x86_64-scarthgap.yaml:kas/with-workspace.yaml

docker load < build/tmp-scarthgap/deploy/images/docker-x86_64/pantavisor-appengine-docker.tar

Common Setup

docker rm -f pva-test 2>/dev/null
docker volume rm storage-test 2>/dev/null
mkdir -p pvtx.d

Common Teardown

docker rm -f pva-test
docker volume rm storage-test

Test 1: Unix Socket Service Mesh

Purpose: Verify pv-xconnect injects Unix sockets between provider and consumer containers.

Setup

./kas-container build .github/configs/release/docker-x86_64-scarthgap.yaml \
--target pv-example-unix-server \
--target pv-example-unix-client

rm -f pvtx.d/*.pvrexport.tgz
cp build/tmp-scarthgap/deploy/images/docker-x86_64/pv-example-unix-server.pvrexport.tgz pvtx.d/
cp build/tmp-scarthgap/deploy/images/docker-x86_64/pv-example-unix-client.pvrexport.tgz pvtx.d/

Execute

docker rm -f pva-test 2>/dev/null; docker volume rm storage-test 2>/dev/null
docker run --name pva-test -d --privileged \
-v $(pwd)/pvtx.d:/usr/lib/pantavisor/pvtx.d \
-v storage-test:/var/pantavisor/storage \
--entrypoint /bin/sh pantavisor-appengine:latest -c "sleep infinity"

docker exec pva-test sh -c 'pv-appengine &'
sleep 15

Verify

# Check both containers running
docker exec pva-test lxc-ls -f
# Expected: pv-example-unix-server RUNNING, pv-example-unix-client RUNNING

# Check xconnect graph
docker exec pva-test pvcontrol graph ls
# Expected: JSON with type=unix, consumer=pv-example-unix-client

# Check socket injected into consumer
CLIENT_PID=$(docker exec pva-test lxc-info -n pv-example-unix-client -p | awk '{print $2}')
docker exec pva-test ls -la /proc/$CLIENT_PID/root/run/pv/services/
# Expected: raw-unix.sock socket file

Expected Results

CheckExpected
Server statusRUNNING
Client statusRUNNING
xconnect graphShows unix link between server and client
Injected socket/run/pv/services/raw-unix.sock exists in client

Test 2: D-Bus Service Mesh

Purpose: Verify pv-xconnect D-Bus proxy with role-to-UID mapping.

Setup

./kas-container build .github/configs/release/docker-x86_64-scarthgap.yaml \
--target pv-example-dbus-server \
--target pv-example-dbus-client

rm -f pvtx.d/*.pvrexport.tgz
cp build/tmp-scarthgap/deploy/images/docker-x86_64/pv-example-dbus-server.pvrexport.tgz pvtx.d/
cp build/tmp-scarthgap/deploy/images/docker-x86_64/pv-example-dbus-client.pvrexport.tgz pvtx.d/

Execute

docker rm -f pva-test 2>/dev/null; docker volume rm storage-test 2>/dev/null
docker run --name pva-test -d --privileged \
-v $(pwd)/pvtx.d:/usr/lib/pantavisor/pvtx.d \
-v storage-test:/var/pantavisor/storage \
--entrypoint /bin/sh pantavisor-appengine:latest -c "sleep infinity"

docker exec pva-test sh -c 'pv-appengine &'
sleep 15

Verify

# Check containers running
docker exec pva-test lxc-ls -f
# Expected: pv-example-dbus-server RUNNING, pv-example-dbus-client RUNNING

# Check xconnect graph
docker exec pva-test pvcontrol graph ls
# Expected: JSON with type=dbus link

# Check client logs for successful D-Bus call
docker exec pva-test cat /var/pantavisor/storage/logs/0/pv-example-dbus-client/lxc/console.log | tail -20
# Expected: method return with org.pantavisor.Example response

Expected Results

CheckExpected
Server statusRUNNING
Client statusRUNNING
xconnect graphShows dbus link between server and client
D-Bus callSuccessful method return in client logs

Test 3: DRM Device Injection

Purpose: Verify pv-xconnect injects DRM device nodes into consumer containers.

Note: Requires VKMS kernel module or real GPU hardware.

Setup

# Load VKMS on host (if no real GPU)
sudo modprobe vkms

./kas-container build .github/configs/release/docker-x86_64-scarthgap.yaml \
--target pv-example-drm-provider \
--target pv-example-drm-master

rm -f pvtx.d/*.pvrexport.tgz
cp build/tmp-scarthgap/deploy/images/docker-x86_64/pv-example-drm-provider.pvrexport.tgz pvtx.d/
cp build/tmp-scarthgap/deploy/images/docker-x86_64/pv-example-drm-master.pvrexport.tgz pvtx.d/

Execute

docker rm -f pva-test 2>/dev/null; docker volume rm storage-test 2>/dev/null
docker run --name pva-test -d --privileged \
--device /dev/dri:/dev/dri \
-v $(pwd)/pvtx.d:/usr/lib/pantavisor/pvtx.d \
-v storage-test:/var/pantavisor/storage \
--entrypoint /bin/sh pantavisor-appengine:latest -c "sleep infinity"

docker exec pva-test sh -c 'pv-appengine &'
sleep 15

Verify

# Check containers running
docker exec pva-test lxc-ls -f
# Expected: pv-example-drm-provider RUNNING, pv-example-drm-master RUNNING

# Check DRM device in consumer
MASTER_PID=$(docker exec pva-test lxc-info -n pv-example-drm-master -p | awk '{print $2}')
docker exec pva-test ls -la /proc/$MASTER_PID/root/dev/dri/
# Expected: card0 device node

Expected Results

CheckExpected
Provider statusRUNNING
Master statusRUNNING
DRM device/dev/dri/card0 exists in master container

Troubleshooting

SymptomCauseFix
pvtx.d not processedStorage volume reusedDelete volume: docker volume rm storage-test
Container not startingCheck pantavisor.logdocker exec pva-test cat /var/pantavisor/storage/logs/0/pantavisor/pantavisor.log
xconnect-graph emptypv-xconnect not runningdocker exec pva-test pvcontrol daemons ls
Socket not injectedProvider not readyWait longer, check provider status