Retail:Mocking Hardware Manager printers for testing
In order to create automated tests for the selecting printer functionalities we require to simulate the execution of several hardware managers instances and also simulate success and fail responses for each of the simulated hardware based on the request sent. These requests can be requests to print receipts, reports, pdf files and messages to show in the customer display. The output of these requests are not needed to be actually printed. Simulate several hardware manager instances To simulate several hardware manager instances in the local we will use the loopback network interface. Tipicaly the IP 127.0.0.1 is used to connect the localhost but actually all IP in the range 127.0.0.0 to 127.255.255.254 will go the loopback network interface so to simulate several hardware manager instances we can define the Hardware manager URLs this way:
http://127.0.0.1:8090/printer http://127.0.1.1:8090/printer http://127.0.2.1:8090/printer http://127.0.3.1:8090/printer
With only one Hardware Manager running in localhost will be seen as multiple hardware manager instances from the Web POS
To simulate success and fail conditions new devices mock has been created for receipt printers, customer displays and PDF processes. These devices will act as regular devices but will not produce any output at all and will return success or fail depending on the request sent. To define a mock printer configure your printers in the openbravohw.properties file this way:
## Receipt printers ## machine.printer = mock machine.printer.2 = mock
To define a mock customer display use:
## Customer display ## machine.display = mock
And to define a mock PDF process:
## Printing PDF ## process.printpdf = mock
Success and fail conditions
By default all the mock devices will return a success response to every request processed. To define when to fail you have to configure a list of network ip and a regular expression for each device. Then if the request client in sent to the network IP described in the fail condition and the body of the request matches with the regular expression, then it will fail. An exception is raised and a server failure will be sent to the client.
An example of a fail condition definition is:
This means that if the network IP client used is 127.0.4.1 and the body of the request contains 1234 the request will fail.
Regular expressions follow the Pattern java syntax for regular expressions: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
The list of fail conditions for receipt printers is prepended by printermock.fail, for reports reportmock.fail, for customer displays displaymock.fail and for PDF processes pdfmock.fail.
This is an example of several fail conditions for all devices:
# Fail conditions for mock devices printermock.fail=127.0.1.1,.*54321.* printermock.fail.2=127.0.4.1,.*1234.* printermock.fail.3=127.0.5.1,.*Avalanche.* printermock.fail.4=127.0.5.1,.*GPS.* reportmock.fail=127.0.1.1,.*54321.* reportmock.fail.2=127.0.4.1,.*1234.* displaymock.fail=127.0.1.1,.*54321.* displaymock.fail.2=127.0.4.1,.*1234.* pdfmock.fail=127.0.1.1,.*54321.* pdfmock.fail.2=127.0.4.1,.*1234.*