Skip to content

Developer Guide

Chaunte W. Lacewell edited this page May 6, 2024 · 3 revisions

Contributions are more than welcome, and greatly appreciated.

We expect any contributions to be done through Pull-Requests. We also appreciated comments and issues through the Issues tracker.

General Code Conventions

  • No trailing whitespace; no trailing empty lines
  • No TABs
  • Indent set at four spaces

C++ Specific

  • “private:” and “public:” tags aligned with “class” keyword
  • Class name start with a capital letter
  • Filename all lowercase and using dash as word separator
  • Header file use “#pragma once”
  • Private members start with an underscore (“_”) prefix
  • Keep your lines to about 80 characters or less in length
  • No copy-and-paste from an open source projects. Clean code is an important requirement. If inserting code taken from other source, specify licenses together with the pull request, and we will evaluate if there is not conflicts.
  • When there is something not covered in these instructions, we follow this guide

Workflow Conventions

We follow this workflow model.

  • Develop/debug on a branch, started at "develop" (e.g., git checkout develop; git checkout –b ).

  • Prefer smaller, independent commits (make them ideally suited for “cherry-picking”)

    • First line of commit message descriptive of the commit; end with a period (‘.’)
    • One empty line, if more detailed explanations are needed
    • More detailed explanations in as many additional lines as needed
    • Use present tense and active voice (“Fix bug #8848” and not “Bug #8848 fixed” or “Fixed bug #8848”)
    • Keep your lines in the commit message to about 80 characters or less in length
  • When ready, create a pull request against the "develop" branch.

Tests

After you are ready for commit, run the tests from the tests folder. Make sure all the tests passes, if not, please fix the code, or the failing tests, or contact the person who wrote the test for help. Make sure that when running the tests, nothing else is printed on the screen other than test information.

Local Storage Tests

There are scripts to run the C++, Neo4j, and Python tests for local storage.

C++ Tests

Run sh run_tests.sh from the tests directory for the C++ tests. There are two special flags that you may use when calling sh run_tests.sh:

Flag Description
-n This flag let you specify a pattern of the test names to be tested.
For example:
  • sh run_tests.sh -n "BLOB.find_Blob" The script runs the test called "BLOB.find_Blob" only
  • sh run_tests.sh -n "ImageTest.*" The script runs all the tests which Test suite is called "ImageTest"
  • sh run_tests.sh -n "*" The script runs everything, due to the single match-everything * value.
  • sh run_tests.sh -n "*Null*:*Constructor*" The script runs any test whose full name contains either "Null" or "Constructor" .
  • sh run_tests.sh -n "-*DeathTest.*" The script runs all non-death tests.
  • sh run_tests.sh -n "FooTest.*-FooTest.Bar" The script runs everything in test suite FooTest except FooTest.Bar.
  • sh run_tests.sh -n "FooTest.*:BarTest.*-FooTest.Bar:BarTest.Foo" The script runs everything in test suite FooTest except FooTest.Bar and everything in test suite BarTest except BarTest.Foo.
-s This flag let the script stop and skip the execution of the remaining tests in case any of the tests fails.
For example:
  • sh run_tests.sh -s

    You should see on screen something like:

    Running C++ tests...
    [==========] Running 214 tests from 18 test suites.
    [----------] Global test environment set-up.
    [----------] 1 test from AutoReplicate
    [ RUN      ] AutoReplicate.default_replicate
    [       OK ] AutoReplicate.default_replicate (1414 ms)
    [----------] 1 test from AutoReplicate (1414 ms total)
    
    [----------] 1 test from ExampleHandler
    [ RUN      ] ExampleHandler.simplePing
    [       OK ] ExampleHandler.simplePing (86 ms)
    [----------] 1 test from ExampleHandler (86 ms total)
    
    [----------] 2 tests from AddImage
    [ RUN      ] AddImage.simpleAdd
    [       OK ] AddImage.simpleAdd (419 ms)
    [ RUN      ] AddImage.simpleAddx10
    [       OK ] AddImage.simpleAddx10 (570 ms)
    [----------] 2 tests from AddImage (990 ms total)
    
    [----------] 1 test from UpdateEntity
    [ RUN      ] UpdateEntity.simpleAddUpdate
    [       OK ] UpdateEntity.simpleAddUpdate (448 ms)
    [----------] 1 test from UpdateEntity (448 ms total)
    
    ...
    
    [----------] 10 tests from CLIENT_CPP_CSV
    [ RUN      ] CLIENT_CPP_CSV.parse_csv_entity
    [       OK ] CLIENT_CPP_CSV.parse_csv_entity (240 ms)
    [ RUN      ] CLIENT_CPP_CSV.parse_csv_connection
    [       OK ] CLIENT_CPP_CSV.parse_csv_connection (12 ms)
    [ RUN      ] CLIENT_CPP_CSV.parse_csv_images
    [       OK ] CLIENT_CPP_CSV.parse_csv_images (1662 ms)
    [ RUN      ] CLIENT_CPP_CSV.parse_csv_descriptor_set
    [       OK ] CLIENT_CPP_CSV.parse_csv_descriptor_set (27967 ms)
    [ RUN      ] CLIENT_CPP_CSV.parse_csv_descriptor
    [       OK ] CLIENT_CPP_CSV.parse_csv_descriptor (10 ms)
    [ RUN      ] CLIENT_CPP_CSV.parse_csv_bb
    [       OK ] CLIENT_CPP_CSV.parse_csv_bb (81 ms)
    [ RUN      ] CLIENT_CPP_CSV.parse_csv_video
    [       OK ] CLIENT_CPP_CSV.parse_csv_video (1495 ms)
    [ RUN      ] CLIENT_CPP_CSV.parse_csv_invalid_entity
    [       OK ] CLIENT_CPP_CSV.parse_csv_invalid_entity (1 ms)
    [ RUN      ] CLIENT_CPP_CSV.parse_csv_invalid_image
    Error: Failed to open file.
    [       OK ] CLIENT_CPP_CSV.parse_csv_invalid_image (3 ms)
    [ RUN      ] CLIENT_CPP_CSV.parse_csv_invalid_video
    Failed to open file: ../tests/test_videos/Megamind_invalid.avi
    [       OK ] CLIENT_CPP_CSV.parse_csv_invalid_video (2 ms)
    [----------] 10 tests from CLIENT_CPP_CSV (31476 ms total)
    
    [----------] 1 test from CLIENT_CPP_Video
    [ RUN      ] CLIENT_CPP_Video.add_single_video
    [       OK ] CLIENT_CPP_Video.add_single_video (1061 ms)
    [----------] 1 test from CLIENT_CPP_Video (1061 ms total)
    
    [----------] 3 tests from BLOB
    [ RUN      ] BLOB.add_Blob
    [       OK ] BLOB.add_Blob (40 ms)
    [ RUN      ] BLOB.update_Blob
    [       OK ] BLOB.update_Blob (8 ms)
    [ RUN      ] BLOB.find_Blob
    [       OK ] BLOB.find_Blob (3 ms)
    [----------] 3 tests from BLOB (52 ms total)
    
    [----------] Global test environment tear-down
    [==========] 214 tests from 18 test suites ran. (896859 ms total)
    [  PASSED  ] 214 tests.
    

    C++ Neo4j Tests

    Run sh run_neo4j_tests.sh from the tests directory for the C++ Neo4j tests. There are a few flags available to run sh run_neo4j_tests.sh:

    Flag Description
    -h or --help Print this help message
    -a or --minio_api_port API Port for S3/Minio server. Default is 9000
    -c or --minio_console_port Console Port for S3/Minio server. Default is 9001
    -p or --minio_pswd Password for S3/Minio server
    -u or --minio_user Username for S3/Minio server
    -e or --neo4j_endpoint Neo4j endpoint
    -v or --neo4j_port Port for Neo4j container. Default is 7687
    -w or --neo4j_pswd Password for Neo4j container
    -n or --neo4j_user Username for Neo4j container
    -t or --test_name Name of test to run [OpsIOCoordinatorTest, or Neo4JE2ETest]

    You should see results similar to:

    Starting OpsIOCoordinatorTest...
    Note: Google Test filter = OpsIOCoordinatorTest.*
    [==========] Running 4 tests from 1 test suite.
    [----------] Global test environment set-up.
    [----------] 4 tests from OpsIOCoordinatorTest
    [ RUN      ] OpsIOCoordinatorTest.PutObjTest
    Warning: Using default endpoint_override
    Instantiating global S3 Connection...
    Global S3 Connection Started!
    Added object 'test_obj' to bucket: minio-bucket
    [       OK ] OpsIOCoordinatorTest.PutObjTest (6352 ms)
    [ RUN      ] OpsIOCoordinatorTest.GetObjTest
    Instantiating global S3 Connection...
    Global S3 Connection Started!
    Successfully retrieved 'test_obj' from 'minio-bucket'.
    [       OK ] OpsIOCoordinatorTest.GetObjTest (6138 ms)
    [ RUN      ] OpsIOCoordinatorTest.GetConnTest
    Instantiating global S3 Connection...
    Global S3 Connection Started!
    [       OK ] OpsIOCoordinatorTest.GetConnTest (6040 ms)
    [ RUN      ] OpsIOCoordinatorTest.DoOpsTest
    Instantiating global S3 Connection...
    Global S3 Connection Started!
    14617
    [       OK ] OpsIOCoordinatorTest.DoOpsTest (6103 ms)
    [----------] 4 tests from OpsIOCoordinatorTest (24636 ms total)
    
    [----------] Global test environment tear-down
    [==========] 4 tests from 1 test suite ran. (24636 ms total)
    [  PASSED  ] 4 tests.
    
    Starting Neo4JE2ETest...
    Note: Google Test filter = Neo4JE2ETest.*
    [==========] Running 2 tests from 1 test suite.
    [----------] Global test environment set-up.
    [----------] 2 tests from Neo4JE2ETest
    [ RUN      ] Neo4JE2ETest.E2E_Neo4j_Add_Find_Img
    Warning: Using default endpoint_override
    [       OK ] Neo4JE2ETest.E2E_Neo4j_Add_Find_Img (1677 ms)
    [ RUN      ] Neo4JE2ETest.E2E_Neo4j_Add_Find_Metadata
    Warning: Using default endpoint_override
    [       OK ] Neo4JE2ETest.E2E_Neo4j_Add_Find_Metadata (210 ms)
    [----------] 2 tests from Neo4JE2ETest (1887 ms total)
    
    [----------] Global test environment tear-down
    [==========] 2 tests from 1 test suite ran. (1888 ms total)
    [  PASSED  ] 2 tests.
    

    Python Tests

    Run sh run_python_tests.sh from the tests/python directory for the Python tests. There is one special flag that you may use when calling sh run_python_tests.sh:

    Flag Description
    -n This flag let you specify a pattern of the test names to be tested. It can be modules, classes or even individual test methods.
    For example:
    • sh run_python_tests.sh -n "TestVideos.TestVideos.test_updateVideo" The script runs the test called "TestVideos.TestVideos.test_updateVideo" only.
    • sh run_python_tests.sh -n "test_module1 test_module2" The script runs all the tests which belong to "test_module1" and "test_module2" modules.
    • sh run_python_tests.sh -n "test_module.TestClass" The script runs all the tests which belong to "test_module.TestClass" class.
    • sh run_python_tests.sh -n "test_module.TestClass.test_method" The script runs the test called "test_module.TestClass.test_method" only.
    • sh run_python_tests.sh -n "TestBoundingBox.py" The script runs all the tests found in the file called "TestBoundingBox.py".

    You should see on screen is something like:

    Running Python tests...
    test_addBoundingBox (TestBoundingBox.TestBoundingBox) ... ok
    test_addBoundingBoxWithImage (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBox (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBoxBlob (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBoxBlobComplex (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBoxByCoordinates (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBoxCoordinates (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBoxesInImage (TestBoundingBox.TestBoundingBox) ... ok
    test_updateBoundingBox (TestBoundingBox.TestBoundingBox) ... ok
    test_updateBoundingBoxCoords (TestBoundingBox.TestBoundingBox) ... ok
    test_FindEntity_link_constraints_float (TestConnections.TestConnections) ... ok
    test_FindEntity_link_constraints_string (TestConnections.TestConnections) ... ok
    test_addDescriptorsx1000 (TestDescriptors.TestDescriptors) ... ok
    test_addSet (TestDescriptors.TestDescriptors) ... ok
    test_addSetAndDescriptors (TestDescriptors.TestDescriptors) ... ok
    test_addSetAndDescriptorsDimMismatch (TestDescriptors.TestDescriptors) ... ok
    test_classifyDescriptor (TestDescriptors.TestDescriptors) ... ok
    test_addDescriptorsx1000FaissIVFFlat (TestEngineDescriptors.TestDescriptors) ... ok
    test_addDescriptorsx1000TileDBDense (TestEngineDescriptors.TestDescriptors) ... ok
    test_addDescriptorsx1000TileDBSparse (TestEngineDescriptors.TestDescriptors) ... ok
    test_addDifferentSets (TestEngineDescriptors.TestDescriptors) ... ok
    test_FindWithSortBlock (TestEntities.TestEntities) ... ok
    test_FindWithSortKey (TestEntities.TestEntities) ... ok
    test_addEntityWithLink (TestEntities.TestEntities) ... ok
    test_addFindEntity (TestEntities.TestEntities) ... ok
    test_addfindEntityWrongConstraints (TestEntities.TestEntities) ... ok
    test_runMultipleAdds (TestEntities.TestEntities) ... ok
    test_addEntityWithBlob (TestEntitiesBlobs.TestEntitiesBlob) ... ok
    test_addEntityWithBlobAndFind (TestEntitiesBlobs.TestEntitiesBlob) ... ok
    test_addEntityWithBlobNoBlob (TestEntitiesBlobs.TestEntitiesBlob) ... ok
    test_findDescByBlob (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByBlobAndConstraints (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByBlobNoLabels (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByBlobNoResults (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByBlobUnusedRef (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByBlobWithLink (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByConst_blobTrue (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByConst_get_id (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByConst_multiple_blobTrue (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByConstraints (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescUnusedRef (TestFindDescriptors.TestFindDescriptors) ... ok
    test_addImage (TestImages.TestImages) ... ok
    test_addImageWithLink (TestImages.TestImages) ... ok
    test_findEntityImage (TestImages.TestImages) ... ok
    test_findImage (TestImages.TestImages) ... ok
    test_findImageNoBlob (TestImages.TestImages) ... ok
    test_findImageRefNoBlobNoPropsResults (TestImages.TestImages) ... ok
    test_findImageResults (TestImages.TestImages) ... ok
    test_findImage_multiple_results (TestImages.TestImages) ... ok
    test_updateImage (TestImages.TestImages) ... ok
    test_concurrent (TestRetail.TestEntities) ... skipped 'Skipping class until fixed'
    test_create_connection (TestTestCommand.TestTestCommand) ... ok
    test_disconnect (TestTestCommand.TestTestCommand) ... ok
    test_vdms_existing_connection (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_get_last_response (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_get_last_response_str (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_non_existing_connection (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_non_json_query (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_print_last_response (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_query_disconnected (TestVDMSClient.TestVDMSClient) ... ok
    test_FindFramesByFrames (TestVideos.TestVideos) ... ok
    test_FindFramesByInterval (TestVideos.TestVideos) ... ok
    test_FindFramesInvalidParameters (TestVideos.TestVideos) ... ok
    test_FindFramesMissingParameters (TestVideos.TestVideos) ... ok
    test_addVideo (TestVideos.TestVideos) ... ok
    test_addVideoFromLocalFile_file_not_found (TestVideos.TestVideos) ... ok
    test_addVideoFromLocalFile_invalid_command (TestVideos.TestVideos) ... ok
    test_addVideoFromLocalFile_success (TestVideos.TestVideos) ... skipped 'Skipping class until fixed'
    test_addVideoWithLink (TestVideos.TestVideos) ... ok
    test_extractKeyFrames (TestVideos.TestVideos) ... ok
    test_findVid_multiple_results (TestVideos.TestVideos) ... ok
    test_findVideo (TestVideos.TestVideos) ... ok
    test_findVideoNoBlob (TestVideos.TestVideos) ... ok
    test_findVideoResults (TestVideos.TestVideos) ... ok
    test_updateVideo (TestVideos.TestVideos) ... ok
    
    ----------------------------------------------------------------------
    Ran 75 tests in 58.802s
    

    S3 Storage Tests

    There are also scripts to run the C++ and Python tests for S3 storage. For testing the S3 storage, we use MinIO and MinIO Client. Prior to running this test, when using MinIO, it is necessary to install the MinIO components. Assuming the codebase is located in /vdms, run the following:

    curl -L -o /vdms/minio https://dl.min.io/server/minio/release/linux-amd64/minio
    chmod +x /vdms/minio
    mkdir -p /vdms/minio_files/minio-bucket
    
    
    # Install the MinIO Client mc command line tool used by scripts for creating buckets
    curl -o /usr/local/bin/mc https://dl.min.io/client/mc/release/linux-amd64/mc
    chmod +x /usr/local/bin/mc

    To properly run the testing scripts, we require the username for your S3/MinIO storage. It is okay to use the default username (AWS_ACCESS_KEY_ID) and password (AWS_SECRET_ACCESS_KEY) for MinIO but we need these values for the test.

    C++ Tests

    Run sh run_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} from the tests directory for the C++ tests. There are a few special flags that you may use when calling sh run_aws_tests.sh:

    Flag Description
    -a This flag specifies the api port for your S3/MinIO storage. The default is 9000
    -n This flag let you specify a pattern of the test names to be tested.
    For example:
    • sh run_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "RemoteConnectionTest.RemoteDisconnectedReadVideoFilename" The script runs the test called "RemoteConnectionTest.RemoteDisconnectedReadVideoFilename" only
    • sh run_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "RemoteConnectionTest.*" The script runs all the tests which Test suite is called "RemoteConnectionTest"
    • sh run_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "*" The script runs everything, due to the single match-everything * value.
    • sh run_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "*Null*:*Constructor*" The script runs any test whose full name contains either "Null" or "Constructor" .
    • sh run_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "-*DeathTest.*" The script runs all non-death tests.
    • sh run_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "FooTest.*-FooTest.Bar" The script runs everything in test suite FooTest except FooTest.Bar.
    • sh run_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "FooTest.*:BarTest.*-FooTest.Bar:BarTest.Foo" The script runs everything in test suite FooTest except FooTest.Bar and everything in test suite BarTest except BarTest.Foo.
    -p This flag specifies the password for your S3/MinIO storage
    -s This flag let the script stop and skip the execution of the remaining tests in case any of the tests fails.
    For example:
    • sh run_aws_tests.sh -s
    -u This flag specifies the username for your S3/MinIO storage

    You should see on screen is something like:

    Running C++ tests...
    Note: Google Test filter = RemoteConnectionTest.*
    [==========] Running 19 tests from 1 test suite.
    [----------] Global test environment set-up.
    [----------] 19 tests from RemoteConnectionTest
    [ RUN      ] RemoteConnectionTest.RemoteWriteFilename
    Added object 'test_images/large1.jpg' to bucket: minio-bucket
    [       OK ] RemoteConnectionTest.RemoteWriteFilename (6263 ms)
    [ RUN      ] RemoteConnectionTest.RemoteReadWriteBuffer
    Successfully retrieved 'test_images/large1.jpg' from 'minio-bucket'.
    Added object 'test_images/large1.jpg' to bucket: minio-bucket
    [       OK ] RemoteConnectionTest.RemoteReadWriteBuffer (6141 ms)
    [ RUN      ] RemoteConnectionTest.RemoteListRetrieveFile
    Successfully retrieved 'test_images/large1.jpg' from 'minio-bucket'.
    [       OK ] RemoteConnectionTest.RemoteListRetrieveFile (6061 ms)
    [ RUN      ] RemoteConnectionTest.RemoteWriteVideoFilename
    Added object 'test_videos/Megamind.avi' to bucket: minio-bucket
    [       OK ] RemoteConnectionTest.RemoteWriteVideoFilename (6172 ms)
    [ RUN      ] RemoteConnectionTest.RemoteReadVideoFilename
    Successfully retrieved 'test_videos/Megamind.avi' from 'minio-bucket'.
    [       OK ] RemoteConnectionTest.RemoteReadVideoFilename (6071 ms)
    [ RUN      ] RemoteConnectionTest.ImageRemoteWritePNG
    Added object 'pngs/test_image.png' to bucket: minio-bucket
    [       OK ] RemoteConnectionTest.ImageRemoteWritePNG (6228 ms)
    [ RUN      ] RemoteConnectionTest.ImageRemoteReadPNG
    Successfully retrieved 'pngs/test_image.png' from 'minio-bucket'.
    [       OK ] RemoteConnectionTest.ImageRemoteReadPNG (6213 ms)
    [ RUN      ] RemoteConnectionTest.ImageRemoteRemovePNG
    [       OK ] RemoteConnectionTest.ImageRemoteRemovePNG (6050 ms)
    [ RUN      ] RemoteConnectionTest.ImageRemoteWriteJPG
    Added object 'jpgs/large1.jpg' to bucket: minio-bucket
    [       OK ] RemoteConnectionTest.ImageRemoteWriteJPG (6124 ms)
    [ RUN      ] RemoteConnectionTest.ImageRemoteReadJPG
    Successfully retrieved 'jpgs/large1.jpg' from 'minio-bucket'.
    [       OK ] RemoteConnectionTest.ImageRemoteReadJPG (6186 ms)
    [ RUN      ] RemoteConnectionTest.ImageRemoteRemoveJPG
    [       OK ] RemoteConnectionTest.ImageRemoteRemoveJPG (6052 ms)
    [ RUN      ] RemoteConnectionTest.TDBImageWriteS3
    [       OK ] RemoteConnectionTest.TDBImageWriteS3 (6219 ms)
    [ RUN      ] RemoteConnectionTest.RemoteDisconnectedWriteFilename
    WRITE: The RemoteConnection has not been started
    [       OK ] RemoteConnectionTest.RemoteDisconnectedWriteFilename (6056 ms)
    [ RUN      ] RemoteConnectionTest.RemoteDisconnectedReadBuffer
    READ: The RemoteConnection has not been started
    Added object 'test_images/large1.jpg' to bucket: minio-bucket
    [       OK ] RemoteConnectionTest.RemoteDisconnectedReadBuffer (6064 ms)
    [ RUN      ] RemoteConnectionTest.RemoteDisconnectedWriteBuffer
    WRITE: The RemoteConnection has not been started
    Successfully retrieved 'test_images/large1.jpg' from 'minio-bucket'.
    [       OK ] RemoteConnectionTest.RemoteDisconnectedWriteBuffer (6059 ms)
    [ RUN      ] RemoteConnectionTest.RemoteDisconnectedListFiles
    WRITE: The RemoteConnection has not been started
    [       OK ] RemoteConnectionTest.RemoteDisconnectedListFiles (6055 ms)
    [ RUN      ] RemoteConnectionTest.RemoteDisconnectedRetrieveFile
    WRITE: The RemoteConnection has not been started
    [       OK ] RemoteConnectionTest.RemoteDisconnectedRetrieveFile (6058 ms)
    [ RUN      ] RemoteConnectionTest.RemoteDisconnectedWriteVideoFilename
    WRITE: The RemoteConnection has not been started
    [       OK ] RemoteConnectionTest.RemoteDisconnectedWriteVideoFilename (6057 ms)
    [ RUN      ] RemoteConnectionTest.RemoteDisconnectedReadVideoFilename
    READ_Video: The RemoteConnection has not been started
    [       OK ] RemoteConnectionTest.RemoteDisconnectedReadVideoFilename (6054 ms)
    [----------] 19 tests from RemoteConnectionTest (116191 ms total)
    
    [----------] Global test environment tear-down
    [==========] 19 tests from 1 test suite ran. (116192 ms total)
    [  PASSED  ] 19 tests.
    

    Python Tests

    Run sh run_python_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} from the tests/python directory for the Python tests. There is a few special flag that you may use when calling sh run_python_aws_tests.sh:

    Flag Description
    -a This flag specifies the api port for your S3/MinIO storage. The default is 9000
    -n This flag let you specify a pattern of the test names to be tested. It can be modules, classes or even individual test methods.
    For example:
    • sh run_python_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "TestVideos.TestVideos.test_updateVideo" The script runs the test called "TestVideos.TestVideos.test_updateVideo" only.
    • sh run_python_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "test_module1 test_module2" The script runs all the tests which belong to "test_module1" and "test_module2" modules.
    • sh run_python_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "test_module.TestClass" The script runs all the tests which belong to "test_module.TestClass" class.
    • sh run_python_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "test_module.TestClass.test_method" The script runs the test called "test_module.TestClass.test_method" only.
    • sh run_python_aws_tests.sh -u ${AWS_ACCESS_KEY_ID} -p ${AWS_SECRET_ACCESS_KEY} -n "TestBoundingBox.py" The script runs all the tests found in the file called "TestBoundingBox.py".
    -p This flag specifies the password for your S3/MinIO storage
    -u This flag specifies the username for your S3/MinIO storage

    You should see on screen is something like:

    Running Python AWS S3 tests...
    test_addBoundingBox (TestBoundingBox.TestBoundingBox) ... ok
    test_addBoundingBoxWithImage (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBox (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBoxBlob (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBoxBlobComplex (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBoxByCoordinates (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBoxCoordinates (TestBoundingBox.TestBoundingBox) ... ok
    test_findBoundingBoxesInImage (TestBoundingBox.TestBoundingBox) ... ok
    test_updateBoundingBox (TestBoundingBox.TestBoundingBox) ... ok
    test_updateBoundingBoxCoords (TestBoundingBox.TestBoundingBox) ... ok
    test_FindEntity_link_constraints_float (TestConnections.TestConnections) ... ok
    test_FindEntity_link_constraints_string (TestConnections.TestConnections) ... ok
    test_addDescriptorsx1000 (TestDescriptors.TestDescriptors) ... ok
    test_addSet (TestDescriptors.TestDescriptors) ... ok
    test_addSetAndDescriptors (TestDescriptors.TestDescriptors) ... ok
    test_addSetAndDescriptorsDimMismatch (TestDescriptors.TestDescriptors) ... ok
    test_classifyDescriptor (TestDescriptors.TestDescriptors) ... ok
    test_addDescriptorsx1000FaissIVFFlat (TestEngineDescriptors.TestDescriptors) ... ok
    test_addDescriptorsx1000TileDBDense (TestEngineDescriptors.TestDescriptors) ... ok
    test_addDescriptorsx1000TileDBSparse (TestEngineDescriptors.TestDescriptors) ... ok
    test_addDifferentSets (TestEngineDescriptors.TestDescriptors) ... ok
    test_FindWithSortBlock (TestEntities.TestEntities) ... ok
    test_FindWithSortKey (TestEntities.TestEntities) ... ok
    test_addEntityWithLink (TestEntities.TestEntities) ... ok
    test_addFindEntity (TestEntities.TestEntities) ... ok
    test_addfindEntityWrongConstraints (TestEntities.TestEntities) ... ok
    test_runMultipleAdds (TestEntities.TestEntities) ... ok
    test_addEntityWithBlob (TestEntitiesBlobs.TestEntitiesBlob) ... ok
    test_addEntityWithBlobAndFind (TestEntitiesBlobs.TestEntitiesBlob) ... ok
    test_addEntityWithBlobNoBlob (TestEntitiesBlobs.TestEntitiesBlob) ... ok
    test_findDescByBlob (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByBlobAndConstraints (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByBlobNoLabels (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByBlobNoResults (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByBlobUnusedRef (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByBlobWithLink (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByConst_blobTrue (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByConst_get_id (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByConst_multiple_blobTrue (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescByConstraints (TestFindDescriptors.TestFindDescriptors) ... ok
    test_findDescUnusedRef (TestFindDescriptors.TestFindDescriptors) ... ok
    test_addImage (TestImages.TestImages) ... ok
    test_addImageWithLink (TestImages.TestImages) ... ok
    test_findEntityImage (TestImages.TestImages) ... ok
    test_findImage (TestImages.TestImages) ... ok
    test_findImageNoBlob (TestImages.TestImages) ... ok
    test_findImageRefNoBlobNoPropsResults (TestImages.TestImages) ... ok
    test_findImageResults (TestImages.TestImages) ... ok
    test_findImage_multiple_results (TestImages.TestImages) ... ok
    test_updateImage (TestImages.TestImages) ... ok
    test_concurrent (TestRetail.TestEntities) ... skipped 'Skipping class until fixed'
    test_create_connection (TestTestCommand.TestTestCommand) ... ok
    test_disconnect (TestTestCommand.TestTestCommand) ... ok
    test_vdms_existing_connection (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_get_last_response (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_get_last_response_str (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_non_existing_connection (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_non_json_query (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_print_last_response (TestVDMSClient.TestVDMSClient) ... ok
    test_vdms_query_disconnected (TestVDMSClient.TestVDMSClient) ... ok
    test_FindFramesByFrames (TestVideos.TestVideos) ... ok
    test_FindFramesByInterval (TestVideos.TestVideos) ... ok
    test_FindFramesInvalidParameters (TestVideos.TestVideos) ... ok
    test_FindFramesMissingParameters (TestVideos.TestVideos) ... ok
    test_addVideo (TestVideos.TestVideos) ... ok
    test_addVideoFromLocalFile_file_not_found (TestVideos.TestVideos) ... ok
    test_addVideoFromLocalFile_invalid_command (TestVideos.TestVideos) ... ok
    test_addVideoFromLocalFile_success (TestVideos.TestVideos) ... skipped 'Skipping class until fixed'
    test_addVideoWithLink (TestVideos.TestVideos) ... ok
    test_extractKeyFrames (TestVideos.TestVideos) ... ok
    test_findVid_multiple_results (TestVideos.TestVideos) ... ok
    test_findVideo (TestVideos.TestVideos) ... ok
    test_findVideoNoBlob (TestVideos.TestVideos) ... ok
    test_findVideoResults (TestVideos.TestVideos) ... ok
    test_updateVideo (TestVideos.TestVideos) ... ok
    
    ----------------------------------------------------------------------
    Ran 75 tests in 320.375s
    
    Clone this wiki locally