forked from tinode/chat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtsung.xml
136 lines (114 loc) · 5.9 KB
/
tsung.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/local/share/tsung/tsung-1.0.dtd" []>
<tsung loglevel="notice" version="1.0" dumptraffic="false">
<clients>
<client host="localhost" use_controller_vm="true" maxusers="40000" />
</clients>
<servers>
<server host="127.0.0.1" port="6060" type="tcp" />
</servers>
<load>
<arrivalphase phase="1" duration="120" unit="second">
<users maxnumber="40000" arrivalrate="50" unit="second" />
</arrivalphase>
</load>
<sessions>
<session name="websocket" probability="100" type="ts_websocket">
<setdynvars sourcetype="random_string" length="4">
<var name="baseid" />
</setdynvars>
<request subst="true">
<websocket type="connect" path="/v0/channels?apikey=AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K">
<!--http_header name="X-Tinode-APIKey" value="AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K"/-->
</websocket>
</request>
<request subst="true">
<websocket type="message">{"hi":{"id":"%%_baseid%%01","ver":"0.15","ua":"Tsung-Loadtest/1.0; tsung/1.7.0"}}</websocket>
</request>
<!-- Randomly pick a user. -->
<setdynvars sourcetype="eval"
code='fun({Pid, DynVars}) ->
tinode:rand_user_secret({Pid, DynVars})
end.'>
<var name="secret" />
</setdynvars>
<!-- Read auth token from the cache. -->
<setdynvars sourcetype="eval"
code='fun({Pid, DynVars}) ->
{ok, Secret} = ts_dynvars:lookup(secret, DynVars),
tinode:read_token(Secret)
end.'>
<var name="token" />
</setdynvars>
<!-- Token present. Authenticate with it. -->
<if var="token" neq="">
<request subst="true">
<match do="abort" when="nomatch">{"ctrl":.*"code":200.*}</match>
<websocket type="message">{"login":{"id":"%%_baseid%%02","scheme":"token","secret":"%%_token%%"}}</websocket>
</request>
</if>
<!-- else log in with user name and password. -->
<if var="token" eq="">
<request subst="true">
<match do="abort" when="nomatch">{"ctrl":.*"code":200.*}</match>
<dyn_variable name="token" re='^{"ctrl":.*"token":"([-A-Za-z0-9+\/=]+={0,3})".*}$'/>
<websocket type="message">{"login":{"id":"%%_baseid%%02","scheme":"basic","secret":"%%_secret%%"}}</websocket>
</request>
<!-- Save token in the cache. -->
<setdynvars sourcetype="eval"
code='fun({_, DynVars}) ->
{ok, Token} = ts_dynvars:lookup(token, DynVars),
{ok, Secret} = ts_dynvars:lookup(secret, DynVars),
tinode:cache_token(Secret, Token)
end.'>
<var name="dummy" />
</setdynvars>
</if>
<request subst="true">
<websocket type="message" frame="text">{"sub":{"id":"%%_baseid%%03","topic":"me","get":{"what":"desc"}}}</websocket>
</request>
<thinktime value="3" random="true"></thinktime>
<request subst="true">
<!--
Response looks like:
{"meta":{"id":"106691","topic":"me","ts":"2018-07-25T18:14:24.433Z","sub":[
{"updated":"2018-07-16T01:29:25.016Z","acs":{"given":47,"want":47,"mode":47},"topic":"grpOZcxbbwE7Hc","touched":"2018-07-16T17:32:12.48Z","seq":3},{"updated":"2018-07-16T01:35:25.016Z","acs":{"given":47,"want":47,"mode":47},"topic":"grpz6jDYiygVkI","touched":"2018-07-16T17:30:32.165Z","seq":22},{"updated":"2018-07-16T02:05:25.019Z","acs":{"given":47,"want":47,"mode":47},"topic":"grp8efPpvZoUQ4","touched":"2018-07-16T17:24:34.946Z","seq":1},{"updated":"2018-07-15T17:23:25.002Z","acs":{"given":31,"want":31,"mode":31},"topic":"usrlF7rSfaEx9c","touched":"2018-07-16T17:28:42.07Z","seq":9},{"updated":"2018-07-15T23:23:25.008Z","acs":{"given":16,"want":31,"mode":16},"topic":"usrddg3AFqzeEQ"},{"updated":"2018-07-15T23:53:25.009Z","acs":{"given":31,"want":31,"mode":31},"topic":"usrR6qq94MxLZ0","touched":"2018-07-16T17:30:03.93Z","seq":11},{"updated":"2018-07-15T23:56:25.01Z","acs":{"given":31,"want":31,"mode":31},"topic":"usriUhihEisbH8","touched":"2018-07-16T17:26:20.401Z","seq":9}]}}
-->
<dyn_variable name="subs" jsonpath="meta.sub[*].topic"/>
<websocket type="message" frame="text">{"get":{"id":"%%_baseid%%04","topic":"me","what":"sub"}}</websocket>
</request>
<setdynvars sourcetype="eval"
code="fun({Pid,DynVars})->
{ok,Subs}=ts_dynvars:lookup(subs,DynVars),
tinode:shuffle(Subs) end.">
<var name="shuffled_subs" />
</setdynvars>
<!-- main loop -->
<for from="1" to="100" incr="1" var="ctr">
<!-- Iterate over subscriptions -->
<foreach name="topicx" in="shuffled_subs">
<thinktime value="1" random="true"></thinktime>
<request subst="true">
<dyn_variable name="code" jsonpath="ctrl.code"/>
<websocket type="message" frame="text">{"sub":{"id":"%%_baseid%%%%_topicx%%%%_ctr%%","topic":"%%_topicx%%","get":{"what":"desc sub data del"}}}</websocket>
</request>
<if var="code" eq="200">
<for from="1" to="50" incr="1" var="counter">
<thinktime min="2" max="10" random="true"></thinktime>
<request subst="true">
<websocket type="message" frame="text">{"pub":{"id":"%%_baseid%%%%_topicx%%%%_ctr%%%%_counter%%","topic":"%%_topicx%%","content":"This is a Tsung test %%_baseid%% %%_counter%%"}}</websocket>
</request>
</for>
</if>
<request subst="true">
<websocket type="message" frame="text">{"leave":{"id":"%%_baseid%%%%_topicx%%%%_ctr%%","topic":"%%_topicx%%"}}</websocket>
</request>
</foreach>
</for>
<!-- end main loop -->
<request>
<websocket type="close"></websocket>
</request>
</session>
</sessions>
</tsung>