├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── build ├── chrome.json ├── cleanup ├── presentation └── Robot Framework.pdf ├── remove ├── robot.sh └── tests ├── a-simple └── test.robot ├── b-screenshot └── test.robot ├── c-screenresolution └── test.robot ├── d-variables └── test.robot ├── e-keywords └── test.robot ├── f-setupteardown └── test.robot ├── g-resource ├── common.robot └── test.robot ├── h-form ├── common.robot └── test.robot └── i-form ├── common.robot └── test.robot /.gitignore: -------------------------------------------------------------------------------- 1 | **results/ -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:latest 2 | 3 | RUN apk update && apk upgrade \ 4 | && echo @latest-stable http://nl.alpinelinux.org/alpine/latest-stable/community >> /etc/apk/repositories \ 5 | && echo @latest-stable http://nl.alpinelinux.org/alpine/latest-stable/main >> /etc/apk/repositories \ 6 | && apk add --no-cache \ 7 | chromium \ 8 | chromium-chromedriver \ 9 | python3 \ 10 | py3-pip \ 11 | && pip3 install robotframework robotframework-seleniumlibrary faker==2.0.1 robotframework-faker==4.2.0 \ 12 | && rm -rf /var/lib/apt/lists/* \ 13 | /var/cache/apk/* \ 14 | /usr/share/man \ 15 | /tmp/* 16 | 17 | # Add Chrome as a user 18 | RUN mkdir -p /robot \ 19 | && adduser -D chrome \ 20 | && chown -R chrome:chrome /robot 21 | # Run Chrome as non-privileged 22 | USER chrome 23 | WORKDIR /robot 24 | 25 | ENV CHROME_BIN=/usr/bin/chromium-browser \ 26 | CHROME_PATH=/usr/lib/chromium/ 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # README 2 | 3 | Lightweight Alpine Docker container that runs Robot Framework using Selenium Chrome (Chromium) driver in native headless mode (no Xvfb required). 4 | 5 | ## What is this repository for? 6 | 7 | This repository has a Dockerfile that creates a container to run Robot Framework scripts locally, avoiding the hassles of setting up Python and Robot Framework locally. 8 | 9 | ## Versioning 10 | 11 | * robotframework: latest 12 | * robotframework-seleniumlibrary: latest 13 | * robotframework-faker: latest 14 | * Chrome webdriver: latest 15 | * Chromium browser: latest 16 | 17 | ## Pre-requisites 18 | 19 | Docker should be already installed and running. 20 | 21 | ## Assumptions 22 | 23 | All of the helper scripts here are written for Mac/Linux in bash. It should be possible to translate these over to a Windows equivilant or possibly use WSL (Windows Subsystem For Linux) to run these. 24 | 25 | ## Setup 26 | 27 | ### 1) Create docker image and shared volume: 28 | 29 | ``` 30 | ./build 31 | ``` 32 | 33 | This creates an image based on the Dockerfile and creates a container running Robot Framework. 34 | 35 | 36 | ### 2) Set test path 37 | 38 | Open robot.sh and set the TEST_PATH to point to the directory where your Robot tests live. By default the example tests in /test will be run. 39 | Note: Changes made to robot.sh do *not* require rebuilding as it runs locally. 40 | 41 | 42 | ### 3) Run Robot tests: 43 | 44 | ``` 45 | ./robot.sh 46 | ``` 47 | 48 | This creates a new container, it will run any Robot Suite that is defined in your test directory (defined in step 2). 49 | 50 | Test results (logs, reports and screenshots) will be stored in a /results directory. --outputdir is configured in robot.sh. 51 | 52 | You should see results in the console: 53 | 54 | ``` 55 | ./robot.sh 56 | ============================================================================== 57 | Robot 58 | ============================================================================== 59 | Robot.Test 60 | ============================================================================== 61 | Robot.Test.Open 62 | ============================================================================== 63 | Open Site | PASS | 64 | ------------------------------------------------------------------------------ 65 | Robot.Test.Open | PASS | 66 | 1 critical test, 1 passed, 0 failed 67 | 1 test total, 1 passed, 0 failed 68 | ============================================================================== 69 | Robot.Test | PASS | 70 | 1 critical test, 1 passed, 0 failed 71 | 1 test total, 1 passed, 0 failed 72 | ============================================================================== 73 | Robot | PASS | 74 | 1 critical test, 1 passed, 0 failed 75 | 1 test total, 1 passed, 0 failed 76 | ============================================================================== 77 | Output: /robot/results/output.xml 78 | Log: /robot/results/log.html 79 | Report: /robot/results/report.html 80 | ``` 81 | 82 | ## Maintenance 83 | 84 | Remove any containers and images related to this Dockerfile! After running this you will need to rebuild your image. 85 | 86 | ``` 87 | ./remove 88 | ``` 89 | 90 | This will cleanup files from /results. Handy to run between tests. 91 | 92 | ``` 93 | ./cleanup 94 | ``` 95 | 96 | Note each time you run a test a new container is created. To clean these up simply run: 97 | 98 | ``` 99 | docker container prune 100 | ``` 101 | 102 | 103 | ## Sending additional arguments to Robot ## 104 | 105 | You can send parameters as part of Robot.sh script 106 | 107 | e.g. 108 | ``` 109 | ./robot.sh -v URL:https://www.amazon.com 110 | ``` 111 | 112 | This is sent to the container like this: 113 | 114 | ``` 115 | robot -v URL:https://www.amazon.com 116 | ``` 117 | 118 | ## Running Sample Tests 119 | 120 | Pass a suite directory to Robot command: 121 | 122 | ``` 123 | ./robot.sh --suite a-simple 124 | ``` 125 | 126 | Examine the /results directory after running tests to see logs, results and screenshots. 127 | 128 | ## Credits 129 | 130 | This was original forked and heavily modified from: https://github.com/cgowez/robot-docker 131 | 132 | Found a work around for Chrome error in headless mode here which eliminates the '--no-sandbox' option: https://github.com/Zenika/alpine-chrome 133 | 134 | ## Suggested VSCode Extensions 135 | 136 | * [HTML Preview](https://marketplace.visualstudio.com/items?itemName=george-alisson.html-preview-vscode) 137 | * [Robot Framework Intellisense](https://marketplace.visualstudio.com/items?itemName=TomiTurtiainen.rf-intellisense) 138 | * [Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) 139 | 140 | ## Disclaimer 141 | 142 | * I built this for my own personal use. YMMV. 143 | * It works on my system :) 144 | * It is pitch black. You are likely to be eaten by a grue. 145 | 146 | 147 | ## License 148 | 149 | This is free and unencumbered software released into the public domain. 150 | 151 | Anyone is free to copy, modify, publish, use, compile, sell, or 152 | distribute this software, either in source code form or as a compiled 153 | binary, for any purpose, commercial or non-commercial, and by any 154 | means. 155 | 156 | In jurisdictions that recognize copyright laws, the author or authors 157 | of this software dedicate any and all copyright interest in the 158 | software to the public domain. We make this dedication for the benefit 159 | of the public at large and to the detriment of our heirs and 160 | successors. We intend this dedication to be an overt act of 161 | relinquishment in perpetuity of all present and future rights to this 162 | software under copyright law. 163 | 164 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 165 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 166 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 167 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 168 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 169 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 170 | OTHER DEALINGS IN THE SOFTWARE. 171 | 172 | For more information, please refer to -------------------------------------------------------------------------------- /build: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | IMAGE_NAME='robot-docker' 3 | CONTAINER_NAME='robot-docker-container' 4 | 5 | docker build -t $IMAGE_NAME . 6 | build=$! 7 | wait $build 8 | docker run -d --name $CONTAINER_NAME --shm-size=1gb $IMAGE_NAME:latest 9 | volume=$! 10 | wait $volume 11 | -------------------------------------------------------------------------------- /chrome.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultAction": "SCMP_ACT_ERRNO", 3 | "syscalls": [ 4 | { 5 | "name": "accept", 6 | "action": "SCMP_ACT_ALLOW", 7 | "args": null 8 | }, 9 | { 10 | "name": "accept4", 11 | "action": "SCMP_ACT_ALLOW", 12 | "args": null 13 | }, 14 | { 15 | "name": "access", 16 | "action": "SCMP_ACT_ALLOW", 17 | "args": null 18 | }, 19 | { 20 | "name": "alarm", 21 | "action": "SCMP_ACT_ALLOW", 22 | "args": null 23 | }, 24 | { 25 | "name": "arch_prctl", 26 | "action": "SCMP_ACT_ALLOW", 27 | "args": null 28 | }, 29 | { 30 | "name": "bind", 31 | "action": "SCMP_ACT_ALLOW", 32 | "args": null 33 | }, 34 | { 35 | "name": "brk", 36 | "action": "SCMP_ACT_ALLOW", 37 | "args": null 38 | }, 39 | { 40 | "name": "capget", 41 | "action": "SCMP_ACT_ALLOW", 42 | "args": null 43 | }, 44 | { 45 | "name": "capset", 46 | "action": "SCMP_ACT_ALLOW", 47 | "args": null 48 | }, 49 | { 50 | "name": "chdir", 51 | "action": "SCMP_ACT_ALLOW", 52 | "args": null 53 | }, 54 | { 55 | "name": "chmod", 56 | "action": "SCMP_ACT_ALLOW", 57 | "args": null 58 | }, 59 | { 60 | "name": "chown", 61 | "action": "SCMP_ACT_ALLOW", 62 | "args": null 63 | }, 64 | { 65 | "name": "chown32", 66 | "action": "SCMP_ACT_ALLOW", 67 | "args": null 68 | }, 69 | { 70 | "name": "chroot", 71 | "action": "SCMP_ACT_ALLOW", 72 | "args": null 73 | }, 74 | { 75 | "name": "clock_getres", 76 | "action": "SCMP_ACT_ALLOW", 77 | "args": null 78 | }, 79 | { 80 | "name": "clock_gettime", 81 | "action": "SCMP_ACT_ALLOW", 82 | "args": null 83 | }, 84 | { 85 | "name": "clock_nanosleep", 86 | "action": "SCMP_ACT_ALLOW", 87 | "args": null 88 | }, 89 | { 90 | "name": "clone", 91 | "action": "SCMP_ACT_ALLOW", 92 | "args": null 93 | }, 94 | { 95 | "name": "close", 96 | "action": "SCMP_ACT_ALLOW", 97 | "args": null 98 | }, 99 | { 100 | "name": "connect", 101 | "action": "SCMP_ACT_ALLOW", 102 | "args": null 103 | }, 104 | { 105 | "name": "creat", 106 | "action": "SCMP_ACT_ALLOW", 107 | "args": null 108 | }, 109 | { 110 | "name": "dup", 111 | "action": "SCMP_ACT_ALLOW", 112 | "args": null 113 | }, 114 | { 115 | "name": "dup2", 116 | "action": "SCMP_ACT_ALLOW", 117 | "args": null 118 | }, 119 | { 120 | "name": "dup3", 121 | "action": "SCMP_ACT_ALLOW", 122 | "args": null 123 | }, 124 | { 125 | "name": "epoll_create", 126 | "action": "SCMP_ACT_ALLOW", 127 | "args": null 128 | }, 129 | { 130 | "name": "epoll_create1", 131 | "action": "SCMP_ACT_ALLOW", 132 | "args": null 133 | }, 134 | { 135 | "name": "epoll_ctl", 136 | "action": "SCMP_ACT_ALLOW", 137 | "args": null 138 | }, 139 | { 140 | "name": "epoll_ctl_old", 141 | "action": "SCMP_ACT_ALLOW", 142 | "args": null 143 | }, 144 | { 145 | "name": "epoll_pwait", 146 | "action": "SCMP_ACT_ALLOW", 147 | "args": null 148 | }, 149 | { 150 | "name": "epoll_wait", 151 | "action": "SCMP_ACT_ALLOW", 152 | "args": null 153 | }, 154 | { 155 | "name": "epoll_wait_old", 156 | "action": "SCMP_ACT_ALLOW", 157 | "args": null 158 | }, 159 | { 160 | "name": "eventfd", 161 | "action": "SCMP_ACT_ALLOW", 162 | "args": null 163 | }, 164 | { 165 | "name": "eventfd2", 166 | "action": "SCMP_ACT_ALLOW", 167 | "args": null 168 | }, 169 | { 170 | "name": "execve", 171 | "action": "SCMP_ACT_ALLOW", 172 | "args": null 173 | }, 174 | { 175 | "name": "execveat", 176 | "action": "SCMP_ACT_ALLOW", 177 | "args": null 178 | }, 179 | { 180 | "name": "exit", 181 | "action": "SCMP_ACT_ALLOW", 182 | "args": null 183 | }, 184 | { 185 | "name": "exit_group", 186 | "action": "SCMP_ACT_ALLOW", 187 | "args": null 188 | }, 189 | { 190 | "name": "faccessat", 191 | "action": "SCMP_ACT_ALLOW", 192 | "args": null 193 | }, 194 | { 195 | "name": "fadvise64", 196 | "action": "SCMP_ACT_ALLOW", 197 | "args": null 198 | }, 199 | { 200 | "name": "fadvise64_64", 201 | "action": "SCMP_ACT_ALLOW", 202 | "args": null 203 | }, 204 | { 205 | "name": "fallocate", 206 | "action": "SCMP_ACT_ALLOW", 207 | "args": null 208 | }, 209 | { 210 | "name": "fanotify_init", 211 | "action": "SCMP_ACT_ALLOW", 212 | "args": null 213 | }, 214 | { 215 | "name": "fanotify_mark", 216 | "action": "SCMP_ACT_ALLOW", 217 | "args": null 218 | }, 219 | { 220 | "name": "fchdir", 221 | "action": "SCMP_ACT_ALLOW", 222 | "args": null 223 | }, 224 | { 225 | "name": "fchmod", 226 | "action": "SCMP_ACT_ALLOW", 227 | "args": null 228 | }, 229 | { 230 | "name": "fchmodat", 231 | "action": "SCMP_ACT_ALLOW", 232 | "args": null 233 | }, 234 | { 235 | "name": "fchown", 236 | "action": "SCMP_ACT_ALLOW", 237 | "args": null 238 | }, 239 | { 240 | "name": "fchown32", 241 | "action": "SCMP_ACT_ALLOW", 242 | "args": null 243 | }, 244 | { 245 | "name": "fchownat", 246 | "action": "SCMP_ACT_ALLOW", 247 | "args": null 248 | }, 249 | { 250 | "name": "fcntl", 251 | "action": "SCMP_ACT_ALLOW", 252 | "args": null 253 | }, 254 | { 255 | "name": "fcntl64", 256 | "action": "SCMP_ACT_ALLOW", 257 | "args": null 258 | }, 259 | { 260 | "name": "fdatasync", 261 | "action": "SCMP_ACT_ALLOW", 262 | "args": null 263 | }, 264 | { 265 | "name": "fgetxattr", 266 | "action": "SCMP_ACT_ALLOW", 267 | "args": null 268 | }, 269 | { 270 | "name": "flistxattr", 271 | "action": "SCMP_ACT_ALLOW", 272 | "args": null 273 | }, 274 | { 275 | "name": "flock", 276 | "action": "SCMP_ACT_ALLOW", 277 | "args": null 278 | }, 279 | { 280 | "name": "fork", 281 | "action": "SCMP_ACT_ALLOW", 282 | "args": null 283 | }, 284 | { 285 | "name": "fremovexattr", 286 | "action": "SCMP_ACT_ALLOW", 287 | "args": null 288 | }, 289 | { 290 | "name": "fsetxattr", 291 | "action": "SCMP_ACT_ALLOW", 292 | "args": null 293 | }, 294 | { 295 | "name": "fstat", 296 | "action": "SCMP_ACT_ALLOW", 297 | "args": null 298 | }, 299 | { 300 | "name": "fstat64", 301 | "action": "SCMP_ACT_ALLOW", 302 | "args": null 303 | }, 304 | { 305 | "name": "fstatat64", 306 | "action": "SCMP_ACT_ALLOW", 307 | "args": null 308 | }, 309 | { 310 | "name": "fstatfs", 311 | "action": "SCMP_ACT_ALLOW", 312 | "args": null 313 | }, 314 | { 315 | "name": "fstatfs64", 316 | "action": "SCMP_ACT_ALLOW", 317 | "args": null 318 | }, 319 | { 320 | "name": "fsync", 321 | "action": "SCMP_ACT_ALLOW", 322 | "args": null 323 | }, 324 | { 325 | "name": "ftruncate", 326 | "action": "SCMP_ACT_ALLOW", 327 | "args": null 328 | }, 329 | { 330 | "name": "ftruncate64", 331 | "action": "SCMP_ACT_ALLOW", 332 | "args": null 333 | }, 334 | { 335 | "name": "futex", 336 | "action": "SCMP_ACT_ALLOW", 337 | "args": null 338 | }, 339 | { 340 | "name": "futimesat", 341 | "action": "SCMP_ACT_ALLOW", 342 | "args": null 343 | }, 344 | { 345 | "name": "getcpu", 346 | "action": "SCMP_ACT_ALLOW", 347 | "args": null 348 | }, 349 | { 350 | "name": "getcwd", 351 | "action": "SCMP_ACT_ALLOW", 352 | "args": null 353 | }, 354 | { 355 | "name": "getdents", 356 | "action": "SCMP_ACT_ALLOW", 357 | "args": null 358 | }, 359 | { 360 | "name": "getdents64", 361 | "action": "SCMP_ACT_ALLOW", 362 | "args": null 363 | }, 364 | { 365 | "name": "getegid", 366 | "action": "SCMP_ACT_ALLOW", 367 | "args": null 368 | }, 369 | { 370 | "name": "getegid32", 371 | "action": "SCMP_ACT_ALLOW", 372 | "args": null 373 | }, 374 | { 375 | "name": "geteuid", 376 | "action": "SCMP_ACT_ALLOW", 377 | "args": null 378 | }, 379 | { 380 | "name": "geteuid32", 381 | "action": "SCMP_ACT_ALLOW", 382 | "args": null 383 | }, 384 | { 385 | "name": "getgid", 386 | "action": "SCMP_ACT_ALLOW", 387 | "args": null 388 | }, 389 | { 390 | "name": "getgid32", 391 | "action": "SCMP_ACT_ALLOW", 392 | "args": null 393 | }, 394 | { 395 | "name": "getgroups", 396 | "action": "SCMP_ACT_ALLOW", 397 | "args": null 398 | }, 399 | { 400 | "name": "getgroups32", 401 | "action": "SCMP_ACT_ALLOW", 402 | "args": null 403 | }, 404 | { 405 | "name": "getitimer", 406 | "action": "SCMP_ACT_ALLOW", 407 | "args": null 408 | }, 409 | { 410 | "name": "getpeername", 411 | "action": "SCMP_ACT_ALLOW", 412 | "args": null 413 | }, 414 | { 415 | "name": "getpgid", 416 | "action": "SCMP_ACT_ALLOW", 417 | "args": null 418 | }, 419 | { 420 | "name": "getpgrp", 421 | "action": "SCMP_ACT_ALLOW", 422 | "args": null 423 | }, 424 | { 425 | "name": "getpid", 426 | "action": "SCMP_ACT_ALLOW", 427 | "args": null 428 | }, 429 | { 430 | "name": "getppid", 431 | "action": "SCMP_ACT_ALLOW", 432 | "args": null 433 | }, 434 | { 435 | "name": "getpriority", 436 | "action": "SCMP_ACT_ALLOW", 437 | "args": null 438 | }, 439 | { 440 | "name": "getrandom", 441 | "action": "SCMP_ACT_ALLOW", 442 | "args": null 443 | }, 444 | { 445 | "name": "getresgid", 446 | "action": "SCMP_ACT_ALLOW", 447 | "args": null 448 | }, 449 | { 450 | "name": "getresgid32", 451 | "action": "SCMP_ACT_ALLOW", 452 | "args": null 453 | }, 454 | { 455 | "name": "getresuid", 456 | "action": "SCMP_ACT_ALLOW", 457 | "args": null 458 | }, 459 | { 460 | "name": "getresuid32", 461 | "action": "SCMP_ACT_ALLOW", 462 | "args": null 463 | }, 464 | { 465 | "name": "getrlimit", 466 | "action": "SCMP_ACT_ALLOW", 467 | "args": null 468 | }, 469 | { 470 | "name": "get_robust_list", 471 | "action": "SCMP_ACT_ALLOW", 472 | "args": null 473 | }, 474 | { 475 | "name": "getrusage", 476 | "action": "SCMP_ACT_ALLOW", 477 | "args": null 478 | }, 479 | { 480 | "name": "getsid", 481 | "action": "SCMP_ACT_ALLOW", 482 | "args": null 483 | }, 484 | { 485 | "name": "getsockname", 486 | "action": "SCMP_ACT_ALLOW", 487 | "args": null 488 | }, 489 | { 490 | "name": "getsockopt", 491 | "action": "SCMP_ACT_ALLOW", 492 | "args": null 493 | }, 494 | { 495 | "name": "get_thread_area", 496 | "action": "SCMP_ACT_ALLOW", 497 | "args": null 498 | }, 499 | { 500 | "name": "gettid", 501 | "action": "SCMP_ACT_ALLOW", 502 | "args": null 503 | }, 504 | { 505 | "name": "gettimeofday", 506 | "action": "SCMP_ACT_ALLOW", 507 | "args": null 508 | }, 509 | { 510 | "name": "getuid", 511 | "action": "SCMP_ACT_ALLOW", 512 | "args": null 513 | }, 514 | { 515 | "name": "getuid32", 516 | "action": "SCMP_ACT_ALLOW", 517 | "args": null 518 | }, 519 | { 520 | "name": "getxattr", 521 | "action": "SCMP_ACT_ALLOW", 522 | "args": null 523 | }, 524 | { 525 | "name": "inotify_add_watch", 526 | "action": "SCMP_ACT_ALLOW", 527 | "args": null 528 | }, 529 | { 530 | "name": "inotify_init", 531 | "action": "SCMP_ACT_ALLOW", 532 | "args": null 533 | }, 534 | { 535 | "name": "inotify_init1", 536 | "action": "SCMP_ACT_ALLOW", 537 | "args": null 538 | }, 539 | { 540 | "name": "inotify_rm_watch", 541 | "action": "SCMP_ACT_ALLOW", 542 | "args": null 543 | }, 544 | { 545 | "name": "io_cancel", 546 | "action": "SCMP_ACT_ALLOW", 547 | "args": null 548 | }, 549 | { 550 | "name": "ioctl", 551 | "action": "SCMP_ACT_ALLOW", 552 | "args": null 553 | }, 554 | { 555 | "name": "io_destroy", 556 | "action": "SCMP_ACT_ALLOW", 557 | "args": null 558 | }, 559 | { 560 | "name": "io_getevents", 561 | "action": "SCMP_ACT_ALLOW", 562 | "args": null 563 | }, 564 | { 565 | "name": "ioprio_get", 566 | "action": "SCMP_ACT_ALLOW", 567 | "args": null 568 | }, 569 | { 570 | "name": "ioprio_set", 571 | "action": "SCMP_ACT_ALLOW", 572 | "args": null 573 | }, 574 | { 575 | "name": "io_setup", 576 | "action": "SCMP_ACT_ALLOW", 577 | "args": null 578 | }, 579 | { 580 | "name": "io_submit", 581 | "action": "SCMP_ACT_ALLOW", 582 | "args": null 583 | }, 584 | { 585 | "name": "kill", 586 | "action": "SCMP_ACT_ALLOW", 587 | "args": null 588 | }, 589 | { 590 | "name": "lchown", 591 | "action": "SCMP_ACT_ALLOW", 592 | "args": null 593 | }, 594 | { 595 | "name": "lchown32", 596 | "action": "SCMP_ACT_ALLOW", 597 | "args": null 598 | }, 599 | { 600 | "name": "lgetxattr", 601 | "action": "SCMP_ACT_ALLOW", 602 | "args": null 603 | }, 604 | { 605 | "name": "link", 606 | "action": "SCMP_ACT_ALLOW", 607 | "args": null 608 | }, 609 | { 610 | "name": "linkat", 611 | "action": "SCMP_ACT_ALLOW", 612 | "args": null 613 | }, 614 | { 615 | "name": "listen", 616 | "action": "SCMP_ACT_ALLOW", 617 | "args": null 618 | }, 619 | { 620 | "name": "listxattr", 621 | "action": "SCMP_ACT_ALLOW", 622 | "args": null 623 | }, 624 | { 625 | "name": "llistxattr", 626 | "action": "SCMP_ACT_ALLOW", 627 | "args": null 628 | }, 629 | { 630 | "name": "_llseek", 631 | "action": "SCMP_ACT_ALLOW", 632 | "args": null 633 | }, 634 | { 635 | "name": "lremovexattr", 636 | "action": "SCMP_ACT_ALLOW", 637 | "args": null 638 | }, 639 | { 640 | "name": "lseek", 641 | "action": "SCMP_ACT_ALLOW", 642 | "args": null 643 | }, 644 | { 645 | "name": "lsetxattr", 646 | "action": "SCMP_ACT_ALLOW", 647 | "args": null 648 | }, 649 | { 650 | "name": "lstat", 651 | "action": "SCMP_ACT_ALLOW", 652 | "args": null 653 | }, 654 | { 655 | "name": "lstat64", 656 | "action": "SCMP_ACT_ALLOW", 657 | "args": null 658 | }, 659 | { 660 | "name": "madvise", 661 | "action": "SCMP_ACT_ALLOW", 662 | "args": null 663 | }, 664 | { 665 | "name": "memfd_create", 666 | "action": "SCMP_ACT_ALLOW", 667 | "args": null 668 | }, 669 | { 670 | "name": "mincore", 671 | "action": "SCMP_ACT_ALLOW", 672 | "args": null 673 | }, 674 | { 675 | "name": "mkdir", 676 | "action": "SCMP_ACT_ALLOW", 677 | "args": null 678 | }, 679 | { 680 | "name": "mkdirat", 681 | "action": "SCMP_ACT_ALLOW", 682 | "args": null 683 | }, 684 | { 685 | "name": "mknod", 686 | "action": "SCMP_ACT_ALLOW", 687 | "args": null 688 | }, 689 | { 690 | "name": "mknodat", 691 | "action": "SCMP_ACT_ALLOW", 692 | "args": null 693 | }, 694 | { 695 | "name": "mlock", 696 | "action": "SCMP_ACT_ALLOW", 697 | "args": null 698 | }, 699 | { 700 | "name": "mlockall", 701 | "action": "SCMP_ACT_ALLOW", 702 | "args": null 703 | }, 704 | { 705 | "name": "mmap", 706 | "action": "SCMP_ACT_ALLOW", 707 | "args": null 708 | }, 709 | { 710 | "name": "mmap2", 711 | "action": "SCMP_ACT_ALLOW", 712 | "args": null 713 | }, 714 | { 715 | "name": "mprotect", 716 | "action": "SCMP_ACT_ALLOW", 717 | "args": null 718 | }, 719 | { 720 | "name": "mq_getsetattr", 721 | "action": "SCMP_ACT_ALLOW", 722 | "args": null 723 | }, 724 | { 725 | "name": "mq_notify", 726 | "action": "SCMP_ACT_ALLOW", 727 | "args": null 728 | }, 729 | { 730 | "name": "mq_open", 731 | "action": "SCMP_ACT_ALLOW", 732 | "args": null 733 | }, 734 | { 735 | "name": "mq_timedreceive", 736 | "action": "SCMP_ACT_ALLOW", 737 | "args": null 738 | }, 739 | { 740 | "name": "mq_timedsend", 741 | "action": "SCMP_ACT_ALLOW", 742 | "args": null 743 | }, 744 | { 745 | "name": "mq_unlink", 746 | "action": "SCMP_ACT_ALLOW", 747 | "args": null 748 | }, 749 | { 750 | "name": "mremap", 751 | "action": "SCMP_ACT_ALLOW", 752 | "args": null 753 | }, 754 | { 755 | "name": "msgctl", 756 | "action": "SCMP_ACT_ALLOW", 757 | "args": null 758 | }, 759 | { 760 | "name": "msgget", 761 | "action": "SCMP_ACT_ALLOW", 762 | "args": null 763 | }, 764 | { 765 | "name": "msgrcv", 766 | "action": "SCMP_ACT_ALLOW", 767 | "args": null 768 | }, 769 | { 770 | "name": "msgsnd", 771 | "action": "SCMP_ACT_ALLOW", 772 | "args": null 773 | }, 774 | { 775 | "name": "msync", 776 | "action": "SCMP_ACT_ALLOW", 777 | "args": null 778 | }, 779 | { 780 | "name": "munlock", 781 | "action": "SCMP_ACT_ALLOW", 782 | "args": null 783 | }, 784 | { 785 | "name": "munlockall", 786 | "action": "SCMP_ACT_ALLOW", 787 | "args": null 788 | }, 789 | { 790 | "name": "munmap", 791 | "action": "SCMP_ACT_ALLOW", 792 | "args": null 793 | }, 794 | { 795 | "name": "name_to_handle_at", 796 | "action": "SCMP_ACT_ALLOW", 797 | "args": null 798 | }, 799 | { 800 | "name": "nanosleep", 801 | "action": "SCMP_ACT_ALLOW", 802 | "args": null 803 | }, 804 | { 805 | "name": "newfstatat", 806 | "action": "SCMP_ACT_ALLOW", 807 | "args": null 808 | }, 809 | { 810 | "name": "_newselect", 811 | "action": "SCMP_ACT_ALLOW", 812 | "args": null 813 | }, 814 | { 815 | "name": "open", 816 | "action": "SCMP_ACT_ALLOW", 817 | "args": null 818 | }, 819 | { 820 | "name": "open_by_handle_at", 821 | "action": "SCMP_ACT_ALLOW", 822 | "args": null 823 | }, 824 | { 825 | "name": "openat", 826 | "action": "SCMP_ACT_ALLOW", 827 | "args": null 828 | }, 829 | { 830 | "name": "pause", 831 | "action": "SCMP_ACT_ALLOW", 832 | "args": null 833 | }, 834 | { 835 | "name": "pipe", 836 | "action": "SCMP_ACT_ALLOW", 837 | "args": null 838 | }, 839 | { 840 | "name": "pipe2", 841 | "action": "SCMP_ACT_ALLOW", 842 | "args": null 843 | }, 844 | { 845 | "name": "poll", 846 | "action": "SCMP_ACT_ALLOW", 847 | "args": null 848 | }, 849 | { 850 | "name": "ppoll", 851 | "action": "SCMP_ACT_ALLOW", 852 | "args": null 853 | }, 854 | { 855 | "name": "prctl", 856 | "action": "SCMP_ACT_ALLOW", 857 | "args": null 858 | }, 859 | { 860 | "name": "pread64", 861 | "action": "SCMP_ACT_ALLOW", 862 | "args": null 863 | }, 864 | { 865 | "name": "preadv", 866 | "action": "SCMP_ACT_ALLOW", 867 | "args": null 868 | }, 869 | { 870 | "name": "prlimit64", 871 | "action": "SCMP_ACT_ALLOW", 872 | "args": null 873 | }, 874 | { 875 | "name": "pselect6", 876 | "action": "SCMP_ACT_ALLOW", 877 | "args": null 878 | }, 879 | { 880 | "name": "pwrite64", 881 | "action": "SCMP_ACT_ALLOW", 882 | "args": null 883 | }, 884 | { 885 | "name": "pwritev", 886 | "action": "SCMP_ACT_ALLOW", 887 | "args": null 888 | }, 889 | { 890 | "name": "read", 891 | "action": "SCMP_ACT_ALLOW", 892 | "args": null 893 | }, 894 | { 895 | "name": "readahead", 896 | "action": "SCMP_ACT_ALLOW", 897 | "args": null 898 | }, 899 | { 900 | "name": "readlink", 901 | "action": "SCMP_ACT_ALLOW", 902 | "args": null 903 | }, 904 | { 905 | "name": "readlinkat", 906 | "action": "SCMP_ACT_ALLOW", 907 | "args": null 908 | }, 909 | { 910 | "name": "readv", 911 | "action": "SCMP_ACT_ALLOW", 912 | "args": null 913 | }, 914 | { 915 | "name": "recvfrom", 916 | "action": "SCMP_ACT_ALLOW", 917 | "args": null 918 | }, 919 | { 920 | "name": "recvmmsg", 921 | "action": "SCMP_ACT_ALLOW", 922 | "args": null 923 | }, 924 | { 925 | "name": "recvmsg", 926 | "action": "SCMP_ACT_ALLOW", 927 | "args": null 928 | }, 929 | { 930 | "name": "remap_file_pages", 931 | "action": "SCMP_ACT_ALLOW", 932 | "args": null 933 | }, 934 | { 935 | "name": "removexattr", 936 | "action": "SCMP_ACT_ALLOW", 937 | "args": null 938 | }, 939 | { 940 | "name": "rename", 941 | "action": "SCMP_ACT_ALLOW", 942 | "args": null 943 | }, 944 | { 945 | "name": "renameat", 946 | "action": "SCMP_ACT_ALLOW", 947 | "args": null 948 | }, 949 | { 950 | "name": "renameat2", 951 | "action": "SCMP_ACT_ALLOW", 952 | "args": null 953 | }, 954 | { 955 | "name": "rmdir", 956 | "action": "SCMP_ACT_ALLOW", 957 | "args": null 958 | }, 959 | { 960 | "name": "rt_sigaction", 961 | "action": "SCMP_ACT_ALLOW", 962 | "args": null 963 | }, 964 | { 965 | "name": "rt_sigpending", 966 | "action": "SCMP_ACT_ALLOW", 967 | "args": null 968 | }, 969 | { 970 | "name": "rt_sigprocmask", 971 | "action": "SCMP_ACT_ALLOW", 972 | "args": null 973 | }, 974 | { 975 | "name": "rt_sigqueueinfo", 976 | "action": "SCMP_ACT_ALLOW", 977 | "args": null 978 | }, 979 | { 980 | "name": "rt_sigreturn", 981 | "action": "SCMP_ACT_ALLOW", 982 | "args": null 983 | }, 984 | { 985 | "name": "rt_sigsuspend", 986 | "action": "SCMP_ACT_ALLOW", 987 | "args": null 988 | }, 989 | { 990 | "name": "rt_sigtimedwait", 991 | "action": "SCMP_ACT_ALLOW", 992 | "args": null 993 | }, 994 | { 995 | "name": "rt_tgsigqueueinfo", 996 | "action": "SCMP_ACT_ALLOW", 997 | "args": null 998 | }, 999 | { 1000 | "name": "sched_getaffinity", 1001 | "action": "SCMP_ACT_ALLOW", 1002 | "args": null 1003 | }, 1004 | { 1005 | "name": "sched_getattr", 1006 | "action": "SCMP_ACT_ALLOW", 1007 | "args": null 1008 | }, 1009 | { 1010 | "name": "sched_getparam", 1011 | "action": "SCMP_ACT_ALLOW", 1012 | "args": null 1013 | }, 1014 | { 1015 | "name": "sched_get_priority_max", 1016 | "action": "SCMP_ACT_ALLOW", 1017 | "args": null 1018 | }, 1019 | { 1020 | "name": "sched_get_priority_min", 1021 | "action": "SCMP_ACT_ALLOW", 1022 | "args": null 1023 | }, 1024 | { 1025 | "name": "sched_getscheduler", 1026 | "action": "SCMP_ACT_ALLOW", 1027 | "args": null 1028 | }, 1029 | { 1030 | "name": "sched_rr_get_interval", 1031 | "action": "SCMP_ACT_ALLOW", 1032 | "args": null 1033 | }, 1034 | { 1035 | "name": "sched_setaffinity", 1036 | "action": "SCMP_ACT_ALLOW", 1037 | "args": null 1038 | }, 1039 | { 1040 | "name": "sched_setattr", 1041 | "action": "SCMP_ACT_ALLOW", 1042 | "args": null 1043 | }, 1044 | { 1045 | "name": "sched_setparam", 1046 | "action": "SCMP_ACT_ALLOW", 1047 | "args": null 1048 | }, 1049 | { 1050 | "name": "sched_setscheduler", 1051 | "action": "SCMP_ACT_ALLOW", 1052 | "args": null 1053 | }, 1054 | { 1055 | "name": "sched_yield", 1056 | "action": "SCMP_ACT_ALLOW", 1057 | "args": null 1058 | }, 1059 | { 1060 | "name": "seccomp", 1061 | "action": "SCMP_ACT_ALLOW", 1062 | "args": null 1063 | }, 1064 | { 1065 | "name": "select", 1066 | "action": "SCMP_ACT_ALLOW", 1067 | "args": null 1068 | }, 1069 | { 1070 | "name": "semctl", 1071 | "action": "SCMP_ACT_ALLOW", 1072 | "args": null 1073 | }, 1074 | { 1075 | "name": "semget", 1076 | "action": "SCMP_ACT_ALLOW", 1077 | "args": null 1078 | }, 1079 | { 1080 | "name": "semop", 1081 | "action": "SCMP_ACT_ALLOW", 1082 | "args": null 1083 | }, 1084 | { 1085 | "name": "semtimedop", 1086 | "action": "SCMP_ACT_ALLOW", 1087 | "args": null 1088 | }, 1089 | { 1090 | "name": "sendfile", 1091 | "action": "SCMP_ACT_ALLOW", 1092 | "args": null 1093 | }, 1094 | { 1095 | "name": "sendfile64", 1096 | "action": "SCMP_ACT_ALLOW", 1097 | "args": null 1098 | }, 1099 | { 1100 | "name": "sendmmsg", 1101 | "action": "SCMP_ACT_ALLOW", 1102 | "args": null 1103 | }, 1104 | { 1105 | "name": "sendmsg", 1106 | "action": "SCMP_ACT_ALLOW", 1107 | "args": null 1108 | }, 1109 | { 1110 | "name": "sendto", 1111 | "action": "SCMP_ACT_ALLOW", 1112 | "args": null 1113 | }, 1114 | { 1115 | "name": "setdomainname", 1116 | "action": "SCMP_ACT_ALLOW", 1117 | "args": null 1118 | }, 1119 | { 1120 | "name": "setfsgid", 1121 | "action": "SCMP_ACT_ALLOW", 1122 | "args": null 1123 | }, 1124 | { 1125 | "name": "setfsgid32", 1126 | "action": "SCMP_ACT_ALLOW", 1127 | "args": null 1128 | }, 1129 | { 1130 | "name": "setfsuid", 1131 | "action": "SCMP_ACT_ALLOW", 1132 | "args": null 1133 | }, 1134 | { 1135 | "name": "setfsuid32", 1136 | "action": "SCMP_ACT_ALLOW", 1137 | "args": null 1138 | }, 1139 | { 1140 | "name": "setgid", 1141 | "action": "SCMP_ACT_ALLOW", 1142 | "args": null 1143 | }, 1144 | { 1145 | "name": "setgid32", 1146 | "action": "SCMP_ACT_ALLOW", 1147 | "args": null 1148 | }, 1149 | { 1150 | "name": "setgroups", 1151 | "action": "SCMP_ACT_ALLOW", 1152 | "args": null 1153 | }, 1154 | { 1155 | "name": "setgroups32", 1156 | "action": "SCMP_ACT_ALLOW", 1157 | "args": null 1158 | }, 1159 | { 1160 | "name": "sethostname", 1161 | "action": "SCMP_ACT_ALLOW", 1162 | "args": null 1163 | }, 1164 | { 1165 | "name": "setitimer", 1166 | "action": "SCMP_ACT_ALLOW", 1167 | "args": null 1168 | }, 1169 | { 1170 | "name": "setns", 1171 | "action": "SCMP_ACT_ALLOW", 1172 | "args": null 1173 | }, 1174 | { 1175 | "name": "setpgid", 1176 | "action": "SCMP_ACT_ALLOW", 1177 | "args": null 1178 | }, 1179 | { 1180 | "name": "setpriority", 1181 | "action": "SCMP_ACT_ALLOW", 1182 | "args": null 1183 | }, 1184 | { 1185 | "name": "setregid", 1186 | "action": "SCMP_ACT_ALLOW", 1187 | "args": null 1188 | }, 1189 | { 1190 | "name": "setregid32", 1191 | "action": "SCMP_ACT_ALLOW", 1192 | "args": null 1193 | }, 1194 | { 1195 | "name": "setresgid", 1196 | "action": "SCMP_ACT_ALLOW", 1197 | "args": null 1198 | }, 1199 | { 1200 | "name": "setresgid32", 1201 | "action": "SCMP_ACT_ALLOW", 1202 | "args": null 1203 | }, 1204 | { 1205 | "name": "setresuid", 1206 | "action": "SCMP_ACT_ALLOW", 1207 | "args": null 1208 | }, 1209 | { 1210 | "name": "setresuid32", 1211 | "action": "SCMP_ACT_ALLOW", 1212 | "args": null 1213 | }, 1214 | { 1215 | "name": "setreuid", 1216 | "action": "SCMP_ACT_ALLOW", 1217 | "args": null 1218 | }, 1219 | { 1220 | "name": "setreuid32", 1221 | "action": "SCMP_ACT_ALLOW", 1222 | "args": null 1223 | }, 1224 | { 1225 | "name": "setrlimit", 1226 | "action": "SCMP_ACT_ALLOW", 1227 | "args": null 1228 | }, 1229 | { 1230 | "name": "set_robust_list", 1231 | "action": "SCMP_ACT_ALLOW", 1232 | "args": null 1233 | }, 1234 | { 1235 | "name": "setsid", 1236 | "action": "SCMP_ACT_ALLOW", 1237 | "args": null 1238 | }, 1239 | { 1240 | "name": "setsockopt", 1241 | "action": "SCMP_ACT_ALLOW", 1242 | "args": null 1243 | }, 1244 | { 1245 | "name": "set_thread_area", 1246 | "action": "SCMP_ACT_ALLOW", 1247 | "args": null 1248 | }, 1249 | { 1250 | "name": "set_tid_address", 1251 | "action": "SCMP_ACT_ALLOW", 1252 | "args": null 1253 | }, 1254 | { 1255 | "name": "setuid", 1256 | "action": "SCMP_ACT_ALLOW", 1257 | "args": null 1258 | }, 1259 | { 1260 | "name": "setuid32", 1261 | "action": "SCMP_ACT_ALLOW", 1262 | "args": null 1263 | }, 1264 | { 1265 | "name": "setxattr", 1266 | "action": "SCMP_ACT_ALLOW", 1267 | "args": null 1268 | }, 1269 | { 1270 | "name": "shmat", 1271 | "action": "SCMP_ACT_ALLOW", 1272 | "args": null 1273 | }, 1274 | { 1275 | "name": "shmctl", 1276 | "action": "SCMP_ACT_ALLOW", 1277 | "args": null 1278 | }, 1279 | { 1280 | "name": "shmdt", 1281 | "action": "SCMP_ACT_ALLOW", 1282 | "args": null 1283 | }, 1284 | { 1285 | "name": "shmget", 1286 | "action": "SCMP_ACT_ALLOW", 1287 | "args": null 1288 | }, 1289 | { 1290 | "name": "shutdown", 1291 | "action": "SCMP_ACT_ALLOW", 1292 | "args": null 1293 | }, 1294 | { 1295 | "name": "sigaltstack", 1296 | "action": "SCMP_ACT_ALLOW", 1297 | "args": null 1298 | }, 1299 | { 1300 | "name": "signalfd", 1301 | "action": "SCMP_ACT_ALLOW", 1302 | "args": null 1303 | }, 1304 | { 1305 | "name": "signalfd4", 1306 | "action": "SCMP_ACT_ALLOW", 1307 | "args": null 1308 | }, 1309 | { 1310 | "name": "socket", 1311 | "action": "SCMP_ACT_ALLOW", 1312 | "args": null 1313 | }, 1314 | { 1315 | "name": "socketpair", 1316 | "action": "SCMP_ACT_ALLOW", 1317 | "args": null 1318 | }, 1319 | { 1320 | "name": "splice", 1321 | "action": "SCMP_ACT_ALLOW", 1322 | "args": null 1323 | }, 1324 | { 1325 | "name": "stat", 1326 | "action": "SCMP_ACT_ALLOW", 1327 | "args": null 1328 | }, 1329 | { 1330 | "name": "stat64", 1331 | "action": "SCMP_ACT_ALLOW", 1332 | "args": null 1333 | }, 1334 | { 1335 | "name": "statfs", 1336 | "action": "SCMP_ACT_ALLOW", 1337 | "args": null 1338 | }, 1339 | { 1340 | "name": "statfs64", 1341 | "action": "SCMP_ACT_ALLOW", 1342 | "args": null 1343 | }, 1344 | { 1345 | "name": "symlink", 1346 | "action": "SCMP_ACT_ALLOW", 1347 | "args": null 1348 | }, 1349 | { 1350 | "name": "symlinkat", 1351 | "action": "SCMP_ACT_ALLOW", 1352 | "args": null 1353 | }, 1354 | { 1355 | "name": "sync", 1356 | "action": "SCMP_ACT_ALLOW", 1357 | "args": null 1358 | }, 1359 | { 1360 | "name": "sync_file_range", 1361 | "action": "SCMP_ACT_ALLOW", 1362 | "args": null 1363 | }, 1364 | { 1365 | "name": "syncfs", 1366 | "action": "SCMP_ACT_ALLOW", 1367 | "args": null 1368 | }, 1369 | { 1370 | "name": "sysinfo", 1371 | "action": "SCMP_ACT_ALLOW", 1372 | "args": null 1373 | }, 1374 | { 1375 | "name": "syslog", 1376 | "action": "SCMP_ACT_ALLOW", 1377 | "args": null 1378 | }, 1379 | { 1380 | "name": "tee", 1381 | "action": "SCMP_ACT_ALLOW", 1382 | "args": null 1383 | }, 1384 | { 1385 | "name": "tgkill", 1386 | "action": "SCMP_ACT_ALLOW", 1387 | "args": null 1388 | }, 1389 | { 1390 | "name": "time", 1391 | "action": "SCMP_ACT_ALLOW", 1392 | "args": null 1393 | }, 1394 | { 1395 | "name": "timer_create", 1396 | "action": "SCMP_ACT_ALLOW", 1397 | "args": null 1398 | }, 1399 | { 1400 | "name": "timer_delete", 1401 | "action": "SCMP_ACT_ALLOW", 1402 | "args": null 1403 | }, 1404 | { 1405 | "name": "timerfd_create", 1406 | "action": "SCMP_ACT_ALLOW", 1407 | "args": null 1408 | }, 1409 | { 1410 | "name": "timerfd_gettime", 1411 | "action": "SCMP_ACT_ALLOW", 1412 | "args": null 1413 | }, 1414 | { 1415 | "name": "timerfd_settime", 1416 | "action": "SCMP_ACT_ALLOW", 1417 | "args": null 1418 | }, 1419 | { 1420 | "name": "timer_getoverrun", 1421 | "action": "SCMP_ACT_ALLOW", 1422 | "args": null 1423 | }, 1424 | { 1425 | "name": "timer_gettime", 1426 | "action": "SCMP_ACT_ALLOW", 1427 | "args": null 1428 | }, 1429 | { 1430 | "name": "timer_settime", 1431 | "action": "SCMP_ACT_ALLOW", 1432 | "args": null 1433 | }, 1434 | { 1435 | "name": "times", 1436 | "action": "SCMP_ACT_ALLOW", 1437 | "args": null 1438 | }, 1439 | { 1440 | "name": "tkill", 1441 | "action": "SCMP_ACT_ALLOW", 1442 | "args": null 1443 | }, 1444 | { 1445 | "name": "truncate", 1446 | "action": "SCMP_ACT_ALLOW", 1447 | "args": null 1448 | }, 1449 | { 1450 | "name": "truncate64", 1451 | "action": "SCMP_ACT_ALLOW", 1452 | "args": null 1453 | }, 1454 | { 1455 | "name": "ugetrlimit", 1456 | "action": "SCMP_ACT_ALLOW", 1457 | "args": null 1458 | }, 1459 | { 1460 | "name": "umask", 1461 | "action": "SCMP_ACT_ALLOW", 1462 | "args": null 1463 | }, 1464 | { 1465 | "name": "uname", 1466 | "action": "SCMP_ACT_ALLOW", 1467 | "args": null 1468 | }, 1469 | { 1470 | "name": "unlink", 1471 | "action": "SCMP_ACT_ALLOW", 1472 | "args": null 1473 | }, 1474 | { 1475 | "name": "unlinkat", 1476 | "action": "SCMP_ACT_ALLOW", 1477 | "args": null 1478 | }, 1479 | { 1480 | "name": "unshare", 1481 | "action": "SCMP_ACT_ALLOW", 1482 | "args": null 1483 | }, 1484 | { 1485 | "name": "utime", 1486 | "action": "SCMP_ACT_ALLOW", 1487 | "args": null 1488 | }, 1489 | { 1490 | "name": "utimensat", 1491 | "action": "SCMP_ACT_ALLOW", 1492 | "args": null 1493 | }, 1494 | { 1495 | "name": "utimes", 1496 | "action": "SCMP_ACT_ALLOW", 1497 | "args": null 1498 | }, 1499 | { 1500 | "name": "vfork", 1501 | "action": "SCMP_ACT_ALLOW", 1502 | "args": null 1503 | }, 1504 | { 1505 | "name": "vhangup", 1506 | "action": "SCMP_ACT_ALLOW", 1507 | "args": null 1508 | }, 1509 | { 1510 | "name": "vmsplice", 1511 | "action": "SCMP_ACT_ALLOW", 1512 | "args": null 1513 | }, 1514 | { 1515 | "name": "wait4", 1516 | "action": "SCMP_ACT_ALLOW", 1517 | "args": null 1518 | }, 1519 | { 1520 | "name": "waitid", 1521 | "action": "SCMP_ACT_ALLOW", 1522 | "args": null 1523 | }, 1524 | { 1525 | "name": "write", 1526 | "action": "SCMP_ACT_ALLOW", 1527 | "args": null 1528 | }, 1529 | { 1530 | "name": "writev", 1531 | "action": "SCMP_ACT_ALLOW", 1532 | "args": null 1533 | } 1534 | ] 1535 | } 1536 | -------------------------------------------------------------------------------- /cleanup: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rm -rf results/* 4 | -------------------------------------------------------------------------------- /presentation/Robot Framework.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jimpriest/robotframework-preso/161d32ed1bbce30ab7e6c32eee18150026f891c6/presentation/Robot Framework.pdf -------------------------------------------------------------------------------- /remove: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | IMAGE_NAME='robot-docker' 3 | 4 | docker ps -a | awk '{ print $1,$2 }' | grep $IMAGE_NAME:latest | awk '{print $1}' | xargs -I {} docker stop {} 5 | stop=$! 6 | wait $stop 7 | docker ps -a | awk '{ print $1,$2 }' | grep $IMAGE_NAME:latest | awk '{print $1}' | xargs -I {} docker rm {} 8 | remove=$! 9 | wait $remove 10 | docker rmi $IMAGE_NAME 11 | delete=$! 12 | wait $delete 13 | -------------------------------------------------------------------------------- /robot.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | IMAGE_NAME='robot-docker' 3 | 4 | # Modify this to point to where your Robot tests live. A /results directory will also be written to this directory with logs, results and screenshots. 5 | # Note: You do *not* have to rebuild since this script is run from local machine! 6 | 7 | # Example: TEST_PATH='/home/user/tests' 8 | # This default will use the example /test directory in this repo 9 | TEST_PATH=$(pwd) 10 | 11 | # If you want time stamped output result files add: --timestampoutputs 12 | # Default behavior is to overwrite the results each test 13 | 14 | docker run -it --security-opt seccomp=$(pwd)/chrome.json --shm-size=1gb -v $TEST_PATH:/robot $IMAGE_NAME:latest robot --outputdir results/ $@ . 15 | RESULT=$? 16 | exit $RESULT 17 | -------------------------------------------------------------------------------- /tests/a-simple/test.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Documentation A very simple test suite with a single test 3 | 4 | Library SeleniumLibrary 5 | 6 | *** Test Cases *** 7 | Open Site 8 | Open Browser https://www.thecrumb.com headlesschrome 9 | Close All Browsers 10 | -------------------------------------------------------------------------------- /tests/b-screenshot/test.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Library SeleniumLibrary 3 | 4 | *** Test Cases *** 5 | Open Site 6 | Open Browser https://www.thecrumb.com headlesschrome 7 | Capture Page Screenshot 8 | Close All Browsers 9 | -------------------------------------------------------------------------------- /tests/c-screenresolution/test.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Library SeleniumLibrary 3 | 4 | *** Test Cases *** 5 | Open Site 6 | Open Browser https://www.thecrumb.com headlesschrome 7 | Set Window Size 1280 800 8 | Capture Page Screenshot 9 | Close All Browsers 10 | -------------------------------------------------------------------------------- /tests/d-variables/test.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Library SeleniumLibrary 3 | 4 | *** Variables *** 5 | ${URL} https://www.thecrumb.com 6 | ${BROWSER} headlesschrome 7 | 8 | *** Test Cases *** 9 | Open Site 10 | Open Browser ${URL} ${BROWSER} 11 | Set Window Size 1280 800 12 | Capture Page Screenshot 13 | Close All Browsers -------------------------------------------------------------------------------- /tests/e-keywords/test.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Library SeleniumLibrary 3 | 4 | *** Variables *** 5 | ${URL} https://www.thecrumb.com 6 | ${BROWSER} headlesschrome 7 | 8 | *** Test Cases *** 9 | Open Site 10 | Setup Browser 11 | Close All Browsers 12 | 13 | *** Keywords *** 14 | Setup Browser 15 | Open Browser ${URL} ${BROWSER} 16 | Set Window Size 1280 800 17 | Capture Page Screenshot -------------------------------------------------------------------------------- /tests/f-setupteardown/test.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Library SeleniumLibrary 3 | Library DateTime 4 | 5 | Suite Setup Suite Setup 6 | Test Setup Test Setup 7 | Test Teardown Test Teardown 8 | Suite Teardown Suite Teardown 9 | 10 | 11 | *** Variables *** 12 | ${URL} https://www.thecrumb.com 13 | ${BROWSER} headlesschrome 14 | 15 | 16 | *** Test Cases *** 17 | Open Site 18 | Log to console Running tests! 19 | 20 | Another Test Case 21 | Should Be True 1<2 22 | 23 | *** Keywords *** 24 | Setup Browser 25 | Open Browser ${URL} ${BROWSER} 26 | Set Window Size 1280 800 27 | 28 | Suite Setup 29 | [Documentation] This will run before every suite 30 | Log to console URL: ${URL} 31 | Log to console Browser: ${BROWSER} 32 | ${time} = Get Time 33 | ${time} = Convert Date ${time} result_format=%I:%M %p 34 | Log to console ========================================================= 35 | Log to console Starting test (Suite Setup) @ ${time}\n 36 | 37 | Test Setup 38 | [Documentation] This will run before every test 39 | Log to console \n========================================================= 40 | Log to console Test Setup\n 41 | Setup Browser 42 | 43 | Test Teardown 44 | [Documentation] This will run after every test 45 | Log to console \n========================================================= 46 | Log to console Test Teardown\n 47 | Capture Page Screenshot 48 | Close All Browsers 49 | 50 | Suite Teardown 51 | [Documentation] This will run after every suite 52 | ${time} = Get Time 53 | ${time} = Convert Date ${time} result_format=%I:%M %p 54 | Log to console \nEnding test (Suite Teardown) @ ${time} 55 | Log to console =========================================================\n 56 | -------------------------------------------------------------------------------- /tests/g-resource/common.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Library SeleniumLibrary 3 | Library DateTime 4 | 5 | *** Variables *** 6 | ${URL} https://www.thecrumb.com 7 | ${BROWSER} headlesschrome 8 | 9 | *** Keywords *** 10 | Setup Browser 11 | Open Browser ${URL} ${BROWSER} 12 | Set Window Size 1280 800 13 | 14 | Suite Setup 15 | [Documentation] This will run before every suite 16 | Log to console URL: ${URL} 17 | Log to console Browser: ${BROWSER} 18 | ${time} = Get Time 19 | ${time} = Convert Date ${time} result_format=%I:%M %p 20 | Log to console ========================================================= 21 | Log to console Starting test (Suite Setup) @ ${time}\n 22 | 23 | Test Setup 24 | [Documentation] This will run before every test 25 | Log to console \n========================================================= 26 | Log to console Test Setup\n 27 | Setup Browser 28 | 29 | Test Teardown 30 | [Documentation] This will run after every test 31 | Log to console \n========================================================= 32 | Log to console Test Teardown\n 33 | Capture Page Screenshot 34 | Close All Browsers 35 | 36 | Suite Teardown 37 | [Documentation] This will run before every suite 38 | ${time} = Get Time 39 | ${time} = Convert Date ${time} result_format=%I:%M %p 40 | Log to console \nEnding test (Suite Teardown) @ ${time} 41 | Log to console =========================================================\n 42 | -------------------------------------------------------------------------------- /tests/g-resource/test.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Resource common.robot 3 | 4 | Suite Setup Suite Setup 5 | Test Setup Test Setup 6 | Test Teardown Test Teardown 7 | Suite Teardown Suite Teardown 8 | 9 | *** Test Cases *** 10 | Open Site 11 | Log to console Running tests! 12 | 13 | Another Test Case 14 | Should Be True 1<2 -------------------------------------------------------------------------------- /tests/h-form/common.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Library SeleniumLibrary 3 | Library DateTime 4 | Library FakerLibrary locale=en_US 5 | Library String 6 | 7 | *** Variables *** 8 | ${URL} https://form.jotform.com/92783859042165 9 | ${BROWSER} headlesschrome 10 | 11 | *** Keywords *** 12 | Setup Browser 13 | Open Browser ${URL} ${BROWSER} 14 | Set Window Size 1280 800 15 | 16 | Suite Setup 17 | [Documentation] This will run before every suite 18 | Initialize Test Data 19 | Log to console URL: ${URL} 20 | Log to console Browser: ${BROWSER} 21 | ${time} = Get Time 22 | ${time} = Convert Date ${time} result_format=%I:%M %p 23 | Log to console ========================================================= 24 | Log to console Starting test (Suite Setup) @ ${time}\n 25 | 26 | Test Setup 27 | [Documentation] This will run before every test 28 | 29 | Log to console \n========================================================= 30 | Log to console Test Setup\n 31 | Setup Browser 32 | 33 | Test Teardown 34 | [Documentation] This will run after every test 35 | Log to console \n========================================================= 36 | Log to console Test Teardown\n 37 | Capture Page Screenshot 38 | Close All Browsers 39 | 40 | Suite Teardown 41 | [Documentation] This will run before every suite 42 | ${time} = Get Time 43 | ${time} = Convert Date ${time} result_format=%I:%M %p 44 | Log to console \nEnding test (Suite Teardown) @ ${time} 45 | Log to console =========================================================\n 46 | 47 | Initialize Test Data 48 | [Documentation] This sets up data used for testing 49 | ... - Faker variables for testing 50 | 51 | Log to console ========================================================= 52 | Log to console \nInitializing test data 53 | Log to console =========================================================\n 54 | 55 | ${FAKER_FIRST_NAME} = FakerLibrary.first_name 56 | ${FAKER_LAST_NAME} = FakerLibrary.last_name 57 | 58 | ${FAKER_STREET_ADDRESS} = FakerLibrary.street_address 59 | ${FAKER_PARAGRAPH} = FakerLibrary.paragraph 60 | ${FAKER_SENTENCE} = FakerLibrary.sentence 61 | ${FAKER_CITY} = FakerLibrary.city 62 | ${FAKER_STATE} = FakerLibrary.state 63 | ${FAKER_COUNTRY} = FakerLibrary.country 64 | ${FAKER_ZIPCODE} = FakerLibrary.postcode 65 | 66 | # Faker email occasionally generates an invalid email 67 | # So we'll create our own bogus email instead 68 | # ${EMAIL} = FakerLibrary.safe_email 69 | ${FAKER_EMAIL_DOMAIN} = FakerLibrary.free_email_domain 70 | ${FAKER_EMAIL}= catenate ${FAKER_FIRST_NAME}.${FAKER_LAST_NAME}@${FAKER_EMAIL_DOMAIN} 71 | 72 | # Cobble together a phone number in same format form expects 73 | ${FAKER_AREA_CODE} = FakerLibrary.random_number 3 74 | ${FAKER_PHONE_NUMBER1} = FakerLibrary.random_number 3 75 | ${FAKER_PHONE_NUMBER2} = FakerLibrary.random_number 4 76 | ${FAKER_PHONE_NUMBER}= catenate ${FAKER_PHONE_NUMBER1}-${FAKER_PHONE_NUMBER2} 77 | 78 | 79 | ${RANDOM} Generate random string 1 01 80 | 81 | Set suite variable ${FAKER_FIRST_NAME} 82 | Set suite variable ${FAKER_LAST_NAME} 83 | Set suite variable ${FAKER_AREA_CODE} 84 | Set suite variable ${FAKER_PHONE_NUMBER} 85 | Set suite variable ${FAKER_STREET_ADDRESS} 86 | Set suite variable ${FAKER_PARAGRAPH} 87 | Set suite variable ${FAKER_SENTENCE} 88 | Set suite variable ${FAKER_CITY} 89 | Set suite variable ${FAKER_STATE} 90 | Set suite variable ${FAKER_COUNTRY} 91 | Set suite variable ${FAKER_ZIPCODE} 92 | Set suite variable ${FAKER_EMAIL} 93 | Set suite variable ${RANDOM} 94 | -------------------------------------------------------------------------------- /tests/h-form/test.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Documentation Test Jot contact form 3 | ... 4 | ... This test will generate fake data and fill out a form 5 | 6 | Resource common.robot 7 | 8 | Suite Setup Suite Setup 9 | Test Setup Test Setup 10 | Test Teardown Test Teardown 11 | Suite Teardown Suite Teardown 12 | 13 | 14 | *** Variables *** 15 | ${firstname} id=first_2 16 | ${lastname} id=last_2 17 | 18 | ${email} id=input_3 19 | 20 | ${areacode} id=input_5_area 21 | ${phonenumber} id=input_5_phone 22 | 23 | ${address1} id=input_4_addr_line1 24 | ${address2} id=input_4_addr_line2 25 | ${city} id=input_4_city 26 | ${state} id=input_4_state 27 | ${zipcode} id=input_4_postal 28 | ${country} id=input_4_country 29 | ${country_select} United States 30 | 31 | ${robot_type} id=input_15_ # we'll make this dynamic in the test below 32 | ${robot_color} id=input_16 33 | 34 | @{small_robot_color_select} Red Blue Green Black Magenta 35 | 36 | ${additional_request} id=input_14 37 | 38 | ${submit_form} id=input_13 39 | 40 | *** Test Cases *** 41 | Order Robot 42 | [Documentation] User should be able to order a robot 43 | Input text ${firstname} ${FAKER_FIRST_NAME} 44 | Input text ${lastname} ${FAKER_LAST_NAME} 45 | Input text ${email} ${FAKER_EMAIL} 46 | Input text ${areacode} ${FAKER_AREA_CODE} 47 | Input text ${phonenumber} ${FAKER_PHONE_NUMBER} 48 | Input text ${address1} ${FAKER_STREET_ADDRESS} 49 | Input text ${city} ${FAKER_CITY} 50 | Input text ${state} ${FAKER_STATE} 51 | Input text ${zipcode} ${FAKER_ZIPCODE} 52 | Select from list by value ${country} United States 53 | Click element ${robot_type}${RANDOM} 54 | Select from list by value ${robot_color} Blue 55 | Input text ${additional_request} ${FAKER_PARAGRAPH} 56 | Capture page screenshot 57 | Click element ${submit_form} 58 | Title Should Be Thank You -------------------------------------------------------------------------------- /tests/i-form/common.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Library SeleniumLibrary 3 | Library DateTime 4 | Library FakerLibrary locale=en_US 5 | Library String 6 | 7 | *** Variables *** 8 | ${URL} https://form.jotform.com/92783859042165 9 | ${BROWSER} headlesschrome 10 | 11 | *** Keywords *** 12 | Setup Browser 13 | Open Browser ${URL} ${BROWSER} 14 | Set Window Size 1280 1900 15 | 16 | Suite Setup 17 | [Documentation] This will run before every suite 18 | Initialize Test Data 19 | Log to console URL: ${URL} 20 | Log to console Browser: ${BROWSER} 21 | ${time} = Get Time 22 | ${time} = Convert Date ${time} result_format=%I:%M %p 23 | Log to console ========================================================= 24 | Log to console Starting test (Suite Setup) @ ${time}\n 25 | 26 | Test Setup 27 | [Documentation] This will run before every test 28 | 29 | Log to console \n========================================================= 30 | Log to console Test Setup\n 31 | Setup Browser 32 | 33 | Test Teardown 34 | [Documentation] This will run after every test 35 | Log to console \n========================================================= 36 | Log to console Test Teardown\n 37 | Capture Page Screenshot 38 | Close All Browsers 39 | 40 | Suite Teardown 41 | [Documentation] This will run before every suite 42 | ${time} = Get Time 43 | ${time} = Convert Date ${time} result_format=%I:%M %p 44 | Log to console \nEnding test (Suite Teardown) @ ${time} 45 | Log to console =========================================================\n 46 | 47 | Initialize Test Data 48 | [Documentation] This sets up data used for testing 49 | ... - Faker variables for testing 50 | 51 | Log to console ========================================================= 52 | Log to console \nInitializing test data 53 | Log to console =========================================================\n 54 | 55 | ${FAKER_FIRST_NAME} = FakerLibrary.first_name 56 | ${FAKER_LAST_NAME} = FakerLibrary.last_name 57 | 58 | ${FAKER_STREET_ADDRESS} = FakerLibrary.street_address 59 | ${FAKER_PARAGRAPH} = FakerLibrary.paragraph 60 | ${FAKER_SENTENCE} = FakerLibrary.sentence 61 | ${FAKER_CITY} = FakerLibrary.city 62 | ${FAKER_STATE} = FakerLibrary.state 63 | ${FAKER_COUNTRY} = FakerLibrary.country 64 | ${FAKER_ZIPCODE} = FakerLibrary.postcode 65 | 66 | # Faker email occasionally generates an invalid email 67 | # So we'll create our own bogus email instead 68 | # ${EMAIL} = FakerLibrary.safe_email 69 | ${FAKER_EMAIL_DOMAIN} = FakerLibrary.free_email_domain 70 | ${FAKER_EMAIL}= catenate ${FAKER_FIRST_NAME}.${FAKER_LAST_NAME}@${FAKER_EMAIL_DOMAIN} 71 | 72 | # Cobble together a phone number in same format form expects 73 | ${FAKER_AREA_CODE} = FakerLibrary.random_number 3 74 | ${FAKER_PHONE_NUMBER1} = FakerLibrary.random_number 3 75 | ${FAKER_PHONE_NUMBER2} = FakerLibrary.random_number 4 76 | ${FAKER_PHONE_NUMBER}= catenate ${FAKER_PHONE_NUMBER1}-${FAKER_PHONE_NUMBER2} 77 | 78 | 79 | ${RANDOM} Generate random string 1 01 80 | 81 | Set suite variable ${FAKER_FIRST_NAME} 82 | Set suite variable ${FAKER_LAST_NAME} 83 | Set suite variable ${FAKER_AREA_CODE} 84 | Set suite variable ${FAKER_PHONE_NUMBER} 85 | Set suite variable ${FAKER_STREET_ADDRESS} 86 | Set suite variable ${FAKER_PARAGRAPH} 87 | Set suite variable ${FAKER_SENTENCE} 88 | Set suite variable ${FAKER_CITY} 89 | Set suite variable ${FAKER_STATE} 90 | Set suite variable ${FAKER_COUNTRY} 91 | Set suite variable ${FAKER_ZIPCODE} 92 | Set suite variable ${FAKER_EMAIL} 93 | Set suite variable ${RANDOM} 94 | -------------------------------------------------------------------------------- /tests/i-form/test.robot: -------------------------------------------------------------------------------- 1 | *** Settings *** 2 | Documentation Test Jot contact form 3 | ... 4 | ... This test will generate fake data and fill out a form 5 | 6 | Resource common.robot 7 | 8 | Suite Setup Suite Setup 9 | Test Setup Test Setup 10 | Test Teardown Test Teardown 11 | Suite Teardown Suite Teardown 12 | 13 | 14 | *** Variables *** 15 | ${firstname} id=first_2 16 | ${lastname} id=last_2 17 | 18 | ${email} id=input_3 19 | 20 | ${areacode} id=input_5_area 21 | ${phonenumber} id=input_5_phone 22 | 23 | ${address1} id=input_4_addr_line1 24 | ${address2} id=input_4_addr_line2 25 | ${city} id=input_4_city 26 | ${state} id=input_4_state 27 | ${zipcode} id=input_4_postal 28 | ${country} id=input_4_country 29 | ${country_select} United States 30 | 31 | ${robot_type} id=input_15_ # we'll make this dynamic in the test below 32 | ${robot_color} id=input_16 33 | 34 | @{small_robot_color_select} Red Blue Green Black Magenta 35 | 36 | ${additional_request} id=input_14 37 | 38 | ${submit_form} id=input_13 39 | 40 | *** Test Cases *** 41 | Order Robot 42 | [Documentation] User should be able to order a robot 43 | Fill out form 44 | Check for confirmation 45 | 46 | *** Keywords *** 47 | Fill out form 48 | Input text ${firstname} ${FAKER_FIRST_NAME} 49 | Input text ${lastname} ${FAKER_LAST_NAME} 50 | Input text ${email} ${FAKER_EMAIL} 51 | Input text ${areacode} ${FAKER_AREA_CODE} 52 | Input text ${phonenumber} ${FAKER_PHONE_NUMBER} 53 | Input text ${address1} ${FAKER_STREET_ADDRESS} 54 | Input text ${city} ${FAKER_CITY} 55 | Input text ${state} ${FAKER_STATE} 56 | Input text ${zipcode} ${FAKER_ZIPCODE} 57 | Select from list by value ${country} United States 58 | Click element ${robot_type}${RANDOM} 59 | Select from list by value ${robot_color} Blue 60 | Input text ${additional_request} ${FAKER_PARAGRAPH} 61 | 62 | Check for confirmation 63 | Click element ${submit_form} 64 | Title Should Be Thank You 65 | --------------------------------------------------------------------------------