@aj-shadow/actorjs-documentation-text 0.0.0-aj-beta.221
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +26 -0
- package/Documentation/Document-global-Be-100-more-efficient.txt +31 -0
- package/Documentation/Document-global-actorjs-trigger-mock-and-intercept-anything.txt +21 -0
- package/Documentation/Document-global-advanced-visualization.txt +28 -0
- package/Documentation/Document-global-debugging.txt +4 -0
- package/Documentation/Document-global-divide-and-reuse.txt +37 -0
- package/Documentation/Document-global-general-separation.txt +2 -0
- package/Documentation/Document-global-markup-anchor.txt +6 -0
- package/Documentation/Document-global-markup-api-status.txt +39 -0
- package/Documentation/Document-global-markup-chart-line.txt +18 -0
- package/Documentation/Document-global-markup-documentation-status.txt +39 -0
- package/Documentation/Document-global-markup-documentation.txt +72 -0
- package/Documentation/Document-global-markup-embed.txt +6 -0
- package/Documentation/Document-global-markup-flowchart.txt +88 -0
- package/Documentation/Document-global-markup-html.txt +122 -0
- package/Documentation/Document-global-markup-ie.txt +18 -0
- package/Documentation/Document-global-markup-image.txt +55 -0
- package/Documentation/Document-global-markup-lab.txt +63 -0
- package/Documentation/Document-global-markup-markup.txt +21 -0
- package/Documentation/Document-global-markup-navigation.txt +25 -0
- package/Documentation/Document-global-markup-node-diagram.txt +163 -0
- package/Documentation/Document-global-markup-note.txt +6 -0
- package/Documentation/Document-global-markup-ref.txt +6 -0
- package/Documentation/Document-global-markup-sequence-diagram.txt +215 -0
- package/Documentation/Document-global-markup-state-machine.txt +121 -0
- package/Documentation/Document-global-markup-table.txt +34 -0
- package/Documentation/Document-global-navigation-pane.txt +3 -0
- package/Documentation/Document-global-navigation.txt +2 -0
- package/Documentation/Document-global-specialized-javascript-editors.txt +2 -0
- package/Documentation/Document-global-stacks-connection.txt +2 -0
- package/Documentation/Document-global-stacks-server.txt +2 -0
- package/Documentation/Document-global-test-environment-overview.txt +15 -0
- package/Documentation/Document-global-the-architecture.txt +51 -0
- package/Documentation/Document-global-the-development-environment.txt +5 -0
- package/Documentation/Document-global-the-test-environment.txt +15 -0
- package/Documentation/Document-global-think-ahead.txt +35 -0
- package/Documentation/Document-global-thinking-in-actors-unlimited.txt +1 -0
- package/Documentation/Document-global-what-is-a-stack.txt +2 -0
- package/Documentation/Document-global-why-actorjs.txt +52 -0
- package/Documentation/Document-global-why-actors-unlimited.txt +182 -0
- package/Documentation/Document-global-x-test-case-tool.txt +2 -0
- package/Documentation/Navigation-Documentation-actorjs-global.txt +372 -0
- package/Documentation/Navigation-Documentation-actorsite-global.txt +363 -0
- package/Documentation/abstractions/Document-global-addressing.txt +81 -0
- package/Documentation/abstractions/Document-global-configuration-floor.txt +2 -0
- package/Documentation/abstractions/Document-global-content.txt +3 -0
- package/Documentation/abstractions/Document-global-functions-test.txt +4 -0
- package/Documentation/abstractions/Document-global-functions-unde-test.txt +2 -0
- package/Documentation/abstractions/Document-global-load-test.txt +3 -0
- package/Documentation/abstractions/Document-global-repo.txt +79 -0
- package/Documentation/abstractions/Document-global-shared-data.txt +5 -0
- package/Documentation/abstractions/Document-global-system-to-test.txt +2 -0
- package/Documentation/abstractions/Document-global-system-under-test.txt +3 -0
- package/Documentation/abstractions/Document-global-test-data.txt +251 -0
- package/Documentation/abstractions/Document-global-test-suite.txt +37 -0
- package/Documentation/abstractions/Document-global-verification-data.txt +103 -0
- package/Documentation/abstractions/actor/Document-global-actor-condition.txt +74 -0
- package/Documentation/abstractions/actor/Document-global-actor-local.txt +44 -0
- package/Documentation/abstractions/actor/Document-global-actor-originating.txt +100 -0
- package/Documentation/abstractions/actor/Document-global-actor-proxy.txt +119 -0
- package/Documentation/abstractions/actor/Document-global-actor-terminating.txt +101 -0
- package/Documentation/abstractions/actor/Document-global-actor.txt +90 -0
- package/Documentation/abstractions/actor/Document-global-execution-states.txt +21 -0
- package/Documentation/abstractions/actorpart/Document-global-actorpart.txt +2 -0
- package/Documentation/abstractions/stack/Document-global-client-connection.txt +3 -0
- package/Documentation/abstractions/stack/Document-global-connection.txt +3 -0
- package/Documentation/abstractions/stack/Document-global-decoder.txt +3 -0
- package/Documentation/abstractions/stack/Document-global-encoder.txt +3 -0
- package/Documentation/abstractions/stack/Document-global-message.txt +4 -0
- package/Documentation/abstractions/stack/Document-global-server-connection.txt +3 -0
- package/Documentation/abstractions/stack/Document-global-stack.txt +12 -0
- package/Documentation/abstractions/stack/Document-global-worker.txt +3 -0
- package/Documentation/abstractions/test-case/Document-global-phases.txt +30 -0
- package/Documentation/abstractions/test-case/Document-global-test-case-result.txt +23 -0
- package/Documentation/abstractions/test-case/Document-global-test-case.txt +199 -0
- package/Documentation/actor-api/Document-global-actor-part.txt +7 -0
- package/Documentation/actor-api/Document-global-actor.txt +375 -0
- package/Documentation/actor-api/Document-global-async.txt +176 -0
- package/Documentation/actor-api/Document-global-client-stack.txt +215 -0
- package/Documentation/actor-api/Document-global-content.txt +106 -0
- package/Documentation/actor-api/Document-global-logger.txt +426 -0
- package/Documentation/actor-api/Document-global-process.txt +7 -0
- package/Documentation/actor-api/Document-global-server-stack.txt +213 -0
- package/Documentation/actor-api/Document-global-shared-data.txt +259 -0
- package/Documentation/actor-api/Document-global-test-data.txt +816 -0
- package/Documentation/actor-api/Document-global-timer.txt +70 -0
- package/Documentation/actor-api/Document-global-verification-data.txt +624 -0
- package/Documentation/connection-worker-api/Document-global-logger.txt +3 -0
- package/Documentation/documentation-references.json +199 -0
- package/Documentation/embedded/Document-global-test-case-result.txt +10 -0
- package/Documentation/howto/Document-global-create-actor.txt +1 -0
- package/Documentation/howto/Document-global-create-stack.txt +1 -0
- package/Documentation/howto/Document-global-create-test-case.txt +1 -0
- package/Documentation/howto/Document-global-create-test-suite.txt +1 -0
- package/Documentation/howto/Document-global-define-addresses.txt +1 -0
- package/Documentation/howto/Document-global-define-fut.txt +1 -0
- package/Documentation/howto/Document-global-define-sut.txt +16 -0
- package/Documentation/howto/Document-global-full-workflow.txt +143 -0
- package/Documentation/howto/Document-global-normal-workflow.txt +58 -0
- package/Documentation/howto/Document-global-prerequisites.txt +8 -0
- package/Documentation/howto/prerequisites/Document-global-install-actorjs.txt +64 -0
- package/Documentation/howto/prerequisites/Document-global-install-git.txt +26 -0
- package/Documentation/howto/prerequisites/Document-global-install-nodejs.txt +19 -0
- package/Documentation/markup/Document-global-markup-test-case.txt +6 -0
- package/Documentation/markup/Document-global-markup-test-suite.txt +13 -0
- package/Documentation/markup/embed/Document-global-inner_markup_tc.txt +164 -0
- package/Documentation/nodejs-api/Document-global-fs.txt +7 -0
- package/Documentation/stack-api/Document-global-ascii-dictionary.txt +108 -0
- package/Documentation/stack-api/Document-global-binary-log.txt +91 -0
- package/Documentation/stack-api/Document-global-bit-byte.txt +80 -0
- package/Documentation/stack-api/Document-global-content-base.txt +169 -0
- package/Documentation/stack-api/Document-global-ip-log.txt +101 -0
- package/Documentation/stack-api/Document-global-log-inner.txt +152 -0
- package/Documentation/stack-api/Document-global-log-part-error.txt +12 -0
- package/Documentation/stack-api/Document-global-log-part-ref.txt +80 -0
- package/Documentation/stack-api/Document-global-log-part-text.txt +81 -0
- package/Documentation/tools/Document-global-actors.txt +196 -0
- package/Documentation/tools/Document-global-addressing.txt +38 -0
- package/Documentation/tools/Document-global-content.txt +1 -0
- package/Documentation/tools/Document-global-global-test-data.txt +197 -0
- package/Documentation/tools/Document-global-stacks.txt +1 -0
- package/Documentation/tools/Document-global-test-case-analyze.txt +3 -0
- package/Documentation/tools/Document-global-test-case-debug.txt +16 -0
- package/Documentation/tools/Document-global-test-case-definition.txt +37 -0
- package/Documentation/tools/Document-global-test-case-execution.txt +28 -0
- package/Documentation/tools/Document-global-test-case-log.txt +95 -0
- package/Documentation/tools/Document-global-test-case-sequence-diagram.txt +17 -0
- package/Documentation/tools/Document-global-test-case-specification.txt +3 -0
- package/Documentation/tools/Document-global-test-cases.txt +11 -0
- package/Documentation/tools/Document-global-tool-test-suite.txt +202 -0
- package/Education/Document-global-add-your-first-addresses.txt +75 -0
- package/Education/Document-global-define-your-first-sut.txt +18 -0
- package/Education/Document-global-make-your-first-actors.txt +35 -0
- package/Education/Document-global-make-your-first-test-case.txt +43 -0
- package/Education/Document-global-make-your-first-test-suite.txt +29 -0
- package/Education/Document-global-share-your-work.txt +35 -0
- package/Education/Navigation-Education-actorjs-global.txt +31 -0
- package/LICENSE.txt +96 -0
- package/README.md +5 -0
- package/Workshop/Document-global-actordemo-image-ai.txt +5 -0
- package/Workshop/Document-global-actordemo-login.txt +10 -0
- package/Workshop/Document-global-actordemo-site.txt +3 -0
- package/Workshop/Document-global-actordemo-start.txt +5 -0
- package/Workshop/Document-global-actordemo-the-architecture.txt +27 -0
- package/Workshop/Document-global-introduction-actor.txt +84 -0
- package/Workshop/Document-global-introduction-actorjs.txt +42 -0
- package/Workshop/Document-global-introduction-stack.txt +25 -0
- package/Workshop/Document-global-introduction-system-under-test.txt +102 -0
- package/Workshop/Document-global-introduction-test-case.txt +50 -0
- package/Workshop/Document-global-introduction-test-suite.txt +31 -0
- package/Workshop/Document-global-login-with-puppeter.txt +45 -0
- package/Workshop/Document-global-mock-with-http.txt +83 -0
- package/Workshop/Document-global-mock-with-icap.txt +94 -0
- package/Workshop/Document-global-prerequisites-actorJs.txt +18 -0
- package/Workshop/Document-global-prerequisites-actordemo.txt +15 -0
- package/Workshop/Document-global-trigger-with-http.txt +93 -0
- package/Workshop/Document-global-trigger-with-puppeter.txt +49 -0
- package/Workshop/Navigation-Workshop-actorjs-global.txt +86 -0
- package/npm-shrinkwrap.json +13 -0
- package/package.json +10 -0
package/LICENSE.txt
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
|
|
2
|
+
LICENSE AGREEMENT
|
|
3
|
+
|
|
4
|
+
Effective: 1st of November 2020
|
|
5
|
+
This License Agreement is between Licensee and Hagnell Konsulting AB (a company incorporated in Sweden with
|
|
6
|
+
company registration number: 559476-0570) (“Hagnell Konsulting”) and governs the use by Licensee of ActorJs
|
|
7
|
+
(as defined below).
|
|
8
|
+
By installing the Software (as defined below), Licensee agrees to be bound by the terms of this License Agreement.
|
|
9
|
+
|
|
10
|
+
DEFENITIONS
|
|
11
|
+
ActorJs The test tool developed by Hagnell Konsulting, utilizing the Patent and the Software.
|
|
12
|
+
Derivative Works Any work, whether in source or object code, which is based on the Software and which
|
|
13
|
+
does not constitute a new and independent work pursuant to paragraph 2 of article 4 of
|
|
14
|
+
the Swedish Act (1960:729) on Copyright in Literary and Artistic Works.
|
|
15
|
+
Documentation The manuals and instruction materials furnished by Hagnell Konsulting in connection
|
|
16
|
+
with ActorJs.
|
|
17
|
+
Licensee The physical or legal person to which the License hereunder has been granted by
|
|
18
|
+
Hagnell Konsulting.
|
|
19
|
+
Patent The patent application for a system and method for testing of systems under test, patent
|
|
20
|
+
application number:19218798.7 (European Patent Office).
|
|
21
|
+
Software The software developed and owned by Hagnell Konsulting, identified as ActorJs.
|
|
22
|
+
|
|
23
|
+
§ 1 - LICENSE
|
|
24
|
+
Licensee is hereby granted a limited, non-exclusive and non-transferable license to use ActorJs (including any
|
|
25
|
+
Derivative Works created by Licensee hereunder) (the “License”). The License is granted subject to the terms and
|
|
26
|
+
conditions set forth below.
|
|
27
|
+
The Software is licensed to Licensee on an open source basis. The License includes the right to create Derivative
|
|
28
|
+
Works pursuant to sub-clause 3 below.
|
|
29
|
+
ActorJs may be used only by Licensee himself/herself/itself, or (if, for instance, Licensee is a company), by the
|
|
30
|
+
employees and consultants of Licensee.
|
|
31
|
+
The License does not include any updates to the Software, or any support services. Notwithstanding the foregoing,
|
|
32
|
+
should Hagnell Konsulting furnish any updates to Licensee, such updates shall be subject to the License granted hereunder.
|
|
33
|
+
As regards the Documentation provided by Hagnell Konsulting, Licensee may use this Documentation for the purpose of
|
|
34
|
+
the License hereunder (only). Licensee shall not be entitled to distribute copies of the Documentation, or electronically
|
|
35
|
+
communicate the Documentation, to recipients who are not employees or consultants of Licensee.
|
|
36
|
+
|
|
37
|
+
§ 2 - LICENSE RESTRICTIONS
|
|
38
|
+
Licensee may not:
|
|
39
|
+
i) Rent, lease, lend, sell, distribute, transfer or otherwise make available ActorJs (and/or a Derivative Work)
|
|
40
|
+
(whether for value or otherwise) to third parties without Hagnell Konsulting´s written approval. Any such approval
|
|
41
|
+
will be subject to the third party acknowledging in writing (vis-à-vis Hagnell Konsulting) that its use of ActorJs
|
|
42
|
+
(and/or the Derivative Work) shall be subject to the terms and conditions of this Agreement.
|
|
43
|
+
|
|
44
|
+
ii) Distribute copies of the Software (and/or a Derivate Work), or electronically communicate the Software
|
|
45
|
+
(and/or a Derivative Work), to recipients who are not employees or consultants of Licensee.
|
|
46
|
+
|
|
47
|
+
§ 3 – DERITATIVE WORKS
|
|
48
|
+
Should Licensee, or (if applicable) any of its employees or consultants, create a Derivative Work, Licensee shall
|
|
49
|
+
inform Hagnell Konsulting thereof in writing (an e-mail shall be sufficient). Licensee may use the Derivative Work to the
|
|
50
|
+
same extent as it may use the Software hereunder, but Hagnell Konsulting shall be the sole and exclusive owner of any
|
|
51
|
+
and all rights in the Derivative Work, including the copyright. At the request of Hagnell Konsulting, Licensee and
|
|
52
|
+
Hagnell Konsulting shall formalize the rights transfer in a written contract, which shall, inter alia, confirm that all rights
|
|
53
|
+
in the Derivative Work have been irrevocably transferred to Hagnell Konsulting, that Hagnell Konsulting is be entitled to
|
|
54
|
+
exploit the Derivative Work without limitation in time or any other kind of limitation, that Hagnell Konsulting may transfer
|
|
55
|
+
its rights to the Derivative Work to third parties and that the rights transfer from Licensee to Hagnell Konsulting shall be
|
|
56
|
+
free of charge.
|
|
57
|
+
|
|
58
|
+
§ 4 – IMPROVEMENTS TO THE PATENT
|
|
59
|
+
Any improvement to the Patent, whether patentable or not, which Licensee, or (if applicable) any of its employees or
|
|
60
|
+
consultants, may discover, create or develop or otherwise have at its disposal, directly or indirectly, without restraints
|
|
61
|
+
as to the use thereof (“Improvements”), shall be disclosed promptly to Hagnell Konsulting and Hagnell Konsulting shall
|
|
62
|
+
have the exclusive right of perpetual duration to use the Improvements as well as to grant the use thereof to other licensees
|
|
63
|
+
in the whole world without compensation to Licensee, except that Licensee shall during the life of this Agreement have
|
|
64
|
+
the non-exclusive right to use such Improvements including corresponding patents, if any, in accordance with the
|
|
65
|
+
provisions of this Agreement. If Licensee decides not to apply for a patent relating to an Improvement made by
|
|
66
|
+
Licensee or if Licensee no longer wishes to maintain such a patent or patent application then Hagnell Konsulting may in its
|
|
67
|
+
sole discretion and at its own expense apply for such a patent or maintain such a patent or patent application (as the
|
|
68
|
+
case may be).
|
|
69
|
+
|
|
70
|
+
§ 5 - COPYRIGHT AND INTELLECTUAL PROPERTY RIGHTS
|
|
71
|
+
The Software, the Patent and the Documentation are protected by copyright and patent laws and international
|
|
72
|
+
copyright and patent treaties, as well other intellectual property laws and treaties. Any such intellectual property
|
|
73
|
+
rights are owned and especially reserved by Hagnell Konsulting, without limitation. For the avoidance of doubt, no
|
|
74
|
+
ownership rights are transferred to Licensee hereunder.
|
|
75
|
+
“ActorJs” is a registered trademark of Hagnell Konsulting. This Agreement does not include a license to use the
|
|
76
|
+
trademark “ActorJs”.
|
|
77
|
+
|
|
78
|
+
§ 6 - LIMITITATION ON LIABILITY
|
|
79
|
+
ActorJs is licensed to Licensee “as is”. Hagnell Konsulting gives no guarantees as regards the use, functionality
|
|
80
|
+
or performance of ActorJs and assumes no liability (whatsoever) as regards any defaults in ActorJs or any possible
|
|
81
|
+
infringements on third party statutory or contractual rights. Hagnell Konsulting expressly disclaims any and all warranties
|
|
82
|
+
not expressly given in this Agreement, including any implied warranties of merchantability, satisfactory quality, fitness
|
|
83
|
+
for a particular purpose, title and non-infringement. Thus, the entire risk arising out of any use of ActorJs hereunder
|
|
84
|
+
remains with Licensee.
|
|
85
|
+
The limitation of liability hereunder shall be to the maximum extent permitted by applicable law. Under no
|
|
86
|
+
circumstances shall Hagnell Konsulting be liable for any cost of substitute products or services, for any indirect losses or
|
|
87
|
+
for any consequential damages (including any loss of profits, interruptions or loss of business information).
|
|
88
|
+
|
|
89
|
+
§ 7 - MISCELLANEOUS
|
|
90
|
+
Licensee may not, either wholly or partly, assign or pledge its rights or obligations under this Agreement to any third
|
|
91
|
+
party without the prior written consent of Hagnell Konsulting.
|
|
92
|
+
|
|
93
|
+
§ 8 - DISPUTES
|
|
94
|
+
This agreement shall be governed by Swedish law. Any dispute, controversy or claim arising out of or in connection
|
|
95
|
+
with this contract, or the breach, termination or invalidity thereof, shall be settled by the general courts of Sweden,
|
|
96
|
+
with the district court of Stockholm in the first instance.
|
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# **Image AI page**
|
|
2
|
+
The [ActorDemo](http://localhost:9045/image-ai) Image AI page shows images and buttons to transform the images.
|
|
3
|
+
|
|
4
|
+
<br />
|
|
5
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/workshop/ActorDemoImageAI.png" style="width:100%; margin: 0px 16px 10px;">
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# **Login page**
|
|
2
|
+
The [ActorDemo](http://localhost:9045/start) login page contains either a login box or a logout box.
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
## **Login**
|
|
6
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/workshop/ActorDemoLogin.png" style="width:100%; margin: 0px 16px 10px;">
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
## **Logout**
|
|
10
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/workshop/ActorDemoLogout.png" style="width:100%; margin: 0px 16px 10px;">
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# **Start page**
|
|
2
|
+
The [ActorDemo](http://localhost:9045/start) start page contains a simple example of what the Image AIService can do.
|
|
3
|
+
|
|
4
|
+
<br />
|
|
5
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/workshop/ActorDemoStart.png" style="width:100%; margin: 0px 16px 10px;">
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# **The Architecture**
|
|
2
|
+
## **Description**
|
|
3
|
+
The architecture of **ActorDemo** is a bit exaggerated to show the possibilities of ActorJs.
|
|
4
|
+
|
|
5
|
+
```node
|
|
6
|
+
Config(nodeWidth: 80, nodeHeight: 80, nodeWidthBetween: 25, nodeHeightBetween: 40, widthBias: 30, heightBias: 40, border: true, backgroundColor: AliceBlue)
|
|
7
|
+
|
|
8
|
+
Nodes[, , , , UserService(; ; White)]
|
|
9
|
+
Nodes[Browser(; ; White), , ActorDemo(; ; Honeydew), , ImageService(; ; White)]
|
|
10
|
+
Nodes[, , , , AIService(; ; White)]
|
|
11
|
+
|
|
12
|
+
Groups[Actor Orig(0; 1; 0; 3), SUT(2; 3; 0; 3), Actor Term(4; 5; 0; 3)]
|
|
13
|
+
|
|
14
|
+
Browser => ActorDemo[puppeteer]: puppeteer
|
|
15
|
+
Browser => ActorDemo[http]: http
|
|
16
|
+
Browser => ActorDemo[websocket]: websocket
|
|
17
|
+
ActorDemo => UserService[http]: http
|
|
18
|
+
ActorDemo => ImageService[http]: http
|
|
19
|
+
ActorDemo => AIService[icap]: icap
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### **Nodes**
|
|
23
|
+
* **Browser**: the client to use **ActorDemo**.
|
|
24
|
+
* **ActorDemo**: the [[REF=, ABS_System_Under_Test]]. It is a web server containing the site and a REST API.
|
|
25
|
+
* **UserService**: a service handling user data, such as logins.
|
|
26
|
+
* **ImageService**: a service handling images.
|
|
27
|
+
* **AIService**: a service handling image transformations.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# **Introduction - Actor**
|
|
2
|
+
## **What is an Actor?**
|
|
3
|
+
An [[REF=, ABS_Actor]] is the fundamental building block of ActorJs. An [[REF=, ABS_Actor]] is a simulated process that is controlled by ActorJs, which starts, stops, and interrupts [[REF=, ABS_Actors]] depending on the data and outcome of the [[REF=, ABS_Test_Case]].
|
|
4
|
+
|
|
5
|
+
An [[REF=, ABS_Actor]] is 100% code, which gives the test developer full control. For maximal reuse and optimal maintenance, [[REF=, ABS_Actors]] have their own:
|
|
6
|
+
* Logic
|
|
7
|
+
* Flow
|
|
8
|
+
|
|
9
|
+
ActorJs will provide Actors with:
|
|
10
|
+
* [[REF=, ABS_Addresses]]
|
|
11
|
+
* [[REF=, ABS_Test_Data]]
|
|
12
|
+
* [[REF=, ABS_Verification_Data]]
|
|
13
|
+
* [[REF=, ABS_Content]]
|
|
14
|
+
|
|
15
|
+
[[REF=, ABS_Actors]] use [[REF=, ABS_Stacks]] to communicate. A [[REF=, ABS_Test_Case]] contains [[REF=, ABS_Actors]] to isolate the [[REF=, ABS_System_Under_Test]]. An [[REF=, ABS_Actor]] can be reused over and over again in different [[REF=, ABS_Test_Cases]], and can change its behavior in response to the [[REF=, ABS_Test_Data]].
|
|
16
|
+
|
|
17
|
+
## **Analyze**
|
|
18
|
+
Let's say we have a system to test, containing a browser, a proxy, and a web server.
|
|
19
|
+
```node
|
|
20
|
+
Config(nodeWidth: 70, nodeHeight: 70, nodeWidthBetween: 25, nodeHeightBetween: 45, widthBias: 30, heightBias: 30)
|
|
21
|
+
|
|
22
|
+
Nodes[Browser, , Proxy, , web-server]
|
|
23
|
+
|
|
24
|
+
Groups[STT(0; 5; 0; 1)]
|
|
25
|
+
|
|
26
|
+
Browser => Proxy[http]: http
|
|
27
|
+
Proxy => web-server[http]: http
|
|
28
|
+
```
|
|
29
|
+
If we want to test the proxy, we define it as the [[REF=, ABS_System_Under_Test]]. Then we simulate the browser and the web server with [[REF=, ABS_Actors]].
|
|
30
|
+
```node
|
|
31
|
+
Config(nodeWidth: 70, nodeHeight: 70, nodeWidthBetween: 25, nodeHeightBetween: 45, widthBias: 30, heightBias: 30)
|
|
32
|
+
|
|
33
|
+
Nodes[Browser, , Proxy, , web-server]
|
|
34
|
+
|
|
35
|
+
Groups[Actor Orig(0; 1; 0; 1), SUT(2; 3; 0; 1), Actor Term(4; 5; 0; 1)]
|
|
36
|
+
|
|
37
|
+
Browser => Proxy[http]: http
|
|
38
|
+
Proxy => web-server[http]: http
|
|
39
|
+
```
|
|
40
|
+
We want to test a situation where the browser fetches an image from the web server via the proxy. The use case looks like this:
|
|
41
|
+
```seq
|
|
42
|
+
Config(nodeWidth: 150, nodeMessageHeight: 17, nodeEventHeight: 10, widthBias: 30, heightBias: 30, lineNumbers: false, border: true, backgroundColor: default)
|
|
43
|
+
|
|
44
|
+
Nodes[Browser, Proxy, web-server]
|
|
45
|
+
Browser => Proxy[http]: Get /image.png
|
|
46
|
+
Proxy => web-server[http]: Get /image.png
|
|
47
|
+
web-server => Proxy[http]: 200 OK
|
|
48
|
+
Proxy => Browser[http]: 200 OK
|
|
49
|
+
```
|
|
50
|
+
To implement this use case, we need:
|
|
51
|
+
* an HTTP Stack
|
|
52
|
+
* an http get image request message
|
|
53
|
+
* an http get image response message
|
|
54
|
+
|
|
55
|
+
Once these items are in place, all we have to do is implement the [[REF=, ABS_Actors]].
|
|
56
|
+
1) The browser [[REF=, ABS_Actor]] sends a request and receives a response.
|
|
57
|
+
2) The web server [[REF=, ABS_Actor]] receives a request and sends a response.
|
|
58
|
+
|
|
59
|
+
## **Implement**
|
|
60
|
+
Minimal code is needed to implement simple [[REF=, ABS_Actors]]. We recommend keeping [[REF=, ABS_Actors]] simple, letting them implement only part of the flow in the use case. An [[REF=, ABS_Actor]] can implement a whole simulator, of course, but this would not provide any advantage over using a conventional simulator.
|
|
61
|
+
#### Browser
|
|
62
|
+
```javascript
|
|
63
|
+
|
|
64
|
+
*run() {
|
|
65
|
+
this.httpConnection.send(new HttpMsgGetRequest(this.requistUri));
|
|
66
|
+
const response = this.httpConnection.receive();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
#### **Web server**
|
|
71
|
+
```javascript
|
|
72
|
+
|
|
73
|
+
*run() {
|
|
74
|
+
this.httpConnection.accept();
|
|
75
|
+
const request = this.httpConnection.receive();
|
|
76
|
+
this.httpConnection.send(new HttpGet200OkResponse(this.content));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
# **Tools**
|
|
82
|
+
The Actors tool is an editor to build [[REF=, ABS_Actors]].
|
|
83
|
+
|
|
84
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/actors.png" style="width: 100%; margin: 0px 16px 10px;">
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# **Introduction - ActorJs**
|
|
2
|
+
|
|
3
|
+
<div style="position:relative;display:flex;flex-direction:column;float:right">
|
|
4
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Core Tool - Repos</h3>
|
|
5
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/repos.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
6
|
+
<h4 style="width: 233px; margin: 2px 16px 10px; font-weight:bold;">Core Tool - SUTs</h3>
|
|
7
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/sut.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
8
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Core Tool - Test Suits</h3>
|
|
9
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-suite-execution.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
10
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Core Tool - Test Cases</h3>
|
|
11
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-definition.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
12
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Core Tool - Actors</h3>
|
|
13
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/actors.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
14
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Core Tool - Stacks</h3>
|
|
15
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/stacks.png" style="width: 233px; margin: 0px 16px;">
|
|
16
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Data Tool - Address</h3>
|
|
17
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/address.png" style="width: 233px; margin: 0px 16px;">
|
|
18
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Data Tool - Test Data</h3>
|
|
19
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-data.png" style="width: 233px; margin: 0px 16px;">
|
|
20
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Data Tool - Content</h3>
|
|
21
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/content.png" style="width: 233px; margin: 0px 16px;">
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
ActorJs is an integrated test - development environment. It contains tools, organizes data, and provides several views that visualize logs, sequence diagrams, and more in real time.
|
|
25
|
+
|
|
26
|
+
## **Core Tools**
|
|
27
|
+
* [[REF=, ABS_Repos]] - manages your [[REF=, ABS_Repos]].
|
|
28
|
+
* [[REF=, ABS_SUTs]] - manages your [[REF=, ABS_SUTs]].
|
|
29
|
+
* [[REF=, ABS_Test_Suites]] - manages and execute [[REF=, ABS_Test_Suites]].
|
|
30
|
+
* [[REF=, ABS_Test_Cases]] - manages and execute [[REF=, ABS_Test_Cases]].
|
|
31
|
+
* [[REF=, ABS_Stacks]] - editor to build [[REF=, ABS_Stacks]].
|
|
32
|
+
* [[REF=, ABS_Actors]] - editor to build [[REF=, ABS_Actors]].
|
|
33
|
+
|
|
34
|
+
## **Data Tools**
|
|
35
|
+
* [[REF=, ABS_Addressing_Address]] - manages your [[REF=, ABS_Addressing]].
|
|
36
|
+
* [[REF=, ABS_Test_Data]] - manages your [[REF=, ABS_Test_Data]].
|
|
37
|
+
* [[REF=, ABS_Content]] - manages your [[REF=, ABS_Content]].
|
|
38
|
+
* [[REF=, ABS_Load]] - manages your [[REF=, ABS_Load]]. `Coming soon`
|
|
39
|
+
|
|
40
|
+
## **Visualization Tools**
|
|
41
|
+
* Log
|
|
42
|
+
* Sequence Diagram
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# **Introduction - Stack**
|
|
2
|
+
## **What is a Stack?**
|
|
3
|
+
A [[REF=, ABS_Stack]] is a group of components used to send and receive messages from an [[REF=, ABS_Actor]]. It is an implementation of a protocol, either a standard or proprietary protocol, or communication with hardware or a GUI. The [[REF=, ABS_Stack]] abstraction differs slightly from those commonly used when implementing protocols; it contains only an [[REF=, ABS_Encoder]] and [[REF=, ABS_Decoder]], and does not keep states or handle timers. These parts of a common stack will be implemented in [[REF=, ABS_Actors]] when needed.
|
|
4
|
+
|
|
5
|
+
The components of a Stack are:
|
|
6
|
+
* **[[REF=, ABS_Connection]]** - sends and receives messages
|
|
7
|
+
* **[[REF=, ABS_Message]]** - a container of data from which data can be sent and to which data can be received
|
|
8
|
+
* **[[REF=, ABS_Encoder]]** - encodes the data of a message to the chosen protocol
|
|
9
|
+
* **[[REF=, ABS_Decoder]]** - decodes the selected protocol data to a message
|
|
10
|
+
|
|
11
|
+
Some common stacks include: **Http**, **Diameter**, **Radius**, **Sip**, **MQTT**, and others.
|
|
12
|
+
|
|
13
|
+
```node
|
|
14
|
+
Config(nodeWidth: 90, nodeHeight: 40, nodeWidthBetween: 25, nodeHeightBetween: 45, widthBias: 30, heightBias: 30)
|
|
15
|
+
|
|
16
|
+
Nodes[MessageS, Encoder, , Decoder, MessageR]
|
|
17
|
+
|
|
18
|
+
Groups[Sending Actor(0; 1; 0; 1), Client Connection(1; 2; 0; 1), Server Connection(3; 4; 0; 1), Receiving Actor(4; 5; 0; 1)]
|
|
19
|
+
|
|
20
|
+
MessageS => Encoder[]:
|
|
21
|
+
Encoder => Decoder[http]:
|
|
22
|
+
Decoder => MessageR[]:
|
|
23
|
+
```
|
|
24
|
+
1) An [[REF=, ABS_Actor]] sends an [[REF=, ABS_Message]] with a [[REF=, ABS_Connection]] which encodes the [[REF=, ABS_Message]] to chosen protocol.
|
|
25
|
+
1) A [[REF=, ABS_Connection]] receives an [[REF=, ABS_Message]] and decodes the protocol to a [[REF=, ABS_Message]] and returns it to the receiving [[REF=, ABS_Actor]].
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# **Introduction - System Under Test**
|
|
2
|
+
## **What is a System To Test?**
|
|
3
|
+
|
|
4
|
+
When testing a system, we define the nodes/processes not handled by ActorJs as the [[REF=, ABS_System_Under_Test]]. The [[REF=, ABS_Actors]] - simulated processes - communicating with the [[REF=, ABS_System_Under_Test]] will be defined as the **Test Scenography**. The Test Scenography is divided into two parts: Actor Clients and Actor Servers.
|
|
5
|
+
|
|
6
|
+
```node
|
|
7
|
+
Config(nodeWidth: 50, nodeHeight: 50, nodeWidthBetween: 25, nodeHeightBetween: 40, widthBias: 30, heightBias: 30)
|
|
8
|
+
|
|
9
|
+
Nodes[, Browser, , , ]
|
|
10
|
+
Nodes[, , Sensor 1, , Core]
|
|
11
|
+
Nodes[, , Sensor 2, , , ]
|
|
12
|
+
|
|
13
|
+
Groups[Clients(0; 2; 0; 3), STT(2; 6; 0; 3)]
|
|
14
|
+
|
|
15
|
+
Browser => Core[radius]: radius
|
|
16
|
+
Browser => Core[http]: http
|
|
17
|
+
Sensor 1 => Core[mqtt]: mqtt
|
|
18
|
+
Sensor 2 => Core[mqtt]: mqtt
|
|
19
|
+
```
|
|
20
|
+
## **The detailed System To Test**
|
|
21
|
+
The [[REF=, ABS_System_To_Test]] usually consists of many different nodes that either belong to the product or are third-party nodes on which the product is dependent.
|
|
22
|
+
|
|
23
|
+
It can of interest to build test cases for the whole system, and that's what we'll do, but remember: **it will not be possible to test everything.** How can we perform different negative tests? How do we control the sensors? How can we control the third-party products? The answer is that we cannot.
|
|
24
|
+
|
|
25
|
+
```node
|
|
26
|
+
Config(nodeWidth: 50, nodeHeight: 50, nodeWidthBetween: 25, nodeHeightBetween: 25, widthBias: 30, heightBias: 30)
|
|
27
|
+
|
|
28
|
+
Nodes[, , , , , ]
|
|
29
|
+
Nodes[, Browser, , Login, , , , Hss, ]
|
|
30
|
+
Nodes[, , , Frontend, , Backend, , WWW]
|
|
31
|
+
Nodes[, , , Sensor 1, , , , Store]
|
|
32
|
+
Nodes[, , , Sensor 2, , MQTT]
|
|
33
|
+
|
|
34
|
+
Groups[Clients(0; 3; 0; 5), STT - Product(3; 6; 0; 5), STT - Third Party(6; 9; 0; 5)]
|
|
35
|
+
|
|
36
|
+
Browser => Login[radius]: radius
|
|
37
|
+
Browser => Frontend[http]: http
|
|
38
|
+
Sensor 1 => MQTT[mqtt]: mqtt
|
|
39
|
+
Sensor 2 => MQTT[mqtt]: mqtt
|
|
40
|
+
Login => Hss[diameter]: diamter
|
|
41
|
+
Frontend => Backend[socket]: socket
|
|
42
|
+
MQTT => Backend[socket]: socket
|
|
43
|
+
Backend => Hss[diameter]: diameter
|
|
44
|
+
Backend => WWW[http]: http
|
|
45
|
+
Backend => Store[socket]: socket
|
|
46
|
+
```
|
|
47
|
+
## **System Under Test**
|
|
48
|
+
The [[REF=, ABS_System_To_Test]] can be divided into several [[REF=, ABS_System_Under_Test]]s. By definition, a [[REF=, ABS_System_Under_Test]] is either the whole [[REF=, ABS_System_To_Test]], or parts of it.
|
|
49
|
+
### **System Under Test - Core Product**
|
|
50
|
+
1) Normally, it will not be necessary to test the third-party products. We can replace them with [[REF=, ABS_Actors]] instead.
|
|
51
|
+
2) We can also replace sensors with [[REF=, ABS_Actors]].
|
|
52
|
+
```node
|
|
53
|
+
Config(nodeWidth: 50, nodeHeight: 50, nodeWidthBetween: 25, nodeHeightBetween: 40, widthBias: 30, heightBias: 30)
|
|
54
|
+
|
|
55
|
+
Nodes[, , , , , ]
|
|
56
|
+
Nodes[, Browser, , Login, , , , Hss, ]
|
|
57
|
+
Nodes[, , , Frontend, , Backend, , WWW]
|
|
58
|
+
Nodes[, Sensor 1, , MQTT, , , , Store, ]
|
|
59
|
+
Nodes[, Sensor 2, , , ]
|
|
60
|
+
|
|
61
|
+
Groups[Originating Actors(0; 3; 0; 5), SUT - Core Product(3; 6; 0; 5), Terminating Actor(6; 9; 0; 5)]
|
|
62
|
+
|
|
63
|
+
Browser => Login[radius]: radius
|
|
64
|
+
Browser => Frontend[http]: http
|
|
65
|
+
Sensor 1 => MQTT[mqtt]: mqtt
|
|
66
|
+
Sensor 2 => MQTT[mqtt]: mqtt
|
|
67
|
+
Login => Hss[diameter]: diameter
|
|
68
|
+
Frontend => Backend[socket]: socket
|
|
69
|
+
MQTT => Backend[socket]: socket
|
|
70
|
+
Backend => Hss[diameter]: diameter
|
|
71
|
+
Backend => WWW[http]: http
|
|
72
|
+
Backend => Store[socket]: socket
|
|
73
|
+
```
|
|
74
|
+
### **System Under Test - Login**
|
|
75
|
+
1) The browser and Hss can be replaced with [[REF=, ABS_Actors]].
|
|
76
|
+
```node
|
|
77
|
+
Config(nodeWidth: 50, nodeHeight: 50, nodeWidthBetween: 25, nodeHeightBetween: 40, widthBias: 30, heightBias: 30)
|
|
78
|
+
|
|
79
|
+
Nodes[Browser, , Login, , Hss]
|
|
80
|
+
|
|
81
|
+
Groups[Originating Actors(0; 2; 0; 1), SUT - Login(2; 3; 0; 1), Terminating Actor(3; 5; 0; 1)]
|
|
82
|
+
|
|
83
|
+
Browser => Login[radius]: radius
|
|
84
|
+
Login => Hss[diameter]: diameter
|
|
85
|
+
```
|
|
86
|
+
### **System Under Test - Sensor 1**
|
|
87
|
+
1) Sensor 1 can be tested by replacing the MQTT Node with [[REF=, ABS_Actors]].
|
|
88
|
+
```node
|
|
89
|
+
Config(nodeWidth: 50, nodeHeight: 50, nodeWidthBetween: 25, nodeHeightBetween: 45, widthBias: 30, heightBias: 30)
|
|
90
|
+
|
|
91
|
+
Nodes[, Sensor 1, , MQTT, , ]
|
|
92
|
+
|
|
93
|
+
Groups[SUT - Sensor 1(0; 3; 0; 1), Actor Servers(3; 6; 0; 1)]
|
|
94
|
+
|
|
95
|
+
Sensor 1 => MQTT[mqtt]: mqtt
|
|
96
|
+
```
|
|
97
|
+
## **Conclusion**
|
|
98
|
+
There is no limit to the number of [[REF=, ABS_System_Under_Test]] into which you can divide your [[REF=, ABS_System_To_Test]].
|
|
99
|
+
|
|
100
|
+
Perhaps different development teams are developing each node. Then the teams can isolate their specific node with [[REF=, ABS_Actors]] and test it.
|
|
101
|
+
|
|
102
|
+
Later, you can define two or more nodes as a [[REF=, ABS_System_To_Test]], reusing the previously developed [[REF=, ABS_Actors]], and test the nodes together - practically for free.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# **Introduction - Test Case**
|
|
2
|
+
|
|
3
|
+
### **What is a Test Case?**
|
|
4
|
+
|
|
5
|
+
A Test Case is 100% data driven. The data to provide is as follows:
|
|
6
|
+
* [[REF=, ABS_Actors]]
|
|
7
|
+
* [[REF=, ABS_Addressing]]
|
|
8
|
+
* [[REF=, ABS_Test_Data]]
|
|
9
|
+
* [[REF=, ABS_Verification_Data]]
|
|
10
|
+
|
|
11
|
+
Even though a [[REF=, ABS_Test_Case]] is 100% data driven, you maintain 100% control of the code. The code is written as [[REF=, ABS_Actors]]. [[REF=, ABS_Actors]] determine what [[REF=, ABS_Test_Data]] and [[REF=, ABS_Verification_Data]] they need.
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### **Example**
|
|
15
|
+
|
|
16
|
+
```tc
|
|
17
|
+
|Actor |
|
|
18
|
+
|name |node|type|phase|execution|src |dst |srv |testData|verification|
|
|
19
|
+
|Actors-global.workshop.BrowserOrig | |orig| | |browser|proxy| | | |
|
|
20
|
+
|Actors-global.workshop.WebServerTerm| |term| | | | |server| | |
|
|
21
|
+
| | | | | | | | | | |
|
|
22
|
+
|
|
23
|
+
|TestDataTestCase |
|
|
24
|
+
|key|value |description|
|
|
25
|
+
|url|/image.png| |
|
|
26
|
+
| | | |
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
[[DIV={"id":"d624004c-5f2c-4c33-bf4d-d5f7dff9ddf4","style":{"float":"left"}}]]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div style="display: flex;flex-direction:column;float:right">
|
|
33
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Definition</h3>
|
|
34
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-definition.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
35
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Execution</h3>
|
|
36
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-execution.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
37
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Log</h3>
|
|
38
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-log.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
39
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Sequence Diagram</h3>
|
|
40
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-sequence-diagram.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
41
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Debug</h3>
|
|
42
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-debugging.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
43
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Specification</h3>
|
|
44
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-specification.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
45
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Analyze</h3>
|
|
46
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-analyze.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
### **Core Tool - Test Cases**
|
|
50
|
+
When working with a [[REF=, ABS_Test_Case]] there are several tabs with different functionality.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# **Introduction - Test Suite**
|
|
2
|
+
|
|
3
|
+
### **What is a Test Suite?**
|
|
4
|
+
|
|
5
|
+
A Test Suite is 100% data driven. The data to provide is:
|
|
6
|
+
* [[REF=, ABS_Test_Cases]]
|
|
7
|
+
* [[REF=, ABS_Test_Suites]]
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
|TestSuiteAbstraction |
|
|
11
|
+
|name |execution|iterationsTs|
|
|
12
|
+
|tc.ImageService.Image.ImagePng-1-Message-Flow | | |
|
|
13
|
+
|tc.ImageService.Image.ImagePng-2-Test-Data-Denmark| | |
|
|
14
|
+
|tc.ImageService.Image.ImagePng-2-Test-Data-Sweden | | |
|
|
15
|
+
| | | |
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
[[DIV={"id":"d624004c-5f2c-4c33-bf4d-d5f7dff9ddf4","style":{"float":"left"}}]]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
<div style="display: flex;flex-direction:column;float:right">
|
|
22
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Definitions</h3>
|
|
23
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-suite-definition.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
24
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Execution</h3>
|
|
25
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-suite-execution.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
26
|
+
<h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Log</h3>
|
|
27
|
+
<img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-suite-log.png" style="width: 233px; margin: 0px 16px 10px;">
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
### **Core Tool - Test Cases**
|
|
31
|
+
When working with a [[REF=, ABS_Test_Suite]] there are several tabs with different functionality.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# **2) Login with Puppeteer**
|
|
2
|
+
|
|
3
|
+
#### **Purpose**
|
|
4
|
+
Learn how to use a ***mock***, called [[REF=, ABS_Actor_Terminating]].
|
|
5
|
+
#### **Task**
|
|
6
|
+
**Description**:
|
|
7
|
+
1) Load the ***ActorDemo*** site and click the ***"goto login"*** button.
|
|
8
|
+
2) Type the ***username*** and the ***password***.
|
|
9
|
+
3) Click the "login button.
|
|
10
|
+
|
|
11
|
+
**Test type:** GUI test
|
|
12
|
+
|
|
13
|
+
#### **Analyze**
|
|
14
|
+
```node
|
|
15
|
+
Config(nodeWidth: 80, nodeHeight: 50, nodeWidthBetween: 75, nodeHeightBetween: 25, widthBias: 30, heightBias: 30, border: true, backgroundColor: default)
|
|
16
|
+
|
|
17
|
+
Nodes[Browser(; ; White), ActorDemo(; ; Honeydew), UserService(; ; White)]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
Browser => ActorDemo[http]: http
|
|
21
|
+
ActorDemo => UserService[http]: http
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
* Create an [[REF=, ABS_Actor_Originating]] which uses the ***puppeteer*** stack.
|
|
25
|
+
* Create an [[REF=, ABS_Actor_Terminating]] which uses the ***http*** stack.
|
|
26
|
+
|
|
27
|
+
#### **Sequence Diagram**
|
|
28
|
+
```seq
|
|
29
|
+
Config(nodeWidth: 200, nodeMessageHeight: 17, nodeEventHeight: 10, nodeCommentHeight: 26, widthBias: 60, heightBias: 30, lineNumbers: false, border: true, backgroundColor: EAFEEA)
|
|
30
|
+
|
|
31
|
+
Nodes[Browser, ActorDemo, UserService]
|
|
32
|
+
Browser page [puppeteer]:
|
|
33
|
+
Browser -o ActorDemo[http]:
|
|
34
|
+
Browser => ActorDemo[http]: GET http://actordemo:9045/start
|
|
35
|
+
ActorDemo => Browser[http]: 200 OK
|
|
36
|
+
Browser click [puppeteer]: id = from_start_to_login
|
|
37
|
+
Browser type [puppeteer]: id = actor_demo_username_input
|
|
38
|
+
Browser type [puppeteer]: id = actor_demo_password_input
|
|
39
|
+
Browser click [puppeteer]: id = actor_demo_login_button
|
|
40
|
+
Browser => ActorDemo[http]: GET http://actordemo:9045/login
|
|
41
|
+
ActorDemo => UserService[http]: GET
|
|
42
|
+
UserService => ActorDemo[http]: 200 OK
|
|
43
|
+
ActorDemo => Browser[http]: 200 OK
|
|
44
|
+
Browser -x ActorDemo[http]:
|
|
45
|
+
```
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# **2) Mock with HTTP**
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
## ***Goto the Image AI page***
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
#### **Purpose**
|
|
8
|
+
Learn how to ***mock*** with the [[REF=, STACK_HTTP]] stack. ***Mock*** with a [[REF=, ABS_Terminating_Actor]].
|
|
9
|
+
Learn how to use ***[[REF=, ABS_Content]]*** with the [[REF=, API_Actor_Content]].
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
#### **Task**
|
|
13
|
+
1) Mock ***ImageService*** and reply with ***Justin***.
|
|
14
|
+
2) Load the ***ActorDemo*** site and click the **"Goto:** Image AI**"** button.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
#### **Analyze**
|
|
18
|
+
```node
|
|
19
|
+
Config(nodeWidth: 80, nodeHeight: 50, nodeWidthBetween: 75, nodeHeightBetween: 25, widthBias: 30, heightBias: 30, border: true, backgroundColor: default)
|
|
20
|
+
|
|
21
|
+
Nodes[Browser(; ; White), ActorDemo(; ; Honeydew), ImageService(; ; White)]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
Browser => ActorDemo[http]: http
|
|
25
|
+
ActorDemo => ImageService[http]: http
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The ***Image AI*** page uses the backend node ImageService.
|
|
29
|
+
* [[REF=, STACK_HTTP]] is the protocol between the ***Browser*** and ***ActorDemo*** so we will use the [[REF=, STACK_PUPPETEER]] stack to test this page.
|
|
30
|
+
* [[REF=, STACK_HTTP]] is the protocol between the ***ActorDemo*** and ***ImageService*** so we will use the [[REF=, STACK_HTTP]] stack to ***mock*** the ***ImageService***.
|
|
31
|
+
|
|
32
|
+
* The ***ImageService*** has two **REST API** methods.
|
|
33
|
+
* 1) **AiGetImages**:
|
|
34
|
+
1.1) **protocol**: HTTP
|
|
35
|
+
1.2) **Method**: GET
|
|
36
|
+
1.3) **url**: api/v1/image/get-images
|
|
37
|
+
1.4) **returns**: [[REF=, MDN_JSON]] - **content-type**: application/json
|
|
38
|
+
* [[REF=, MDN_objects]]: *Array of objects with image & AI data*
|
|
39
|
+
* **name**: [[REF=, MDN_string]]: *Name of the image*
|
|
40
|
+
* **mime**: [[REF=, MDN_string]]: *Image mime type*
|
|
41
|
+
* **aix**: [[REF=, MDN_strings]]: *Array of AI transformations*
|
|
42
|
+
* 2) **AiGetImage**
|
|
43
|
+
2.1) **protocol**: HTTP
|
|
44
|
+
2.2) **Method**: GET
|
|
45
|
+
2.3) **url**: api/v1/image/get-image/[**name**]
|
|
46
|
+
2.3.1) **name**: *the name of the AI instance.*
|
|
47
|
+
1.4) **returns**: Image - **content-type**: image/[mime]
|
|
48
|
+
|
|
49
|
+
```seq
|
|
50
|
+
Config(nodeWidth: 280, nodeMessageHeight: 17, nodeEventHeight: 10, nodeCommentHeight: 26, widthBias: 60, heightBias: 30, lineNumbers: false, border: true, backgroundColor: #EAFEEA)
|
|
51
|
+
|
|
52
|
+
Nodes[Browser, ActorDemo, ImageService]
|
|
53
|
+
ActorDemo -o ImageService[http]:
|
|
54
|
+
Browser browser [puppeteer]: srcActorDemo
|
|
55
|
+
Browser page [puppeteer]: page1
|
|
56
|
+
Browser -o ActorDemo[http]:
|
|
57
|
+
Browser => ActorDemo[http]: GET http://localhost:9045/start
|
|
58
|
+
ActorDemo => Browser[http]: 200 OK
|
|
59
|
+
Browser /**/ ActorDemo[http]: Loading site (js, css, images, REST API, ... .)
|
|
60
|
+
Browser click [puppeteer]: id = #from_start_to_image_ai
|
|
61
|
+
Browser => ActorDemo[http]: POST http://actordemo:9045/abs-data/AiGetImages
|
|
62
|
+
ActorDemo => ImageService[http]: GET api/v1/image/get-images
|
|
63
|
+
ImageService => ActorDemo[http]: 200 OK
|
|
64
|
+
ActorDemo => Browser[http]: 200 OK
|
|
65
|
+
Browser => ActorDemo[http]: POST http://actordemo:9045/abs-data/AiGetImage
|
|
66
|
+
ActorDemo => ImageService[http]: GET api/v1/image/get-image/Justin
|
|
67
|
+
ImageService => ActorDemo[http]: 200 OK
|
|
68
|
+
ActorDemo => Browser[http]: 200 OK
|
|
69
|
+
ImageService -x ActorDemo[http]:
|
|
70
|
+
Browser -x ActorDemo[http]:
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
#### **Conclusion**
|
|
75
|
+
1) Create an [[REF=, ABS_Originating_Actor]] with the [[REF=, STACK_PUPPETEER]] stack.
|
|
76
|
+
1.1 **Click** the button with ***selector***: #from_start_to_image_ai
|
|
77
|
+
2) Create a [[REF=, ABS_Terminating_Actor]] with the [[REF=, STACK_HTTP]] stack.
|
|
78
|
+
2.1 Answer the [[REF=, STACK_HTTP]] REST API ***request*** AiGetImages. Answer with one image: [{name:'Justin',mime:'images/jpeg',ais:['background', 'shirt', 'sunglasses']}]
|
|
79
|
+
2.2 Answer the [[REF=, STACK_HTTP]] REST API ***request*** AiGetImage/Justin. Answer with the image requested.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
#### **Solution**
|
|
83
|
+
+ Test Case: [GotoImageAI](/../test-cases/ActorDemo/ImageIA/GotoImageAI)
|