|
40 | 40 | \titlespacing*{\subsubsection}{0pt}{10pt}{6pt} |
41 | 41 |
|
42 | 42 | \fancyhf{} |
43 | | -\fancyhead[R]{\small\color{footergray} 31 березня 2026} |
| 43 | +\fancyhead[R]{\small\color{footergray} 18 квітня 2026} |
44 | 44 | \fancyfoot[L]{\small\color{footergray} Технічні вимоги ЄСІКС. II. Господарська діяльність} |
45 | | - |
46 | 45 | \fancyfoot[R]{\small\color{footergray}\thepage} |
47 | 46 |
|
48 | 47 | \newcommand\HUGE[1]{\fontsize{40}{40}\selectfont #1} |
|
51 | 50 | \renewcommand{\footrulewidth}{0.4pt} |
52 | 51 | \renewcommand{\footrule}{\color{footergray}\hrule width \textwidth height 0.4pt} |
53 | 52 |
|
| 53 | +\lstset{ |
| 54 | + basicstyle=\ttfamily\small, |
| 55 | + breaklines=true, |
| 56 | + frame=single, |
| 57 | + backgroundcolor=\color{gray!5}, |
| 58 | + columns=fullflexible |
| 59 | +} |
| 60 | + |
54 | 61 | \begin{document} |
55 | 62 |
|
56 | 63 | \pagestyle{fancy} |
|
70 | 77 |
|
71 | 78 | \vspace{3cm} |
72 | 79 |
|
| 80 | +\section{Вступ} |
| 81 | + |
| 82 | +Набір сценаріїв задає поведінку системи та використовується для перевірки її узгодженості. Кожен сценарій описує послідовність дій, початковий стан (given) та очікувані результати (expect), що дозволяє систематично перевіряти семантику протоколу Buddha на рівні kernel-моделі. |
| 83 | + |
| 84 | +\section{Архітектура тестового набору} |
| 85 | + |
| 86 | +Сценарії організовані як система тестів, що перевіряє семантику kernel-моделі та поведінку протоколу. Вони розбиті на тематичні групи відповідно до основних доменів: повідомлення, читання, відтворення, модерація, групи, пагінація, присутність, home, контакти, згадки, видимість та розширення. Кожен сценарій є самодостатнім і може виконуватися незалежно, забезпечуючи повне покриття invariants між protocol state, read/replay, moderation та ABAC visibility. |
| 87 | + |
| 88 | +\section{Сценарії домену} |
| 89 | + |
| 90 | +Сценарії домену описують основну поведінку системи та покривають ключові можливості протоколу. Вони перевіряють базові операції над повідомленнями, стрімами подій, курсорами та станом ресурсів. |
| 91 | + |
| 92 | +\section{Складні сценарії та узгодженість} |
| 93 | + |
| 94 | +Складні сценарії перевіряють взаємодію подій, порядок їх обробки та узгодженість системи в нетривіальних випадках. Вони включають reorder edit/delete, late delete, ban після прийнятого повідомлення, snapshot після видалення групи та federated convergence. |
| 95 | + |
| 96 | +\section{Сценарії повідомлень} |
| 97 | + |
| 98 | +Сценарії повідомлень перевіряють структуру даних, передачу повідомлень та операції над їх вмістом. |
| 99 | + |
| 100 | +\begin{lstlisting}[language={},basicstyle=\ttfamily\small] |
| 101 | +scenario structured send + structured expect |
| 102 | + session alice1 |
| 103 | + connect |
| 104 | + auth |
| 105 | + |
| 106 | + session bob1 |
| 107 | + connect |
| 108 | + auth |
| 109 | + |
| 110 | + session alice1 |
| 111 | + send message to bob { |
| 112 | + body: "hi" |
| 113 | + subject: "Draft" |
| 114 | + priority: high |
| 115 | + } |
| 116 | + |
| 117 | + session bob1 |
| 118 | + expect message from alice { |
| 119 | + body: "hi" |
| 120 | + subject: "Draft" |
| 121 | + priority: high |
| 122 | + } |
| 123 | +\end{lstlisting} |
| 124 | + |
| 125 | +(Повний набір сценаріїв з DSL-PAYLOAD.md: structured payload, validation rules, edit/delete convergence, given payload, replay convergence, mutation by captured/seeded id тощо.) |
| 126 | + |
| 127 | +\section{Сценарії читання} |
| 128 | + |
| 129 | +Сценарії читання перевіряють курсори, стан прочитаного та узгодженість поведінки read/unread. |
| 130 | + |
| 131 | +\begin{lstlisting}[language={},basicstyle=\ttfamily\small] |
| 132 | +scenario delivery + read |
| 133 | + |
| 134 | +session alice |
| 135 | +connect |
| 136 | +auth |
| 137 | + |
| 138 | +session bob |
| 139 | +connect |
| 140 | +auth |
| 141 | + |
| 142 | +session alice |
| 143 | +send message to bob "hi" |
| 144 | + |
| 145 | +session bob |
| 146 | +expect message from alice body "hi" |
| 147 | + |
| 148 | +session bob |
| 149 | +send read for last |
| 150 | + |
| 151 | +session alice |
| 152 | +expect message marked as read |
| 153 | +\end{lstlisting} |
| 154 | + |
| 155 | +(Повний набір з DSL-READ.md: basic delivery, read cursor, multi-session sync, read backward, read after reconnect, multi-feed isolation, partial read, unread boundary тощо.) |
| 156 | + |
| 157 | +\section{Сценарії відтворення} |
| 158 | + |
| 159 | +Сценарії відтворення перевіряють відновлення подій, межі відтворення, усунення пропусків та перехід між знімком і потоком подій. |
| 160 | + |
| 161 | +\begin{lstlisting}[language={},basicstyle=\ttfamily\small] |
| 162 | +scenario home bootstrap then replay |
| 163 | + |
| 164 | +session alice |
| 165 | +connect |
| 166 | +auth |
| 167 | + |
| 168 | +session bob |
| 169 | +connect |
| 170 | +auth |
| 171 | +add alice to roster |
| 172 | + |
| 173 | +session alice |
| 174 | +send message to bob "m1" |
| 175 | +send message to bob "m2" |
| 176 | + |
| 177 | +session bob |
| 178 | +disconnect |
| 179 | +wait 500ms |
| 180 | +reconnect |
| 181 | + |
| 182 | +bootstrap home limit 20 preview 1 |
| 183 | + |
| 184 | +expect feeds |
| 185 | +expect previews |
| 186 | +expect shared snapshot |
| 187 | + |
| 188 | +query events peer alice after snapshot |
| 189 | + |
| 190 | +expect no duplicates |
| 191 | +expect no gaps |
| 192 | +\end{lstlisting} |
| 193 | + |
| 194 | +(Повний набір з DSL-REPLAY.md: replay, preview, gap recovery, paged snapshot, multi-feed isolation, duplicate delivery тощо.) |
| 195 | + |
| 196 | +\section{Сценарії модерації} |
| 197 | + |
| 198 | +Сценарії модерації перевіряють обмеження дій, доступу та видимості без зміни канонічної історії подій. |
| 199 | + |
| 200 | +\begin{lstlisting}[language={},basicstyle=\ttfamily\small] |
| 201 | +scenario ban user |
| 202 | + |
| 203 | +session alice |
| 204 | +connect |
| 205 | +auth |
| 206 | + |
| 207 | +ban bob |
| 208 | + |
| 209 | +expect bob is banned |
| 210 | +\end{lstlisting} |
| 211 | + |
| 212 | +(Повний набір з DSL-MODERATION.md: global/group ban, unban, moderation list, no rewrite history, block future actions тощо.) |
| 213 | + |
| 214 | +\section{Сценарії груп} |
| 215 | + |
| 216 | +Сценарії груп перевіряють групові стріми подій, склад учасників, ролі та правила доступу. |
| 217 | + |
| 218 | +\begin{lstlisting}[language={},basicstyle=\ttfamily\small] |
| 219 | +scenario create group |
| 220 | + |
| 221 | +session alice |
| 222 | +connect |
| 223 | +auth |
| 224 | + |
| 225 | +create group room1 |
| 226 | + |
| 227 | +expect group room1 exists |
| 228 | +expect alice is owner of group room1 |
| 229 | +expect alice is member of group room1 |
| 230 | +\end{lstlisting} |
| 231 | + |
| 232 | +(Повний набір з DSL-GROUP.md: create, add/remove member, send/query, delete group тощо.) |
| 233 | + |
| 234 | +\section{Сценарії пагінації} |
| 235 | + |
| 236 | +Сценарії пагінації перевіряють продовження вибірки, межі сторінок та узгодженість результатів запитів. |
| 237 | + |
| 238 | +\begin{lstlisting}[language={},basicstyle=\ttfamily\small] |
| 239 | +scenario inbox pagination |
| 240 | + |
| 241 | +given |
| 242 | + private feed alice<->bob has messages |
| 243 | + 1 from alice "p1" |
| 244 | + ... |
| 245 | + 11 from alice "p11" |
| 246 | + |
| 247 | +session bob |
| 248 | +connect |
| 249 | +auth |
| 250 | + |
| 251 | +query inbox peer alice limit 10 |
| 252 | + |
| 253 | +expect result items <= 10 |
| 254 | +expect more |
| 255 | + |
| 256 | +query inbox continue |
| 257 | + |
| 258 | +expect result items |
| 259 | +\end{lstlisting} |
| 260 | + |
| 261 | +(Повний набір з DSL-PAGINATION.md: inbox/home/event pagination, continue without initial query, no duplicates, empty page тощо.) |
| 262 | + |
| 263 | +\section{Сценарії присутності} |
| 264 | + |
| 265 | +Сценарії присутності перевіряють стани online/offline, введення повідомлень та інші події присутності. |
| 266 | + |
| 267 | +\begin{lstlisting}[language={},basicstyle=\ttfamily\small] |
| 268 | +scenario wildcard offline presence observation |
| 269 | + |
| 270 | +session alice |
| 271 | +connect |
| 272 | +auth |
| 273 | + |
| 274 | +session bob |
| 275 | +connect |
| 276 | +auth |
| 277 | + |
| 278 | +session bob |
| 279 | +query events peer alice after cursor |
| 280 | + |
| 281 | +session alice |
| 282 | +disconnect |
| 283 | + |
| 284 | +session bob |
| 285 | +query events peer alice after cursor |
| 286 | + |
| 287 | +expect empty replay |
| 288 | +expect event offline |
| 289 | +\end{lstlisting} |
| 290 | + |
| 291 | +(Повний набір з DSL-PRESENCE.md: offline/online, typing, multi-session aggregate, federated presence, no rewrite message state тощо.) |
| 292 | + |
| 293 | +\section{Сценарії home} |
| 294 | + |
| 295 | +Сценарії home перевіряють початкове завантаження стану, знімки та їх зв’язок із відтворенням і читанням. |
| 296 | + |
| 297 | +\begin{lstlisting}[language={},basicstyle=\ttfamily\small] |
| 298 | +scenario home returns feeds and snapshot after new message |
| 299 | + |
| 300 | +session alice |
| 301 | +connect |
| 302 | +auth |
| 303 | + |
| 304 | +add bob to roster |
| 305 | + |
| 306 | +session bob |
| 307 | +connect |
| 308 | +auth |
| 309 | + |
| 310 | +add alice to roster |
| 311 | + |
| 312 | +session alice |
| 313 | +send message to bob "m1" |
| 314 | + |
| 315 | +session bob |
| 316 | +bootstrap home |
| 317 | + |
| 318 | +expect feeds |
| 319 | +expect shared snapshot |
| 320 | +expect feeds count <= 10 |
| 321 | +\end{lstlisting} |
| 322 | + |
| 323 | +(Повний набір з DSL-HOME.md: home bootstrap, shared snapshot, read consistency, policy interaction тощо.) |
| 324 | + |
| 325 | +\section{Сценарії контактів} |
| 326 | + |
| 327 | +Сценарії контактів перевіряють списки контактів і зв’язки між користувачами та їх роль у взаємодіях. |
| 328 | + |
| 329 | +\begin{lstlisting}[language={},basicstyle=\ttfamily\small] |
| 330 | +scenario add to roster |
| 331 | + |
| 332 | +session alice |
| 333 | +connect |
| 334 | +auth |
| 335 | + |
| 336 | +add bob to roster |
| 337 | + |
| 338 | +query roster |
| 339 | + |
| 340 | +expect bob in roster |
| 341 | +\end{lstlisting} |
| 342 | + |
| 343 | +(Повний набір з DSL-ROSTER.md: add/remove, one-way/mutual relation, messaging after removal тощо.) |
| 344 | + |
| 345 | +\section{Сценарії згадок} |
| 346 | + |
| 347 | +Сценарії згадок перевіряють формування стану згадок у стрімах подій і їх зв’язок із читанням та видимістю. |
| 348 | + |
| 349 | +\begin{lstlisting}[language={},basicstyle=\ttfamily\small] |
| 350 | +scenario mention appears in home after incoming mention message |
| 351 | + |
| 352 | +session alice |
| 353 | +connect |
| 354 | +auth |
| 355 | + |
| 356 | +add bob to roster |
| 357 | + |
| 358 | +session bob |
| 359 | +connect |
| 360 | +auth |
| 361 | + |
| 362 | +add alice to roster |
| 363 | + |
| 364 | +session alice |
| 365 | +send message to bob { |
| 366 | +body: "hi" |
| 367 | +mention: bob |
| 368 | +} |
| 369 | + |
| 370 | +session bob |
| 371 | +bootstrap home |
| 372 | + |
| 373 | +expect feeds |
| 374 | +expect mentions |
| 375 | +expect shared snapshot |
| 376 | +\end{lstlisting} |
| 377 | + |
| 378 | +(Повний набір з DSL-MENTIONS.md: mention in home, read clears mention, replay does not clear, hidden message does not produce mention тощо.) |
| 379 | + |
| 380 | +\section{Сценарії видимості} |
| 381 | + |
| 382 | +Сценарії видимості перевіряють фільтрацію спостережень і обмеження доступу до даних поверх канонічної історії. |
| 383 | + |
| 384 | +\begin{lstlisting}[language={},basicstyle=\ttfamily\small] |
| 385 | +scenario message is hidden when clearance is insufficient |
| 386 | + |
| 387 | +given |
| 388 | +message m1 has classification topsecret |
| 389 | +alice has clearance secret |
| 390 | + |
| 391 | +when alice queries inbox |
| 392 | + |
| 393 | +expect access allowed |
| 394 | +expect message m1 hidden |
| 395 | +\end{lstlisting} |
| 396 | + |
| 397 | +(Повний набір з DSL-VISIBILITY.md: hidden vs visible, field-level, access denied vs hidden, hidden != deleted тощо.) |
| 398 | + |
| 399 | +\section{Інваріанти та узгодженість} |
| 400 | + |
| 401 | +Інваріанти перевіряють узгодженість між читанням, відтворенням, модерацією, видимістю та іншими властивостями системи. |
| 402 | + |
| 403 | +(Всі invariants з DSL-INVARIANTS.md, ADVANCED.md та cross-layer checks з інших файлів: read cursor unchanged by moderation, ABAC filtering does not change truth, snapshot does not bypass ban, delete overrides edit, no rewrite history тощо.) |
| 404 | + |
| 405 | +\section{Розширення} |
| 406 | + |
| 407 | +Розширення охоплюють спеціалізовані сценарії для автентифікації, політик доступу, пошуку та виявлення можливостей системи. |
| 408 | + |
| 409 | +(Сценарії з DSL-AUTH.md, DSL-ABAC.md, DSL-SEARCH.md, DSL-DISCOVERY.md: auth/resume/renew, ABAC clearance/visibility, search criteria/projection/pagination, discovery capabilities.) |
| 410 | + |
| 411 | +\section{Висновок} |
73 | 412 |
|
| 413 | +Тестовий набір підсумовується як систематичне покриття поведінки протоколу через сценарії DSL. Він забезпечує повну верифікацію kernel-моделі, invariants та всіх розширень, роблячи протокол Buddha готовим до формальної стандартизації та реалізації. |
74 | 414 |
|
75 | 415 | \bibliographystyle{plain} |
76 | 416 | \begin{thebibliography}{9} |
|
79 | 419 | \bibitem{annexb} ITU-T Z.120 Annex B (04/1998), Formal semantics of Message Sequence Charts. |
80 | 420 | \end{thebibliography} |
81 | 421 |
|
82 | | -\end{document} |
| 422 | +\end{document} |
0 commit comments