@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
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# **Actor Proxy**
|
|
2
|
+
|
|
3
|
+
## **Description**
|
|
4
|
+
The [[REF=, ABS_Actor_Proxy]] does have client and server capabilities. It means that it can use both [[REF=, ABS_Stack_Client_Connection]]s and [[REF=, ABS_Stack_Server_Connection]]s which can can setup connections and communicate with servers and listen for connections and communicate with clients. The [[REF=, ABS_Actor_Proxy]] can be used in all [[REF=, ABS_Test_Case_Phases]].
|
|
5
|
+
|
|
6
|
+
## **States**
|
|
7
|
+
The [[REF=, ABS_Actor_Proxy]] supports the following [[REF=, ABS_Actor_State_Execution]]:
|
|
8
|
+
* ***data**
|
|
9
|
+
* ***initServer**
|
|
10
|
+
* ***initClient**
|
|
11
|
+
* ***run**
|
|
12
|
+
* ***exit**
|
|
13
|
+
|
|
14
|
+
```state
|
|
15
|
+
Title: ActorProxy
|
|
16
|
+
Config(width: 400, height: 200, widthBias: 25, heightBias: 25)
|
|
17
|
+
|
|
18
|
+
States[data, initServer, initClient, run]
|
|
19
|
+
States[, done, exit]
|
|
20
|
+
|
|
21
|
+
data -> initServer[success]: success
|
|
22
|
+
data -> done[failure]: error, failure, interrupt
|
|
23
|
+
initServer -> initClient[success]: success
|
|
24
|
+
initServer -> done[failure]: error, failure, interrupt
|
|
25
|
+
initClient -> run[success]: success
|
|
26
|
+
initClient -> done[failure]: error, failure, interrupt
|
|
27
|
+
run -> exit[normal]: always
|
|
28
|
+
exit -> done[normal]: always
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## **Example 1 - Actor Proxy Wizard**
|
|
32
|
+
Here is the code produced by the [[REF=, ABS_Actor_Proxy]] Wizard.
|
|
33
|
+
```javascript
|
|
34
|
+
|
|
35
|
+
const ActorApi = require('actor-api');
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class NotImplementedProxy extends ActorApi.ActorProxy {
|
|
39
|
+
constructor() {
|
|
40
|
+
super();
|
|
41
|
+
this.clientConnection = this.create();
|
|
42
|
+
this.serverConnection = this.create();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
*data() {
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
*initServer() {
|
|
49
|
+
this.createServer('[stack]', this.serverConnection);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
*initClient() {
|
|
53
|
+
this.createConnection('[stack]', this.clientConnection);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
*run() {
|
|
57
|
+
this.serverConnection.accept();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
*exit() {
|
|
61
|
+
this.closeConnection(this.serverConnection);
|
|
62
|
+
this.closeConnection(this.clientConnection);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
module.exports = NotImplementedProxy;
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## **Example 2 - static http**
|
|
71
|
+
This is a very simple example where the [[REF=, ABS_Actor]] listens for incoming connections and connects to a web server. When it gets an HTTP GET it proxies it to the outgoing connection. When it get an response it proxies it to the incoming connection.
|
|
72
|
+
|
|
73
|
+
```javascript
|
|
74
|
+
|
|
75
|
+
const ActorApi = require('actor-api');
|
|
76
|
+
const HttpApi = require('http-stack-api');
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class StaticHttpActorProxy extends ActorApi.ActorProxy {
|
|
80
|
+
constructor() {
|
|
81
|
+
super();
|
|
82
|
+
this.clientConnection = this.create();
|
|
83
|
+
this.serverConnection = this.create();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
*data() {
|
|
87
|
+
this.requistUri = this.getTestDataString('Request-URI', '/demo');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
*initServer() {
|
|
91
|
+
this.createServer('http', this.serverConnection);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
*initClient() {
|
|
95
|
+
this.createConnection('http', this.clientConnection);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
*run() {
|
|
99
|
+
this.serverConnection .accept();
|
|
100
|
+
|
|
101
|
+
const request = this.serverConnection .receive();
|
|
102
|
+
this.clientConnection.send(request );
|
|
103
|
+
|
|
104
|
+
const response = this.clientConnection.receive();
|
|
105
|
+
VERIFY_VALUE(HttpApi.StatusCode.OK, response.statusCode, ' HTTP response line status code:');
|
|
106
|
+
VERIFY_CONTENT_OPTIONAL('content-name', response.getHeaderNumber(HttpApi.Header.CONTENT_LENGTH), response.getBody());
|
|
107
|
+
|
|
108
|
+
this.serverConnection.send(response ));
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
*exit() {
|
|
112
|
+
this.closeConnection(this.serverConnection);
|
|
113
|
+
this.closeConnection(this.clientConnection);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
module.exports = StaticHttpActorProxy;
|
|
118
|
+
|
|
119
|
+
```
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# **Actor Terminating**
|
|
2
|
+
|
|
3
|
+
## **Description**
|
|
4
|
+
The [[REF=, ABS_Actor_Terminating]] does have server capabilities. It means that it can use [[REF=, ABS_Stack_Server_Connection]]s which can listen for connections and communicate with clients. The [[REF=, ABS_Actor_Terminating]] can be used in all [[REF=, ABS_Test_Case_Phases]].
|
|
5
|
+
|
|
6
|
+
## **States**
|
|
7
|
+
The [[REF=, ABS_Actor_Terminating]] supports the following [[REF=, ABS_Actor_State_Execution]]:
|
|
8
|
+
* ***data**
|
|
9
|
+
* ***initServer**
|
|
10
|
+
* ***run**
|
|
11
|
+
* ***exit**
|
|
12
|
+
|
|
13
|
+
```state
|
|
14
|
+
Title: ActorTerminating
|
|
15
|
+
Config(width: 400, height: 200, widthBias: 25, heightBias: 25)
|
|
16
|
+
|
|
17
|
+
States[data, initServer, run]
|
|
18
|
+
States[, done, exit]
|
|
19
|
+
|
|
20
|
+
data -> initServer[success]: success
|
|
21
|
+
data -> done[failure]: error, failure, interrupt
|
|
22
|
+
initServer -> run[success]: success
|
|
23
|
+
initServer -> done[failure]: error, failure, interrupt
|
|
24
|
+
run -> exit[normal]: always
|
|
25
|
+
exit -> done[normal]: always
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## **Example 1 - Actor Terminating Wizard**
|
|
29
|
+
Here is the code produced by the [[REF=, ABS_Actor_Terminating]] Wizard.
|
|
30
|
+
|
|
31
|
+
```javascript
|
|
32
|
+
|
|
33
|
+
const ActorApi = require('actor-api');
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class NotImplementedTerm extends ActorApi.ActorTerminating {
|
|
37
|
+
constructor() {
|
|
38
|
+
super();
|
|
39
|
+
this.connection = this.create();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
*data() {
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
*initServer() {
|
|
46
|
+
this.createServer('[stack]', this.connection);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
*run() {
|
|
50
|
+
this.connection.accept();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
*exit() {
|
|
54
|
+
this.closeConnection(this.connection);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
module.exports = NotImplementedTerm;
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## **Example 2 - static http**
|
|
63
|
+
This is a very simple example where the [[REF=, ABS_Actor]] listens for incoming connections. It then receives an HTTP GET and sends a response with the status code 200.
|
|
64
|
+
|
|
65
|
+
```javascript
|
|
66
|
+
|
|
67
|
+
const ActorApi = require('actor-api');
|
|
68
|
+
const HttpApi = require('http-stack-api');
|
|
69
|
+
const HttpGet200OkResponse = require('./msg/HttpGet200OkResponse');
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class StaticHttpActorTerm extends ActorApi.ActorTerminating {
|
|
73
|
+
constructor() {
|
|
74
|
+
super();
|
|
75
|
+
this.httpConnection = this.create();
|
|
76
|
+
this.content = null;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
*data() {
|
|
80
|
+
this.content = this.getContent('content-name');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
*initServer() {
|
|
84
|
+
this.createServer('http', this.httpConnection);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
*run() {
|
|
88
|
+
this.httpConnection.accept();
|
|
89
|
+
|
|
90
|
+
const request = this.httpConnection.receive();
|
|
91
|
+
this.httpConnection.send(new HttpGet200OkResponse(this.content));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
*exit() {
|
|
95
|
+
this.closeConnection(this.httpConnection);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
module.exports = StaticHttpActorTerm;
|
|
100
|
+
|
|
101
|
+
```
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# **Actor Abstraction**
|
|
2
|
+
|
|
3
|
+
## **Description**
|
|
4
|
+
An [[REF=, ABS_Actor]] is the fundamental building block of ActorJs. [[REF=, ABS_Actor]]s are a small pieces of code that are executed in parallel or serial with other [[REF=, ABS_Actor]]s in a [[REF=, ABS_Test_Case]]. They acts instead of simulators, mocked up processes or real systems. The Actors will be reused in a lot of Test Cases. ActorJs starts, stops and interrupts [[REF=, ABS_Actor]]s depending on the data and the outcome of the [[REF=, ABS_Test_Case]].
|
|
5
|
+
|
|
6
|
+
The [[REF=, ABS_Actor]] is 100% code, which gives the test developer full control. For maximal reuse and optimal maintenance, the [[REF=, ABS_Actor]]s has its own:
|
|
7
|
+
* Logic
|
|
8
|
+
* Flow
|
|
9
|
+
|
|
10
|
+
ActorJs will provide the [[REF=, ABS_Actor]] with:
|
|
11
|
+
* [[REF=Addresses, ABS_Addressing]]
|
|
12
|
+
* [[REF=, ABS_Test_Data]]
|
|
13
|
+
* [[REF=, ABS_Verification_Data]]
|
|
14
|
+
|
|
15
|
+
A [[REF=, ABS_Test_Case]] contains [[REF=, ABS_Actor]]s to isolate the [[REF=, ABS_System_Under_Test]]. An [[REF=, ABS_Actor]] can be reused over and over again in different [[REF=, ABS_Test_Case]]s. It can change its behavior depending on [[REF=, ABS_Test_Data]].
|
|
16
|
+
|
|
17
|
+
## **Actor Types**
|
|
18
|
+
Thera are five different types of [[REF=, ABS_Actor]]s with different characteristics.
|
|
19
|
+
* [[REF=, ABS_Actor_Originating]]: which has client capabilities.
|
|
20
|
+
* [[REF=, ABS_Actor_Terminating]]: which has server capabilities.
|
|
21
|
+
* [[REF=, ABS_Actor_Proxy]]: which has client and server capabilities.
|
|
22
|
+
* [[REF=, ABS_Actor_Local]]: which has not either client or server capabilities.
|
|
23
|
+
* [[REF=, ABS_Actor_Condition]]: which has client capabilities. But it is executed in both the [[REF=, ABS_Test_Case_Phase_Precondition]] and the [[REF=, ABS_Test_Case_Phase_Postcondition]].
|
|
24
|
+
|
|
25
|
+
[[EMBED=abstractions/actor/execution-states]]
|
|
26
|
+
|
|
27
|
+
## **Example**
|
|
28
|
+
We have a [[REF=, ABS_System_To_Test]]. It contains a Browser, a Proxy and a web-server.
|
|
29
|
+
```node
|
|
30
|
+
Config(nodeWidth: 70, nodeHeight: 70, nodeWidthBetween: 25, nodeHeightBetween: 50, widthBias: 30, heightBias: 30, border: true, backgroundColor: default)
|
|
31
|
+
|
|
32
|
+
Nodes[Browser, , Proxy, , web-server]
|
|
33
|
+
|
|
34
|
+
Groups[STT(0; 5; 0; 1)]
|
|
35
|
+
|
|
36
|
+
Browser => Proxy[http]: http
|
|
37
|
+
Proxy => web-server[http]: http
|
|
38
|
+
```
|
|
39
|
+
If we want to test the Proxy we'll define it as the [[REF=, ABS_System_Under_Test]]. Then we have to simulate the Browser and the web server with [[REF=, ABS_Actor]]s.
|
|
40
|
+
```node
|
|
41
|
+
Config(nodeWidth: 70, nodeHeight: 70, nodeWidthBetween: 25, nodeHeightBetween: 50, widthBias: 30, heightBias: 30, border: true, backgroundColor: default)
|
|
42
|
+
|
|
43
|
+
Nodes[Browser, , Proxy, , web-server]
|
|
44
|
+
|
|
45
|
+
Groups[Actor Orig(0; 1; 0; 1), SUT(2; 3; 0; 1), Actor Term(4; 5; 0; 1)]
|
|
46
|
+
|
|
47
|
+
Browser => Proxy[http]: http
|
|
48
|
+
Proxy => web-server[http]: http
|
|
49
|
+
```
|
|
50
|
+
We want to test when the Browser gets an image from the web-server via the Proxy. The Use Case looks like this:
|
|
51
|
+
```seq
|
|
52
|
+
Config(nodeWidth: 150, nodeMessageHeight: 17, nodeEventHeight: 10, nodeCommentHeight: 26, widthBias: 30, heightBias: 30, lineNumbers: false, border: true, backgroundColor: default)
|
|
53
|
+
|
|
54
|
+
Nodes[Browser, Proxy, web-server]
|
|
55
|
+
Browser => Proxy[http]: Get /image.png
|
|
56
|
+
Proxy => web-server[http]: Get /image.png
|
|
57
|
+
web-server => Proxy[http]: 200 OK
|
|
58
|
+
Proxy => Browser[http]: 200 OK
|
|
59
|
+
```
|
|
60
|
+
To implement this Use Case we need:
|
|
61
|
+
* a HTTP Stack
|
|
62
|
+
* a HTTP get image request message
|
|
63
|
+
* a HTTP get image response message
|
|
64
|
+
|
|
65
|
+
When having them in place it is just to implement the [[REF=, ABS_Actor]]s.
|
|
66
|
+
1) The Browser [[REF=, ABS_Actor]] sends a request and receives a response.
|
|
67
|
+
2) The web-server [[REF=, ABS_Actor]] receives a request and sends a response.
|
|
68
|
+
|
|
69
|
+
## **Implementation**
|
|
70
|
+
Minimal code is needed to implement simple [[REF=, ABS_Actor]]s. We recommend that [[REF=, ABS_Actor]]s are kept simple and just implements the part of the flow in the Use Case. But of course an [[REF=, ABS_Actor]] can implement a whole simulator but then nothing is won compared to use of simulators.
|
|
71
|
+
#### **Browser**
|
|
72
|
+
```javascript
|
|
73
|
+
|
|
74
|
+
*run() {
|
|
75
|
+
this.httpConnection.send(new HttpMsgGetRequest(this.requistUri));
|
|
76
|
+
const response = this.httpConnection.receive();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
#### **web-server**
|
|
81
|
+
```javascript
|
|
82
|
+
|
|
83
|
+
*run() {
|
|
84
|
+
this.httpConnection.accept();
|
|
85
|
+
const request = this.httpConnection.receive();
|
|
86
|
+
this.httpConnection.send(new HttpGet200OkResponse(this.content));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## **Execution States**
|
|
2
|
+
The methods to override when implementing an [[REF=, ABS_Actor]] are called execution states. It is because an [[REF=, ABS_Actor]] is a small state-machine and a method with the name of the new state, execution state, will be called when the [[REF=, ABS_Actor]] state changes:
|
|
3
|
+
|
|
4
|
+
### **The execution states**
|
|
5
|
+
* ***data**: in this state all [[REF=, ABS_Test_Data]] must be read. This state will be executed first for all [[REF=, ABS_Actor]]s independent of the execution parameter in the Actor table.
|
|
6
|
+
* ***initServer**: in this state the [[REF=, ABS_Actor]]s with server capabilities can listen on incoming connections from clients. If it is done here ActorJs makes sure that the [[REF=, ABS_Actor]]s with client capabilities which is started at the same time will be called after the servers have started.
|
|
7
|
+
* ***initClient**: in this state the [[REF=, ABS_Actor]]s with client capabilities can connect to servers. If it is done here ActorJs makes sure that the [[REF=, ABS_Actor]]s with server capabilities which is started at the same time will be called before.
|
|
8
|
+
* ***run**: this state is the state where the actual test is suppost to be performed.
|
|
9
|
+
* ***exit**: in this state the client and servers that are not already closed must be closed.
|
|
10
|
+
|
|
11
|
+
### **Actor Condition execution states**
|
|
12
|
+
The [[REF=, ABS_Actor_Condition]] is are a little bit special though it is executed in both the [[REF=, ABS_Test_Case_Phase_Precondition]] and in the [[REF=, ABS_Test_Case_Phase_Postcondition]]. There task is change the configuration of the [[REF=, ABS_System_Under_Test]] and restore the configuration afterwards.
|
|
13
|
+
|
|
14
|
+
Another special case is that if an [[REF=, ABS_Actor_Condition]] have succeeded in the [[REF=, ABS_Test_Case_Phase_Precondition]] the [[REF=, ABS_Test_Case_Phase_Postcondition]] will always be executed even when we have a failure and other [[REF=, ABS_Actor]]s are interrupted. This is because we still have to restore the [[REF=, ABS_System_Under_Test]].
|
|
15
|
+
* ***initClientPre**: same as initClient but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Precondition]].
|
|
16
|
+
* ***runPre**: same as run but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Precondition]].
|
|
17
|
+
* ***exitPre**: same as exit but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Postcondition]].
|
|
18
|
+
* ***initClientPost**: same as initClient but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Precondition]].
|
|
19
|
+
* ***runPost**: same as run but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Postcondition]].
|
|
20
|
+
* ***exitPost**: same as exit but it will always be executed in the [[REF=, ABS_Test_Case_Phase_Postcondition]].
|
|
21
|
+
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# **Stack Message**
|
|
2
|
+
|
|
3
|
+
## **Description**
|
|
4
|
+
The [[REF=, ABS_Stack_Message]] object contains all data sent or received with Stack. It is just a [[REF=, MDN_object]] decided by the Stack owner. The [[REF=, ABS_Stack_Encoder]] and the [[REF=, ABS_Stack_Decoder]] are depending on the format of the [[REF=, ABS_Stack_Message]].
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# **Stack Abstraction**
|
|
2
|
+
## **Description**
|
|
3
|
+
An implementation of a protocol is called a [[REF=, ABS_Stack]]. A [[REF=, ABS_Stack]] contains an [[REF=, ABS_Stack_Encoder]] and a [[REF=, ABS_Stack_Decoder]]. When testing we do not want the [[REF=, ABS_Stack]]s to timeout so no timers are implemented in the [[REF=, ABS_Stack]]s. When testing timeouts the implementation will be done in an [Actor](actors) to be able to test all scenarios without having to update a [[REF=, ABS_Stack]].
|
|
4
|
+
|
|
5
|
+
## **Objects**
|
|
6
|
+
There are six objects needed in most of the stacks to be able to implement them.
|
|
7
|
+
* [ConnectionClient](client-connection)
|
|
8
|
+
* [ConnectionServer](server-connection)
|
|
9
|
+
* [Encoder](encoder)
|
|
10
|
+
* [Decoder](decoder)
|
|
11
|
+
* [Message](message)
|
|
12
|
+
* [Worker](worker)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
## **Test Case Phases**
|
|
2
|
+
A [[REF=, ABS_Test_Case]] is divided to three phases.
|
|
3
|
+
|
|
4
|
+
* **precondition**: this phase is used to prepare the [[REF=, ABS_System_Under_Test]], if it is needed for the [[REF=, ABS_Test_Case]]. There can be a lot of things that it might to do before running the actual test:
|
|
5
|
+
* Change configuration on the [System Under Test](system-under-tests)
|
|
6
|
+
* Add, remove or change files on the [System Under Test](system-under-tests)
|
|
7
|
+
* Change data in the Database of the [System Under Test](system-under-tests)
|
|
8
|
+
* **execution**: in this phase the actual test of the [[REF=, ABS_System_Under_Test]] is performed.
|
|
9
|
+
* **postcondition**: this phase is used to restore the configuration of the [[REF=, ABS_System_Under_Test]] to the [[REF=, ABS_System_Configuration_Floor]], if it is changed in the precondition phase. Thas means that it must always be possible to run what ever [[REF=, ABS_Test_Case]] independent of which [[REF=, ABS_Test_Case]]s have been running before it.
|
|
10
|
+
|
|
11
|
+
```seq
|
|
12
|
+
Nodes[pre, post, orig, SUT, term]
|
|
13
|
+
pre => SUT[unknown]: config
|
|
14
|
+
orig => SUT[http]: Get /image
|
|
15
|
+
SUT => term[http]: Get /image
|
|
16
|
+
term => SUT[http]: 200 Ok
|
|
17
|
+
SUT => orig[http]: 200 Ok
|
|
18
|
+
post => SUT[unknown]: restore config
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
[[ANCHOR={"id":"execution-phase-postcondition","visible":true}]]
|
|
22
|
+
### **Precondition Phase**
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
[[ANCHOR={"id":"execution-phase-execution","visible":true}]]
|
|
26
|
+
### **Execution Phase**
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
[[ANCHOR={"id":"execution-phase-precondition","visible":true}]]
|
|
30
|
+
### **Postcondition Phase**
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
These are the possible execution results from an [[REF=, ABS_Actor_State]]:
|
|
2
|
+
|
|
3
|
+
***Not Executed Result***
|
|
4
|
+
* [[RESULT=none]] **none** value: **0**: Not executed so there are no result.
|
|
5
|
+
|
|
6
|
+
***Success Results***
|
|
7
|
+
* [[RESULT=n/a]] **n/a** value: **1**: Not Applicable, this [[REF=, ABS_Actor_State]] is not supported by this type of [[REF=, ABS_Actor]].
|
|
8
|
+
* [[RESULT=n_impl]] **n_impl** value: **2**: Not Implemented, the [[REF=, ABS_Actor]] has not implemented this [[REF=, ABS_Actor_State]].
|
|
9
|
+
* [[RESULT=success]] **success** value: **3**: Success, the result of the [[REF=, ABS_Actor_State]] is Success.
|
|
10
|
+
|
|
11
|
+
***Failure Results***
|
|
12
|
+
* [[RESULT=n_exec]] **n_exec** value: **4**: Not Executed, the [[REF=, ABS_Actor_State]] is not executed because some other [[REF=, ABS_Actor_State]] has returned a **Failure Result**.
|
|
13
|
+
* [[RESULT=interrupt]] **interrupt** value: **5**: Interrupted, the [[REF=, ABS_Actor_State]] has been interrupted because some other [[REF=, ABS_Actor_State]] has returned a **Failure Result**.
|
|
14
|
+
* [[RESULT=error]] **error** value: **6**: Error, ActorJs has catched an exception in the [[REF=, ABS_Actor_State]].
|
|
15
|
+
* [[RESULT=failure]] **failure** value: **7**: Failure, A verification have failed in the [[REF=, ABS_Actor_State]].
|
|
16
|
+
* [[RESULT=timeout]] **timeout** value: **8**: Timeout, the [[REF=, ABS_Actor_State]] has not completed its task in time.
|
|
17
|
+
|
|
18
|
+
***Reflection Results***
|
|
19
|
+
* ([[RESULT=reflection]] **reflection** value: **9**): If the [[REF=, ABS_Actor]] can not be created there will be no [[REF=, ABS_Actor_State]] result. Then the [[REF=, ABS_Actor]] will return **reflection** as its result.
|
|
20
|
+
|
|
21
|
+
An [[REF=, ABS_Actor]] will get the result with the highest value returned from an one of its [[REF=, ABS_Actor_State]]s.
|
|
22
|
+
A [[REF=, ABS_Test_Case]] will get the result with the highest value returned from one of its [[REF=, ABS_Actor]]s.
|
|
23
|
+
A [[REF=, ABS_Test_Suite]] will get the result with the highest value returned from one of its [[REF=, ABS_Test_Case]]s.
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# **Test Case Abstraction**
|
|
2
|
+
|
|
3
|
+
[[ANCHOR={"id":"6cf956b9-7c22-4271-bbc3-f47f7ddcc1d5","visible":true}]]
|
|
4
|
+
[[NOTE={"guid":"dad57cec-1318-4676-8955-75d1b1d4926a"}]]
|
|
5
|
+
## **Description**
|
|
6
|
+
The general definition of what a Test Case is can be found at [[REF=, WIKI_Test_Case]].
|
|
7
|
+
|
|
8
|
+
An ActorJs [[REF=, ABS_Test_Case]] is 100% data driven. The data to provide is:
|
|
9
|
+
* [[REF=, ABS_Actor]]s
|
|
10
|
+
* [[REF=, ABS_Test_Data]]
|
|
11
|
+
* [[REF=, ABS_Verification_Data]]
|
|
12
|
+
|
|
13
|
+
Even though a [[REF=, ABS_Test_Case]] is 100% data driven you still have 100% control of the code. The code is written as [[REF=, ABS_Actor]]s. It is the [[REF=, ABS_Actor]]s who decides what [[REF=, ABS_Test_Data]] and [[REF=, ABS_Verification_Data]] they need.
|
|
14
|
+
|
|
15
|
+
[[EMBED=abstractions/test-case/phases]]
|
|
16
|
+
|
|
17
|
+
[[ANCHOR={"id":"bfee328d-0855-4cfd-b13c-d785185f858b","visible":true}]]
|
|
18
|
+
[[NOTE={"guid":"b70b4de2-daf0-4407-8321-aba957cbb98e"}]]
|
|
19
|
+
## **Example**
|
|
20
|
+
A [[REF=, ABS_System_Under_Test]], **Image Service**, delivers images to clients and converts the format of the images if needed.
|
|
21
|
+
|
|
22
|
+
```node
|
|
23
|
+
Config(nodeWidth: 90, nodeHeight: 35, nodeWidthBetween: 65, nodeHeightBetween: 25, widthBias: 30, heightBias: 30, border: true, backgroundColor: default)
|
|
24
|
+
|
|
25
|
+
Nodes[, , Image Store]
|
|
26
|
+
Nodes[Client, Image Service]
|
|
27
|
+
Nodes[, , Image Converter]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
Client => Image Service[http]: http
|
|
31
|
+
Image Service => Image Store[http]: http
|
|
32
|
+
Image Service => Image Converter[icap]: icap
|
|
33
|
+
```
|
|
34
|
+
We can make a sequence diagram with the different parts of the example.
|
|
35
|
+
```seq
|
|
36
|
+
Title: Getting and converting an image
|
|
37
|
+
Config(nodeWidth: 150, nodeMessageHeight: 17, nodeEventHeight: 10, nodeCommentHeight: 26, widthBias: 30, heightBias: 30, lineNumbers: false, border: true, backgroundColor: default)
|
|
38
|
+
|
|
39
|
+
Nodes[ClientOrig, SUT, ImageConverterTerm, ImageStoreTerm]
|
|
40
|
+
ClientOrig => SUT[http]: GET /i.jpg
|
|
41
|
+
SUT => ImageStoreTerm[http]: Get /i.jpg
|
|
42
|
+
ImageStoreTerm => SUT[http]: 200 OK (gif)
|
|
43
|
+
SUT => ImageConverterTerm[icap]: respmod(gif)
|
|
44
|
+
ImageConverterTerm => SUT[icap]: 200 OK (jpg)
|
|
45
|
+
SUT => ClientOrig[http]: 200 OK
|
|
46
|
+
```
|
|
47
|
+
___
|
|
48
|
+
[[ANCHOR={"id":"118c6304-7a0d-43c8-af26-f05133156a1a","visible":true}]]
|
|
49
|
+
[[NOTE={"guid":"cdebf447-4c25-4840-b02a-b3045ddd89c1"}]]
|
|
50
|
+
### **Breaking Down**
|
|
51
|
+
* The Image Service is the SUT that we will Test.
|
|
52
|
+
* We know have to simulate the Client, the Image Store and the Image Converter.
|
|
53
|
+
|
|
54
|
+
Without ActorJS this is `a very complex task`. We need three simulators or a combination of simulators and real systems. But with `real systems negative testing and other scenarios are almost impossible to perform`.
|
|
55
|
+
|
|
56
|
+
[[IE=With ActorJs this is very simple]].
|
|
57
|
+
|
|
58
|
+
___
|
|
59
|
+
[[ANCHOR={"id":"df5cafb7-c0b6-49d7-aa68-fd235b33db6d","visible":true}]]
|
|
60
|
+
[[NOTE={"guid":"cb5be92c-c873-4e93-94b3-9159b3e7bd55"}]]
|
|
61
|
+
### **Creating the Actors**
|
|
62
|
+
We will create three [[REF=, ABS_Actor]]s:
|
|
63
|
+
* ***ClientOrig***: sends an http request and receive an http response.
|
|
64
|
+
* ***ImageStoreTerm***: receives an http request and sends http response.
|
|
65
|
+
* ***ImageConverterTerm***: receives an icap request and sends icap response.
|
|
66
|
+
|
|
67
|
+
Usually the [[REF=, ABS_Actor]]s below contains little bit more code. To make them reusable and maintainable [[REF=, ABS_Test_Data]] and [[REF=, ABS_Verification_Data]] is used. We just wants to [[IE=explain how extremely simple]] it is to get the message flow to work. The [[REF=, ABS_Actor]]s are created in the [[REF=, TOOL_Actor_Editor]].
|
|
68
|
+
[[ANCHOR={"id":"ace1dcf8-03cd-4757-b56e-b02363d6fccf","visible":true}]]
|
|
69
|
+
[[NOTE={"guid":"c314cb2f-ff28-406b-ab19-1d5a2af85d8f"}]]
|
|
70
|
+
### **ClientOrig**
|
|
71
|
+
```javascript
|
|
72
|
+
|
|
73
|
+
const ActorApi = require('actor-api');
|
|
74
|
+
const HttpMsgGetImage= require('./msg/HttpMsgGetImage');
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class ClientOrig extends ActorApi.ActorOriginating {
|
|
78
|
+
constructor() {
|
|
79
|
+
super();
|
|
80
|
+
this.httpConnection = this.create();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
*initClient() {
|
|
84
|
+
this.createConnection('http', this.httpConnection);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
*run() {
|
|
88
|
+
this.httpConnection.send(new HttpMsgGetImage());
|
|
89
|
+
const response = this.httpConnection.receive();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
*exit() {
|
|
93
|
+
this.closeConnection(this.httpConnection);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
[[ANCHOR={"id":"3d257f98-db9e-4ee6-9876-f639d82878a5","visible":true}]]
|
|
98
|
+
[[NOTE={"guid":"9107d3ba-ce82-448e-b34d-95453d389d41"}]]
|
|
99
|
+
### **ImageStoreTerm**
|
|
100
|
+
```javascript
|
|
101
|
+
|
|
102
|
+
const ActorApi = require('actor-api');
|
|
103
|
+
const HttpGet200OkResponse = require('./msg/HttpGet200OkResponse');
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class ImageStoreTerm extends ActorApi.ActorTerminating {
|
|
107
|
+
constructor() {
|
|
108
|
+
super();
|
|
109
|
+
this.httpConnection = this.create();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
*initServer() {
|
|
113
|
+
this.createServer('http', this.httpConnection);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
*run() {
|
|
117
|
+
this.httpConnection.accept();
|
|
118
|
+
const request = this.httpConnection.receive();
|
|
119
|
+
this.httpConnection.send(new HttpGet200OkResponse());
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
*exit() {
|
|
123
|
+
this.closeConnection(this.httpConnection);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
[[ANCHOR={"id":"1c9df4ae-c852-4239-b780-259d804fb519","visible":true}]]
|
|
128
|
+
[[NOTE={"guid":"b7190304-6c33-4884-8652-ba6a25f2cb93"}]]
|
|
129
|
+
### **ImageConverterTerm**
|
|
130
|
+
```javascript
|
|
131
|
+
|
|
132
|
+
const ActorApi = require('actor-api');
|
|
133
|
+
const IcapGet200OkResponse= require('./msg/IcapGet200OkResponse');
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
class ImageConverterTerm extends ActorApi.ActorTerminating {
|
|
137
|
+
constructor() {
|
|
138
|
+
super();
|
|
139
|
+
this.icapConnection = this.create();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
*initServer() {
|
|
143
|
+
this.createServer('icap', this.icapConnection);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
*run() {
|
|
147
|
+
this.icapConnection.accept();
|
|
148
|
+
const request = this.icapConnection.receive();
|
|
149
|
+
this.icapConnection.send(new IcapGet200OkResponse());
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
*exit() {
|
|
153
|
+
this.closeConnection(this.icapConnection);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
___
|
|
158
|
+
[[ANCHOR={"id":"2efacc83-2b86-4b7a-b501-3393838d60aa","visible":true}]]
|
|
159
|
+
[[NOTE={"guid":"cf7ddd87-6f6c-4554-9360-237d22e50072"}]]
|
|
160
|
+
### **Creating a Test Case**
|
|
161
|
+
[[ANCHOR={"id":"033dfe0d-d81e-41a6-922a-5ab5c7a44600","visible":true}]]
|
|
162
|
+
[[NOTE={"guid":"9179d915-0cd1-4ee6-b7a4-e6e8dbe8db68"}]]
|
|
163
|
+
#### **Table**
|
|
164
|
+
To Create a [[REF=, ABS_Test_Case]] it is just to create a table with the [[REF=, ABS_Actor]]s and their addresses. In most real [[REF=, ABS_Test_Case]]s there will also be tables for [[REF=, ABS_Test_Data]] and [[REF=, ABS_Verification_Data]].
|
|
165
|
+
```tc
|
|
166
|
+
|Actor |
|
|
167
|
+
|name |node|type|phase|execution|src |dst |srv|testData|verification|
|
|
168
|
+
|Actors-global.demo.ClientOrig |orig|exec| | |i_service| | | | |
|
|
169
|
+
|Actors-global.demo.ImageStoreTerm |term|exec| | | |i_store | | | |
|
|
170
|
+
|Actors-global.demo.ImageConverterTerm|term|exec| | | |i_converter| | | |
|
|
171
|
+
| | | | | | | | | | |
|
|
172
|
+
```
|
|
173
|
+
[[ANCHOR={"id":"61705a37-25a2-4aab-83a5-3892ea2c11cd","visible":true}]]
|
|
174
|
+
[[NOTE={"guid":"359224a6-3d7b-4825-9e3d-b2bcdcc44091"}]]
|
|
175
|
+
#### **Markup**
|
|
176
|
+
Editing the tables will be done in a markup text format. This means that they will be easy to store in a repo and it will be easy to merge them.
|
|
177
|
+
```escape
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|Actor |
|
|
182
|
+
|name |type|phase|execution|src|dst |srv |testData|verification|
|
|
183
|
+
|Actors-global.demo.ClientOrig |orig|exec | | |i_service| | | |
|
|
184
|
+
|Actors-global.demo.ImageStoreTerm |term|exec | | | |i_store | | |
|
|
185
|
+
|Actors-global.demo.ImageConverterTerm|term|exec | | | |i_store | | |
|
|
186
|
+
```
|
|
187
|
+
<br>
|
|
188
|
+
<br>
|
|
189
|
+
<br>
|
|
190
|
+
<br>
|
|
191
|
+
<br>
|
|
192
|
+
<br>
|
|
193
|
+
<br>
|
|
194
|
+
<br>
|
|
195
|
+
<br>
|
|
196
|
+
<br>
|
|
197
|
+
<br>
|
|
198
|
+
<br>
|
|
199
|
+
<br>
|