Running a server with Docker#

It is possible run a Mock VWS instance using Docker containers.

This allows you to run tests against a mock VWS instance regardless of the language or tooling you are using.

Running the mock#

There are three containers required. One container mocks the VWS services, one container mocks the VWQ services and one container provides a shared target manager backend.

Each of these containers run their services on port 5000.

The VWS and VWQ containers must point to the target manager container using the TARGET_MANAGER_BACKEND variable.

Creating containers#

docker network create -d bridge vws-bridge-network
docker run \
    --detach \
    --publish 5005:5000 \
    --name vuforia-target-manager-mock \
    --network vws-bridge-network \
    adamtheturtle/vuforia-target-manager-mock
docker run \
    --detach \
    --publish 5006:5000 \
    -e TARGET_MANAGER_BACKEND=vuforia-target-manager-mock:5000 \
    --network vws-bridge-network \
    adamtheturtle/vuforia-vws-mock
docker run \
    --detach \
    --publish 5007:5000 \
    -e TARGET_MANAGER_BACKEND=vuforia-target-manager-mock:5000 \
    --network vws-bridge-network \
    adamtheturtle/vuforia-vwq-mock

Adding a database to the mock target manager#

When using Vuforia Web Services, it is necessary to create a database on the Target Manager. This is a web interface which does not have an HTTP API.

To mimic this functionality, this mock provides a target manager container which has an HTTP API.

To add a database, make a request to the following endpoint against the target manager container:

POST /databases#

Create a new database.

Request Headers:
Response Headers:
Request JSON Object:
  • client_access_key (string) – (Optional) The client access key for the database.

  • client_secret_key (string) – (Optional) The client secret key for the database.

  • database_name (string) – (Optional) The name of the database.

  • server_access_key (string) – (Optional) The server access key for the database.

  • server_secret_key (string) – (Optional) The server secret key for the database.

  • state_name (string) – (Optional) The state of the database. This can be “WORKING” or “PROJECT_INACTIVE”. This defaults to “WORKING”.

Response JSON Object:
  • client_access_key (string) – The client access key for the database.

  • client_secret_key (string) – The client secret key for the database.

  • database_name (string) – The database name.

  • server_access_key (string) – The server access key for the database.

  • server_secret_key (string) – The server secret key for the database.

  • state_name (string) – The database state. This will be “WORKING” or “PROJECT_INACTIVE”.

Request JSON Array of Objects:
  • targets – The targets in the database.

Status Codes:
  • 201 Created – The database has been successfully created.

For example, with the containers set up as in Creating containers, use curl:

curl --request POST \
  --header "Content-Type: application/json" \
  --data '{}' \
  '127.0.0.1:5005/databases'
{
    "client_access_key": "2d61c1d17bb94694bee77c1f1f41e5d9",
    "client_secret_key": "b73f8170cf7d42728fa8ce66221ad147",
    "database_name": "e515df24ba944f43b8f7969bc98af107",
    "server_access_key": "cb1759871a504875ab5f96d6db5ff79b",
    "server_secret_key": "9b8533d912ad4aa79cb61b6ee197ece2",
    "state_name": "WORKING",
    "targets": []
}

Deleting a database#

To delete a database use the following endpoint:

DELETE /databases/(string: database_name)#

Delete a database.

Status Codes:
  • 200 OK – The database has been deleted.

Configuration options#

Required configuration#

TARGET_MANAGER_BACKEND#

This is required by the VWS mock and the VWQ mock containers. This is the route to the target manager container from the other containers.

Optional configuration#

Target manager container#

TARGET_RATER#

The rater to use for target tracking ratings.

Options include:

  • brisque: The rating is derived using the BRISQUE algorithm.

  • perfect: The rating is always 5.

  • random: The rating is random.

Default: brisque

Query container#

QUERY_IMAGE_MATCHER#

The matcher to use for the query endpoint.

Options include:

  • exact: The images must be exactly the same to match.

  • structural_similarity: The images must have a similar structural similarity to match.

Default: structural_similarity

VWS container#

PROCESSING_TIME_SECONDS#

The number of seconds to process each image for.

Default: 2

DUPLICATES_IMAGE_MATCHER#

The matcher to use for the duplicates endpoint.

Options include:

  • exact: The images must be exactly the same to be duplicates.

  • structural_similarity: The images must have a similar structural similarity to be duplicates.

Default: structural_similarity

Building images from source#

export REPOSITORY_ROOT=$PWD
export DOCKERFILE=$REPOSITORY_ROOT/src/mock_vws/_flask_server/Dockerfile

export TARGET_MANAGER_TAG=adamtheturtle/vuforia-target-manager-mock:latest
export VWS_TAG=adamtheturtle/vuforia-vws-mock:latest
export VWQ_TAG=adamtheturtle/vuforia-vwq-mock:latest

docker buildx build $REPOSITORY_ROOT --file $DOCKERFILE --target target-manager --tag $TARGET_MANAGER_TAG
docker buildx build $REPOSITORY_ROOT --file $DOCKERFILE --target vws --tag $VWS_TAG
docker buildx build $REPOSITORY_ROOT --file $DOCKERFILE --target vwq --tag $VWQ_TAG