/interoperability-test

Primary LanguageObjectScriptMIT LicenseMIT

Gitter Quality Gate Status Reliability Rating

interoperability-test

About interoperability-test

Read my first Article

Watch my YouTube video

Error encountered

the --mount option requires BuildKit. Refer to https://docs.docker.com/go/buildkit/ to learn how to build images with BuildKit enabled
ERROR: Service 'iris' failed to build : Build failed

Workaround

My docker-compose installation did not support BuildKit. So I built the image separately and used the image in docker-compose.yaml.

DOCKER_BUILDKIT=1 sudo docker build --no-cache --progress=plain --tag testint .

Online Demo

You can find online demo here - Production Configuration or Management Portal or WebCommand

Why interoperability-test?

My team works on IRIS interoperability solution running on Red Hat OpenShift Kubernetes Container Platform. We are trying to implement CI/CD, but we are missing testing tool. We are making changes to our POC interfaces. I wanted to see what can be done with Unit Testing tools provided by InterSystems.

We are working on POC interface. Below is a screenshot of a visual trace captured in Online Demo: screenshot

IncomingPOCFile Service reads a file and sends it to BPL process. Next step is sending an Authorization request to an external system (DMLSS). After Auth request is approved, another request is sent to DMLSS to retrieve data. Finally a stream is created and sent to POCResponseFile operation.

We are not connected to DMLSS during build time or during this unit testing. I decided to simulate the interaction with DMLSS. I created an Authorization process to provide the authorization. The Authorization request is sent to this Production due to System Default Settings which are shown on the screenshot below. It is received by Generic REST Service which sends a request to POC Auth BPL. POC Auth BPL simulates the response from DMLSS. This worked using port 57700 in the operation and the Generic REST Service.

Problem encountered

I added another REST Service and BPL to process the second request to DMLSS after the Authorization. Once I had added a second service, requests from this Production did not route as expected. I could still reach the Services from Postman, because I was using port 57700 which was mapped to the internal webport inside the container.

How I tried to solve it

Use a REST class without using Generic REST Services, at minimum for one request type (Api or Auth). I realized I needed to configure webport as 52773 inside the container on the outbound REST operations. I kept getting 404 error. Do I need to add Services_Role to Unknown User? I enabled Protect in auditable System events. I did not see any Protect error events.

screenshot

More details in Article

Read here

Prerequisites

Make sure you have git and Docker desktop installed.

Installation: ZPM

Open IRIS Namespace with Interoperability Enabled. Open Terminal and call: USER>zpm "install interoperability-test"

Installation: Docker

Clone/git pull the repo into any local directory

$ git clone https://github.com/oliverwilms/interoperability-test.git

Open the terminal in this directory and run:

DOCKER_BUILDKIT=1 sudo docker build --no-cache --progress=plain --tag testint .
$ docker-compose up -d

How to Run UnitTest

$ docker-compose up -d
sudo docker exec -it interoperability-test_iris_1 iris session iris
zpm "test interoperability-test -only -v"

If everything goes well, you will see output like this:

[interoperability-test] Test START

...

Use the following URL to view the result:
http://1xx.1xx.2xx.xxx:57700/csp/sys/%25UnitTest.Portal.Indices.cls?Index=1&$NAMESPACE=USER
All PASSED

[interoperability-test] Test SUCCESS

UnitTest Portal Home

How to Run interoperability-test

Open the production and start it. File Passthrough Service looks for a file in /usr/irissys/mgr/test. If found, then file content is sent to POC File BPL. If the process completes successfully, a response file will be sent to POC Response File Operation and we should find a file in /usr/irissys/mgr/output/.

You can view the BPL screenshot