github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/systemd/generate/containers_test.go (about) 1 package generate 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hanks177/podman/v4/pkg/domain/entities" 8 "github.com/hanks177/podman/v4/pkg/systemd/define" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestValidateRestartPolicyContainer(t *testing.T) { 13 type containerInfo struct { 14 restart string 15 } 16 tests := []struct { 17 name string 18 containerInfo containerInfo 19 wantErr bool 20 }{ 21 {"good-on", containerInfo{restart: "no"}, false}, 22 {"good-on-success", containerInfo{restart: "on-success"}, false}, 23 {"good-on-failure", containerInfo{restart: "on-failure"}, false}, 24 {"good-on-abnormal", containerInfo{restart: "on-abnormal"}, false}, 25 {"good-on-watchdog", containerInfo{restart: "on-watchdog"}, false}, 26 {"good-on-abort", containerInfo{restart: "on-abort"}, false}, 27 {"good-always", containerInfo{restart: "always"}, false}, 28 {"fail", containerInfo{restart: "foobar"}, true}, 29 {"failblank", containerInfo{restart: ""}, true}, 30 } 31 for _, tt := range tests { 32 test := tt 33 t.Run(tt.name, func(t *testing.T) { 34 if err := validateRestartPolicy(test.containerInfo.restart); (err != nil) != test.wantErr { 35 t.Errorf("ValidateRestartPolicy() error = %v, wantErr %v", err, test.wantErr) 36 } 37 }) 38 } 39 } 40 41 func TestCreateContainerSystemdUnit(t *testing.T) { 42 serviceInfo := `# container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 43 ` 44 headerInfo := `# autogenerated by Podman CI 45 ` 46 goodIDContent := ` 47 [Unit] 48 Description=Podman container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 49 Documentation=man:podman-generate-systemd(1) 50 Wants=network-online.target 51 After=network-online.target 52 RequiresMountsFor=/var/run/containers/storage 53 54 [Service] 55 Environment=PODMAN_SYSTEMD_UNIT=%n 56 Restart=on-failure 57 TimeoutStopSec=82 58 ExecStart=/usr/bin/podman start 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401 59 ExecStop=/usr/bin/podman stop -t 22 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401 60 ExecStopPost=/usr/bin/podman stop -t 22 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401 61 PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 62 Type=forking 63 64 [Install] 65 WantedBy=default.target 66 ` 67 goodID := serviceInfo + headerInfo + goodIDContent 68 goodIDNoHeaderInfo := serviceInfo + goodIDContent 69 70 goodName := `# container-foobar.service 71 # autogenerated by Podman CI 72 73 [Unit] 74 Description=Podman container-foobar.service 75 Documentation=man:podman-generate-systemd(1) 76 Wants=network-online.target 77 After=network-online.target 78 RequiresMountsFor=/var/run/containers/storage 79 80 [Service] 81 Environment=PODMAN_SYSTEMD_UNIT=%n 82 Restart=on-failure 83 TimeoutStopSec=70 84 ExecStart=/usr/bin/podman start foobar 85 ExecStop=/usr/bin/podman stop -t 10 foobar 86 ExecStopPost=/usr/bin/podman stop -t 10 foobar 87 PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 88 Type=forking 89 90 [Install] 91 WantedBy=default.target 92 ` 93 94 goodNameEmptyContainerPrefix := `# foobar.service 95 # autogenerated by Podman CI 96 97 [Unit] 98 Description=Podman foobar.service 99 Documentation=man:podman-generate-systemd(1) 100 Wants=network-online.target 101 After=network-online.target 102 RequiresMountsFor=/var/run/containers/storage 103 104 [Service] 105 Environment=PODMAN_SYSTEMD_UNIT=%n 106 Restart=on-failure 107 TimeoutStopSec=70 108 ExecStart=/usr/bin/podman start foobar 109 ExecStop=/usr/bin/podman stop -t 10 foobar 110 ExecStopPost=/usr/bin/podman stop -t 10 foobar 111 PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 112 Type=forking 113 114 [Install] 115 WantedBy=default.target 116 ` 117 118 goodNameCustomWants := `# container-foobar.service 119 # autogenerated by Podman CI 120 121 [Unit] 122 Description=Podman container-foobar.service 123 Documentation=man:podman-generate-systemd(1) 124 Wants=network-online.target 125 After=network-online.target 126 RequiresMountsFor=/var/run/containers/storage 127 128 # User-defined dependencies 129 Wants=a.service b.service c.target 130 131 [Service] 132 Environment=PODMAN_SYSTEMD_UNIT=%n 133 Restart=on-failure 134 TimeoutStopSec=70 135 ExecStart=/usr/bin/podman start foobar 136 ExecStop=/usr/bin/podman stop -t 10 foobar 137 ExecStopPost=/usr/bin/podman stop -t 10 foobar 138 PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 139 Type=forking 140 141 [Install] 142 WantedBy=default.target 143 ` 144 145 goodNameCustomAfter := `# container-foobar.service 146 # autogenerated by Podman CI 147 148 [Unit] 149 Description=Podman container-foobar.service 150 Documentation=man:podman-generate-systemd(1) 151 Wants=network-online.target 152 After=network-online.target 153 RequiresMountsFor=/var/run/containers/storage 154 155 # User-defined dependencies 156 After=a.service b.service c.target 157 158 [Service] 159 Environment=PODMAN_SYSTEMD_UNIT=%n 160 Restart=on-failure 161 TimeoutStopSec=70 162 ExecStart=/usr/bin/podman start foobar 163 ExecStop=/usr/bin/podman stop -t 10 foobar 164 ExecStopPost=/usr/bin/podman stop -t 10 foobar 165 PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 166 Type=forking 167 168 [Install] 169 WantedBy=default.target 170 ` 171 172 goodNameCustomRequires := `# container-foobar.service 173 # autogenerated by Podman CI 174 175 [Unit] 176 Description=Podman container-foobar.service 177 Documentation=man:podman-generate-systemd(1) 178 Wants=network-online.target 179 After=network-online.target 180 RequiresMountsFor=/var/run/containers/storage 181 182 # User-defined dependencies 183 Requires=a.service b.service c.target 184 185 [Service] 186 Environment=PODMAN_SYSTEMD_UNIT=%n 187 Restart=on-failure 188 TimeoutStopSec=70 189 ExecStart=/usr/bin/podman start foobar 190 ExecStop=/usr/bin/podman stop -t 10 foobar 191 ExecStopPost=/usr/bin/podman stop -t 10 foobar 192 PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 193 Type=forking 194 195 [Install] 196 WantedBy=default.target 197 ` 198 199 goodNameCustomDependencies := `# container-foobar.service 200 # autogenerated by Podman CI 201 202 [Unit] 203 Description=Podman container-foobar.service 204 Documentation=man:podman-generate-systemd(1) 205 Wants=network-online.target 206 After=network-online.target 207 RequiresMountsFor=/var/run/containers/storage 208 209 # User-defined dependencies 210 Wants=a.service b.service c.target 211 After=a.service b.service c.target 212 Requires=a.service b.service c.target 213 214 [Service] 215 Environment=PODMAN_SYSTEMD_UNIT=%n 216 Restart=on-failure 217 TimeoutStopSec=70 218 ExecStart=/usr/bin/podman start foobar 219 ExecStop=/usr/bin/podman stop -t 10 foobar 220 ExecStopPost=/usr/bin/podman stop -t 10 foobar 221 PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 222 Type=forking 223 224 [Install] 225 WantedBy=default.target 226 ` 227 228 goodNameBoundTo := `# container-foobar.service 229 # autogenerated by Podman CI 230 231 [Unit] 232 Description=Podman container-foobar.service 233 Documentation=man:podman-generate-systemd(1) 234 Wants=network-online.target 235 After=network-online.target 236 RequiresMountsFor=/var/run/containers/storage 237 BindsTo=a.service b.service c.service pod.service 238 After=a.service b.service c.service pod.service 239 240 [Service] 241 Environment=PODMAN_SYSTEMD_UNIT=%n 242 Restart=on-failure 243 TimeoutStopSec=70 244 ExecStart=/usr/bin/podman start foobar 245 ExecStop=/usr/bin/podman stop -t 10 foobar 246 ExecStopPost=/usr/bin/podman stop -t 10 foobar 247 PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 248 Type=forking 249 250 [Install] 251 WantedBy=default.target 252 ` 253 254 goodWithNameAndGeneric := `# jadda-jadda.service 255 # autogenerated by Podman CI 256 257 [Unit] 258 Description=Podman jadda-jadda.service 259 Documentation=man:podman-generate-systemd(1) 260 Wants=network-online.target 261 After=network-online.target 262 RequiresMountsFor=/var/run/containers/storage 263 264 [Service] 265 Environment=PODMAN_SYSTEMD_UNIT=%n 266 Restart=on-failure 267 TimeoutStopSec=70 268 ExecStartPre=/bin/rm -f %t/%n.ctr-id 269 ExecStart=/usr/bin/podman container run \ 270 --cidfile=%t/%n.ctr-id \ 271 --cgroups=no-conmon \ 272 --rm \ 273 --sdnotify=conmon \ 274 -d \ 275 --replace \ 276 --name jadda-jadda \ 277 --hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space" 278 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 279 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 280 Type=notify 281 NotifyAccess=all 282 283 [Install] 284 WantedBy=default.target 285 ` 286 287 goodWithNameAndSdnotify := `# jadda-jadda.service 288 # autogenerated by Podman CI 289 290 [Unit] 291 Description=Podman jadda-jadda.service 292 Documentation=man:podman-generate-systemd(1) 293 Wants=network-online.target 294 After=network-online.target 295 RequiresMountsFor=/var/run/containers/storage 296 297 [Service] 298 Environment=PODMAN_SYSTEMD_UNIT=%n 299 Restart=on-failure 300 TimeoutStopSec=70 301 ExecStartPre=/bin/rm -f %t/%n.ctr-id 302 ExecStart=/usr/bin/podman container run \ 303 --cidfile=%t/%n.ctr-id \ 304 --cgroups=no-conmon \ 305 --rm \ 306 -d \ 307 --replace \ 308 --sdnotify=container \ 309 --name jadda-jadda \ 310 --hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space" 311 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 312 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 313 Type=notify 314 NotifyAccess=all 315 316 [Install] 317 WantedBy=default.target 318 ` 319 320 goodWithExplicitShortDetachParam := `# jadda-jadda.service 321 # autogenerated by Podman CI 322 323 [Unit] 324 Description=Podman jadda-jadda.service 325 Documentation=man:podman-generate-systemd(1) 326 Wants=network-online.target 327 After=network-online.target 328 RequiresMountsFor=/var/run/containers/storage 329 330 [Service] 331 Environment=PODMAN_SYSTEMD_UNIT=%n 332 Restart=on-failure 333 TimeoutStopSec=70 334 ExecStartPre=/bin/rm -f %t/%n.ctr-id 335 ExecStart=/usr/bin/podman run \ 336 --cidfile=%t/%n.ctr-id \ 337 --cgroups=no-conmon \ 338 --rm \ 339 --sdnotify=conmon \ 340 --replace \ 341 -d \ 342 --name jadda-jadda \ 343 --hostname hello-world awesome-image:latest command arg1 ... argN 344 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 345 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 346 Type=notify 347 NotifyAccess=all 348 349 [Install] 350 WantedBy=default.target 351 ` 352 353 goodNameNewWithPodFile := `# jadda-jadda.service 354 # autogenerated by Podman CI 355 356 [Unit] 357 Description=Podman jadda-jadda.service 358 Documentation=man:podman-generate-systemd(1) 359 Wants=network-online.target 360 After=network-online.target 361 RequiresMountsFor=/var/run/containers/storage 362 363 [Service] 364 Environment=PODMAN_SYSTEMD_UNIT=%n 365 Restart=on-failure 366 TimeoutStopSec=70 367 ExecStartPre=/bin/rm -f %t/%n.ctr-id 368 ExecStart=/usr/bin/podman run \ 369 --cidfile=%t/%n.ctr-id \ 370 --cgroups=no-conmon \ 371 --rm \ 372 --pod-id-file %t/pod-foobar.pod-id-file \ 373 --sdnotify=conmon \ 374 --replace \ 375 -d \ 376 --name jadda-jadda \ 377 --hostname hello-world awesome-image:latest command arg1 ... argN 378 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 379 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 380 Type=notify 381 NotifyAccess=all 382 383 [Install] 384 WantedBy=default.target 385 ` 386 387 goodNameNewDetach := `# jadda-jadda.service 388 # autogenerated by Podman CI 389 390 [Unit] 391 Description=Podman jadda-jadda.service 392 Documentation=man:podman-generate-systemd(1) 393 Wants=network-online.target 394 After=network-online.target 395 RequiresMountsFor=/var/run/containers/storage 396 397 [Service] 398 Environment=PODMAN_SYSTEMD_UNIT=%n 399 Restart=on-failure 400 TimeoutStopSec=70 401 ExecStartPre=/bin/rm -f %t/%n.ctr-id 402 ExecStart=/usr/bin/podman run \ 403 --cidfile=%t/%n.ctr-id \ 404 --cgroups=no-conmon \ 405 --rm \ 406 --sdnotify=conmon \ 407 --replace \ 408 --detach \ 409 --name jadda-jadda \ 410 --hostname hello-world awesome-image:latest command arg1 ... argN 411 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 412 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 413 Type=notify 414 NotifyAccess=all 415 416 [Install] 417 WantedBy=default.target 418 ` 419 420 goodIDNew := `# container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 421 # autogenerated by Podman CI 422 423 [Unit] 424 Description=Podman container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 425 Documentation=man:podman-generate-systemd(1) 426 Wants=network-online.target 427 After=network-online.target 428 RequiresMountsFor=/var/run/containers/storage 429 430 [Service] 431 Environment=PODMAN_SYSTEMD_UNIT=%n 432 Restart=on-failure 433 TimeoutStopSec=70 434 ExecStartPre=/bin/rm -f %t/%n.ctr-id 435 ExecStart=/usr/bin/podman run \ 436 --cidfile=%t/%n.ctr-id \ 437 --cgroups=no-conmon \ 438 --rm \ 439 --sdnotify=conmon \ 440 -d awesome-image:latest 441 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 442 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 443 Type=notify 444 NotifyAccess=all 445 446 [Install] 447 WantedBy=default.target 448 ` 449 450 genGoodNewDetach := func(detachparam string) string { 451 goodNewDetach := `# jadda-jadda.service 452 # autogenerated by Podman CI 453 454 [Unit] 455 Description=Podman jadda-jadda.service 456 Documentation=man:podman-generate-systemd(1) 457 Wants=network-online.target 458 After=network-online.target 459 RequiresMountsFor=/var/run/containers/storage 460 461 [Service] 462 Environment=PODMAN_SYSTEMD_UNIT=%n 463 Restart=on-failure 464 TimeoutStopSec=102 465 ExecStartPre=/bin/rm -f %t/%n.ctr-id 466 ExecStart=/usr/bin/podman run \ 467 --cidfile=%t/%n.ctr-id \ 468 --cgroups=no-conmon \ 469 --rm \ 470 --sdnotify=conmon \ 471 ` + 472 detachparam + 473 ` awesome-image:latest 474 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 475 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 476 Type=notify 477 NotifyAccess=all 478 479 [Install] 480 WantedBy=default.target 481 ` 482 return goodNewDetach 483 } 484 485 goodNameNewDetachFalseWithCmd := `# jadda-jadda.service 486 # autogenerated by Podman CI 487 488 [Unit] 489 Description=Podman jadda-jadda.service 490 Documentation=man:podman-generate-systemd(1) 491 Wants=network-online.target 492 After=network-online.target 493 RequiresMountsFor=/var/run/containers/storage 494 495 [Service] 496 Environment=PODMAN_SYSTEMD_UNIT=%n 497 Restart=on-failure 498 TimeoutStopSec=102 499 ExecStartPre=/bin/rm -f %t/%n.ctr-id 500 ExecStart=/usr/bin/podman run \ 501 --cidfile=%t/%n.ctr-id \ 502 --cgroups=no-conmon \ 503 --rm \ 504 --sdnotify=conmon \ 505 -d \ 506 --replace \ 507 --name test \ 508 -p 80:80 awesome-image:latest somecmd \ 509 --detach=false 510 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 511 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 512 Type=notify 513 NotifyAccess=all 514 515 [Install] 516 WantedBy=default.target 517 ` 518 519 goodNewRootFlags := `# jadda-jadda.service 520 # autogenerated by Podman CI 521 522 [Unit] 523 Description=Podman jadda-jadda.service 524 Documentation=man:podman-generate-systemd(1) 525 Wants=network-online.target 526 After=network-online.target 527 RequiresMountsFor=/var/run/containers/storage 528 529 [Service] 530 Environment=PODMAN_SYSTEMD_UNIT=%n 531 Restart=on-failure 532 TimeoutStopSec=102 533 ExecStartPre=/bin/rm -f %t/%n.ctr-id 534 ExecStart=/usr/bin/podman \ 535 --events-backend none \ 536 --runroot /root run \ 537 --cidfile=%t/%n.ctr-id \ 538 --cgroups=no-conmon \ 539 --rm \ 540 --sdnotify=conmon \ 541 -d awesome-image:latest 542 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 543 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 544 Type=notify 545 NotifyAccess=all 546 547 [Install] 548 WantedBy=default.target 549 ` 550 551 goodContainerCreate := `# jadda-jadda.service 552 # autogenerated by Podman CI 553 554 [Unit] 555 Description=Podman jadda-jadda.service 556 Documentation=man:podman-generate-systemd(1) 557 Wants=network-online.target 558 After=network-online.target 559 RequiresMountsFor=/var/run/containers/storage 560 561 [Service] 562 Environment=PODMAN_SYSTEMD_UNIT=%n 563 Restart=on-failure 564 TimeoutStopSec=70 565 ExecStartPre=/bin/rm -f %t/%n.ctr-id 566 ExecStart=/usr/bin/podman container run \ 567 --cidfile=%t/%n.ctr-id \ 568 --cgroups=no-conmon \ 569 --rm \ 570 --sdnotify=conmon \ 571 -d awesome-image:latest 572 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 573 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 574 Type=notify 575 NotifyAccess=all 576 577 [Install] 578 WantedBy=default.target 579 ` 580 581 goodNewWithJournaldTag := `# jadda-jadda.service 582 # autogenerated by Podman CI 583 584 [Unit] 585 Description=Podman jadda-jadda.service 586 Documentation=man:podman-generate-systemd(1) 587 Wants=network-online.target 588 After=network-online.target 589 RequiresMountsFor=/var/run/containers/storage 590 591 [Service] 592 Environment=PODMAN_SYSTEMD_UNIT=%n 593 Restart=on-failure 594 TimeoutStopSec=70 595 ExecStartPre=/bin/rm -f %t/%n.ctr-id 596 ExecStart=/usr/bin/podman run \ 597 --cidfile=%t/%n.ctr-id \ 598 --cgroups=no-conmon \ 599 --rm \ 600 --sdnotify=conmon \ 601 -d \ 602 --replace \ 603 --name test \ 604 --log-driver=journald \ 605 --log-opt=tag={{.Name}} awesome-image:latest 606 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 607 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 608 Type=notify 609 NotifyAccess=all 610 611 [Install] 612 WantedBy=default.target 613 ` 614 615 goodNewWithSpecialChars := `# jadda-jadda.service 616 # autogenerated by Podman CI 617 618 [Unit] 619 Description=Podman jadda-jadda.service 620 Documentation=man:podman-generate-systemd(1) 621 Wants=network-online.target 622 After=network-online.target 623 RequiresMountsFor=/var/run/containers/storage 624 625 [Service] 626 Environment=PODMAN_SYSTEMD_UNIT=%n 627 Restart=on-failure 628 TimeoutStopSec=70 629 ExecStartPre=/bin/rm -f %t/%n.ctr-id 630 ExecStart=/usr/bin/podman run \ 631 --cidfile=%t/%n.ctr-id \ 632 --cgroups=no-conmon \ 633 --rm \ 634 --sdnotify=conmon \ 635 -d \ 636 --replace \ 637 --name test awesome-image:latest sh \ 638 -c "kill $$$$ && echo %%\\" 639 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 640 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 641 Type=notify 642 NotifyAccess=all 643 644 [Install] 645 WantedBy=default.target 646 ` 647 648 goodNewWithIDFiles := `# jadda-jadda.service 649 # autogenerated by Podman CI 650 651 [Unit] 652 Description=Podman jadda-jadda.service 653 Documentation=man:podman-generate-systemd(1) 654 Wants=network-online.target 655 After=network-online.target 656 RequiresMountsFor=/var/run/containers/storage 657 658 [Service] 659 Environment=PODMAN_SYSTEMD_UNIT=%n 660 Restart=on-failure 661 TimeoutStopSec=70 662 ExecStartPre=/bin/rm -f %t/%n.ctr-id 663 ExecStart=/usr/bin/podman run \ 664 --cidfile=%t/%n.ctr-id \ 665 --cgroups=no-conmon \ 666 --rm \ 667 --sdnotify=conmon \ 668 -d \ 669 --conmon-pidfile=foo awesome-image:latest podman run \ 670 --cgroups=foo \ 671 --conmon-pidfile=foo \ 672 --cidfile=foo alpine 673 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 674 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 675 Type=notify 676 NotifyAccess=all 677 678 [Install] 679 WantedBy=default.target 680 ` 681 682 goodNewWithPodIDFiles := `# jadda-jadda.service 683 # autogenerated by Podman CI 684 685 [Unit] 686 Description=Podman jadda-jadda.service 687 Documentation=man:podman-generate-systemd(1) 688 Wants=network-online.target 689 After=network-online.target 690 RequiresMountsFor=/var/run/containers/storage 691 692 [Service] 693 Environment=PODMAN_SYSTEMD_UNIT=%n 694 Restart=on-failure 695 TimeoutStopSec=70 696 ExecStartPre=/bin/rm -f %t/%n.ctr-id 697 ExecStart=/usr/bin/podman run \ 698 --cidfile=%t/%n.ctr-id \ 699 --cgroups=no-conmon \ 700 --rm \ 701 --pod-id-file %t/pod-foobar.pod-id-file \ 702 --sdnotify=conmon \ 703 -d \ 704 --conmon-pidfile=foo awesome-image:latest podman run \ 705 --cgroups=foo \ 706 --conmon-pidfile=foo \ 707 --cidfile=foo \ 708 --pod-id-file /tmp/pod-foobar.pod-id-file alpine 709 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 710 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 711 Type=notify 712 NotifyAccess=all 713 714 [Install] 715 WantedBy=default.target 716 ` 717 718 goodNewWithEnvar := `# jadda-jadda.service 719 # autogenerated by Podman CI 720 721 [Unit] 722 Description=Podman jadda-jadda.service 723 Documentation=man:podman-generate-systemd(1) 724 Wants=network-online.target 725 After=network-online.target 726 RequiresMountsFor=/var/run/containers/storage 727 728 [Service] 729 Environment=PODMAN_SYSTEMD_UNIT=%n 730 Environment=FOO=abc "BAR=my test" USER=%%a 731 Restart=on-failure 732 TimeoutStopSec=70 733 ExecStartPre=/bin/rm -f %t/%n.ctr-id 734 ExecStart=/usr/bin/podman run \ 735 --cidfile=%t/%n.ctr-id \ 736 --cgroups=no-conmon \ 737 --rm \ 738 --sdnotify=conmon \ 739 -d \ 740 --env FOO \ 741 --env=BAR \ 742 --env=MYENV=2 \ 743 -e USER awesome-image:latest 744 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 745 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 746 Type=notify 747 NotifyAccess=all 748 749 [Install] 750 WantedBy=default.target 751 ` 752 753 goodNewWithRestartPolicy := `# jadda-jadda.service 754 # autogenerated by Podman CI 755 756 [Unit] 757 Description=Podman jadda-jadda.service 758 Documentation=man:podman-generate-systemd(1) 759 Wants=network-online.target 760 After=network-online.target 761 RequiresMountsFor=/var/run/containers/storage 762 763 [Service] 764 Environment=PODMAN_SYSTEMD_UNIT=%n 765 Restart=on-failure 766 StartLimitBurst=42 767 TimeoutStopSec=70 768 ExecStartPre=/bin/rm -f %t/%n.ctr-id 769 ExecStart=/usr/bin/podman run \ 770 --cidfile=%t/%n.ctr-id \ 771 --cgroups=no-conmon \ 772 --rm \ 773 --sdnotify=conmon \ 774 -d awesome-image:latest 775 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 776 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 777 Type=notify 778 NotifyAccess=all 779 780 [Install] 781 WantedBy=default.target 782 ` 783 784 templateGood := `# container-foo@.service 785 # autogenerated by Podman CI 786 787 [Unit] 788 Description=Podman container-foo.service for %I 789 Documentation=man:podman-generate-systemd(1) 790 Wants=network-online.target 791 After=network-online.target 792 RequiresMountsFor=/var/run/containers/storage 793 794 [Service] 795 Environment=PODMAN_SYSTEMD_UNIT=%n-%i 796 Restart=on-failure 797 StartLimitBurst=42 798 TimeoutStopSec=70 799 ExecStartPre=/bin/rm -f %t/%n.ctr-id 800 ExecStart=/usr/bin/podman run \ 801 --name=container-foo-%i \ 802 --cidfile=%t/%n.ctr-id \ 803 --cgroups=no-conmon \ 804 --rm \ 805 --sdnotify=conmon \ 806 -d awesome-image:latest 807 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 808 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 809 Type=notify 810 NotifyAccess=all 811 812 [Install] 813 WantedBy=default.target 814 ` 815 tests := []struct { 816 name string 817 info containerInfo 818 want string 819 new bool 820 noHeader bool 821 wantErr bool 822 template bool 823 }{ 824 825 {"good with id", 826 containerInfo{ 827 Executable: "/usr/bin/podman", 828 ServiceName: "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 829 ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 830 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 831 StopTimeout: 22, 832 PodmanVersion: "CI", 833 EnvVariable: define.EnvVariable, 834 GraphRoot: "/var/lib/containers/storage", 835 RunRoot: "/var/run/containers/storage", 836 }, 837 goodID, 838 false, 839 false, 840 false, 841 false, 842 }, 843 {"good with noHeader", 844 containerInfo{ 845 Executable: "/usr/bin/podman", 846 ServiceName: "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 847 ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 848 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 849 StopTimeout: 22, 850 PodmanVersion: "CI", 851 EnvVariable: define.EnvVariable, 852 GraphRoot: "/var/lib/containers/storage", 853 RunRoot: "/var/run/containers/storage", 854 }, 855 goodIDNoHeaderInfo, 856 false, 857 true, 858 false, 859 false, 860 }, 861 {"good with name", 862 containerInfo{ 863 Executable: "/usr/bin/podman", 864 ServiceName: "container-foobar", 865 ContainerNameOrID: "foobar", 866 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 867 StopTimeout: 10, 868 PodmanVersion: "CI", 869 EnvVariable: define.EnvVariable, 870 GraphRoot: "/var/lib/containers/storage", 871 RunRoot: "/var/run/containers/storage", 872 }, 873 goodName, 874 false, 875 false, 876 false, 877 false, 878 }, 879 {"good with name and wants", 880 containerInfo{ 881 Executable: "/usr/bin/podman", 882 ServiceName: "container-foobar", 883 ContainerNameOrID: "foobar", 884 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 885 StopTimeout: 10, 886 PodmanVersion: "CI", 887 Wants: []string{"a.service", "b.service", "c.target"}, 888 EnvVariable: define.EnvVariable, 889 GraphRoot: "/var/lib/containers/storage", 890 RunRoot: "/var/run/containers/storage", 891 }, 892 goodNameCustomWants, 893 false, 894 false, 895 false, 896 false, 897 }, 898 {"good with name and after", 899 containerInfo{ 900 Executable: "/usr/bin/podman", 901 ServiceName: "container-foobar", 902 ContainerNameOrID: "foobar", 903 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 904 StopTimeout: 10, 905 PodmanVersion: "CI", 906 After: []string{"a.service", "b.service", "c.target"}, 907 EnvVariable: define.EnvVariable, 908 GraphRoot: "/var/lib/containers/storage", 909 RunRoot: "/var/run/containers/storage", 910 }, 911 goodNameCustomAfter, 912 false, 913 false, 914 false, 915 false, 916 }, 917 {"good with name and requires", 918 containerInfo{ 919 Executable: "/usr/bin/podman", 920 ServiceName: "container-foobar", 921 ContainerNameOrID: "foobar", 922 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 923 StopTimeout: 10, 924 PodmanVersion: "CI", 925 Requires: []string{"a.service", "b.service", "c.target"}, 926 EnvVariable: define.EnvVariable, 927 GraphRoot: "/var/lib/containers/storage", 928 RunRoot: "/var/run/containers/storage", 929 }, 930 goodNameCustomRequires, 931 false, 932 false, 933 false, 934 false, 935 }, 936 {"good with name and dependencies", 937 containerInfo{ 938 Executable: "/usr/bin/podman", 939 ServiceName: "container-foobar", 940 ContainerNameOrID: "foobar", 941 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 942 StopTimeout: 10, 943 PodmanVersion: "CI", 944 Wants: []string{"a.service", "b.service", "c.target"}, 945 After: []string{"a.service", "b.service", "c.target"}, 946 Requires: []string{"a.service", "b.service", "c.target"}, 947 EnvVariable: define.EnvVariable, 948 GraphRoot: "/var/lib/containers/storage", 949 RunRoot: "/var/run/containers/storage", 950 }, 951 goodNameCustomDependencies, 952 false, 953 false, 954 false, 955 false, 956 }, 957 {"good with name and bound to", 958 containerInfo{ 959 Executable: "/usr/bin/podman", 960 ServiceName: "container-foobar", 961 ContainerNameOrID: "foobar", 962 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 963 StopTimeout: 10, 964 PodmanVersion: "CI", 965 BoundToServices: []string{"pod", "a", "b", "c"}, 966 EnvVariable: define.EnvVariable, 967 GraphRoot: "/var/lib/containers/storage", 968 RunRoot: "/var/run/containers/storage", 969 }, 970 goodNameBoundTo, 971 false, 972 false, 973 false, 974 false, 975 }, 976 {"good with name and generic", 977 containerInfo{ 978 Executable: "/usr/bin/podman", 979 ServiceName: "jadda-jadda", 980 ContainerNameOrID: "jadda-jadda", 981 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 982 StopTimeout: 10, 983 PodmanVersion: "CI", 984 CreateCommand: []string{"I'll get stripped", "container", "run", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"}, 985 EnvVariable: define.EnvVariable, 986 GraphRoot: "/var/lib/containers/storage", 987 RunRoot: "/var/run/containers/storage", 988 }, 989 goodWithNameAndGeneric, 990 true, 991 false, 992 false, 993 false, 994 }, 995 {"good with name and sdnotify", 996 containerInfo{ 997 Executable: "/usr/bin/podman", 998 ServiceName: "jadda-jadda", 999 ContainerNameOrID: "jadda-jadda", 1000 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1001 StopTimeout: 10, 1002 PodmanVersion: "CI", 1003 CreateCommand: []string{"I'll get stripped", "container", "run", "--sdnotify=container", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"}, 1004 EnvVariable: define.EnvVariable, 1005 GraphRoot: "/var/lib/containers/storage", 1006 RunRoot: "/var/run/containers/storage", 1007 }, 1008 goodWithNameAndSdnotify, 1009 true, 1010 false, 1011 false, 1012 false, 1013 }, 1014 {"good with explicit short detach param", 1015 containerInfo{ 1016 Executable: "/usr/bin/podman", 1017 ServiceName: "jadda-jadda", 1018 ContainerNameOrID: "jadda-jadda", 1019 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1020 StopTimeout: 10, 1021 PodmanVersion: "CI", 1022 CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, 1023 EnvVariable: define.EnvVariable, 1024 GraphRoot: "/var/lib/containers/storage", 1025 RunRoot: "/var/run/containers/storage", 1026 }, 1027 goodWithExplicitShortDetachParam, 1028 true, 1029 false, 1030 false, 1031 false, 1032 }, 1033 {"good with explicit short detach param and podInfo", 1034 containerInfo{ 1035 Executable: "/usr/bin/podman", 1036 ServiceName: "jadda-jadda", 1037 ContainerNameOrID: "jadda-jadda", 1038 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1039 StopTimeout: 10, 1040 PodmanVersion: "CI", 1041 CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, 1042 EnvVariable: define.EnvVariable, 1043 GraphRoot: "/var/lib/containers/storage", 1044 RunRoot: "/var/run/containers/storage", 1045 Pod: &podInfo{ 1046 PodIDFile: "%t/pod-foobar.pod-id-file", 1047 }, 1048 }, 1049 goodNameNewWithPodFile, 1050 true, 1051 false, 1052 false, 1053 false, 1054 }, 1055 {"good with explicit full detach param", 1056 containerInfo{ 1057 Executable: "/usr/bin/podman", 1058 ServiceName: "jadda-jadda", 1059 ContainerNameOrID: "jadda-jadda", 1060 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1061 StopTimeout: 10, 1062 PodmanVersion: "CI", 1063 CreateCommand: []string{"I'll get stripped", "run", "--detach", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, 1064 EnvVariable: define.EnvVariable, 1065 GraphRoot: "/var/lib/containers/storage", 1066 RunRoot: "/var/run/containers/storage", 1067 }, 1068 goodNameNewDetach, 1069 true, 1070 false, 1071 false, 1072 false, 1073 }, 1074 {"good with id and no param", 1075 containerInfo{ 1076 Executable: "/usr/bin/podman", 1077 ServiceName: "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 1078 ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 1079 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1080 StopTimeout: 10, 1081 PodmanVersion: "CI", 1082 CreateCommand: []string{"I'll get stripped", "run", "awesome-image:latest"}, 1083 EnvVariable: define.EnvVariable, 1084 GraphRoot: "/var/lib/containers/storage", 1085 RunRoot: "/var/run/containers/storage", 1086 }, 1087 goodIDNew, 1088 true, 1089 false, 1090 false, 1091 false, 1092 }, 1093 {"good with explicit detach=true param", 1094 containerInfo{ 1095 Executable: "/usr/bin/podman", 1096 ServiceName: "jadda-jadda", 1097 ContainerNameOrID: "jadda-jadda", 1098 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1099 StopTimeout: 42, 1100 PodmanVersion: "CI", 1101 CreateCommand: []string{"I'll get stripped", "run", "--detach=true", "awesome-image:latest"}, 1102 EnvVariable: define.EnvVariable, 1103 GraphRoot: "/var/lib/containers/storage", 1104 RunRoot: "/var/run/containers/storage", 1105 }, 1106 genGoodNewDetach("--detach=true"), 1107 true, 1108 false, 1109 false, 1110 false, 1111 }, 1112 {"good with explicit detach=false param", 1113 containerInfo{ 1114 Executable: "/usr/bin/podman", 1115 ServiceName: "jadda-jadda", 1116 ContainerNameOrID: "jadda-jadda", 1117 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1118 StopTimeout: 42, 1119 PodmanVersion: "CI", 1120 CreateCommand: []string{"I'll get stripped", "run", "--detach=false", "awesome-image:latest"}, 1121 EnvVariable: define.EnvVariable, 1122 GraphRoot: "/var/lib/containers/storage", 1123 RunRoot: "/var/run/containers/storage", 1124 }, 1125 genGoodNewDetach("-d"), 1126 true, 1127 false, 1128 false, 1129 false, 1130 }, 1131 {"good with explicit detach=false param", 1132 containerInfo{ 1133 Executable: "/usr/bin/podman", 1134 ServiceName: "jadda-jadda", 1135 ContainerNameOrID: "jadda-jadda", 1136 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1137 StopTimeout: 42, 1138 PodmanVersion: "CI", 1139 CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"}, 1140 EnvVariable: define.EnvVariable, 1141 GraphRoot: "/var/lib/containers/storage", 1142 RunRoot: "/var/run/containers/storage", 1143 }, 1144 goodNameNewDetachFalseWithCmd, 1145 true, 1146 false, 1147 false, 1148 false, 1149 }, 1150 {"good with multiple detach=false params", 1151 containerInfo{ 1152 Executable: "/usr/bin/podman", 1153 ServiceName: "jadda-jadda", 1154 ContainerNameOrID: "jadda-jadda", 1155 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1156 StopTimeout: 42, 1157 PodmanVersion: "CI", 1158 CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"}, 1159 EnvVariable: define.EnvVariable, 1160 GraphRoot: "/var/lib/containers/storage", 1161 RunRoot: "/var/run/containers/storage", 1162 }, 1163 goodNameNewDetachFalseWithCmd, 1164 true, 1165 false, 1166 false, 1167 false, 1168 }, 1169 {"good with multiple shorthand params detach first", 1170 containerInfo{ 1171 Executable: "/usr/bin/podman", 1172 ServiceName: "jadda-jadda", 1173 ContainerNameOrID: "jadda-jadda", 1174 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1175 StopTimeout: 42, 1176 PodmanVersion: "CI", 1177 CreateCommand: []string{"I'll get stripped", "run", "-dti", "awesome-image:latest"}, 1178 EnvVariable: define.EnvVariable, 1179 GraphRoot: "/var/lib/containers/storage", 1180 RunRoot: "/var/run/containers/storage", 1181 }, 1182 genGoodNewDetach("-dti"), 1183 true, 1184 false, 1185 false, 1186 false, 1187 }, 1188 {"good with multiple shorthand params detach last", 1189 containerInfo{ 1190 Executable: "/usr/bin/podman", 1191 ServiceName: "jadda-jadda", 1192 ContainerNameOrID: "jadda-jadda", 1193 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1194 StopTimeout: 42, 1195 PodmanVersion: "CI", 1196 CreateCommand: []string{"I'll get stripped", "--events-backend", "none", "--runroot", "/root", "run", "awesome-image:latest"}, 1197 EnvVariable: define.EnvVariable, 1198 GraphRoot: "/var/lib/containers/storage", 1199 RunRoot: "/var/run/containers/storage", 1200 }, 1201 goodNewRootFlags, 1202 true, 1203 false, 1204 false, 1205 false, 1206 }, 1207 {"good with container create", 1208 containerInfo{ 1209 Executable: "/usr/bin/podman", 1210 ServiceName: "jadda-jadda", 1211 ContainerNameOrID: "jadda-jadda", 1212 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1213 StopTimeout: 10, 1214 PodmanVersion: "CI", 1215 CreateCommand: []string{"I'll get stripped", "container", "create", "awesome-image:latest"}, 1216 EnvVariable: define.EnvVariable, 1217 GraphRoot: "/var/lib/containers/storage", 1218 RunRoot: "/var/run/containers/storage", 1219 }, 1220 goodContainerCreate, 1221 true, 1222 false, 1223 false, 1224 false, 1225 }, 1226 {"good with journald log tag (see #9034)", 1227 containerInfo{ 1228 Executable: "/usr/bin/podman", 1229 ServiceName: "jadda-jadda", 1230 ContainerNameOrID: "jadda-jadda", 1231 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1232 StopTimeout: 10, 1233 PodmanVersion: "CI", 1234 CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "--log-driver=journald", "--log-opt=tag={{.Name}}", "awesome-image:latest"}, 1235 EnvVariable: define.EnvVariable, 1236 GraphRoot: "/var/lib/containers/storage", 1237 RunRoot: "/var/run/containers/storage", 1238 }, 1239 goodNewWithJournaldTag, 1240 true, 1241 false, 1242 false, 1243 false, 1244 }, 1245 {"good with special chars", 1246 containerInfo{ 1247 Executable: "/usr/bin/podman", 1248 ServiceName: "jadda-jadda", 1249 ContainerNameOrID: "jadda-jadda", 1250 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1251 StopTimeout: 10, 1252 PodmanVersion: "CI", 1253 CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "awesome-image:latest", "sh", "-c", "kill $$ && echo %\\"}, 1254 EnvVariable: define.EnvVariable, 1255 GraphRoot: "/var/lib/containers/storage", 1256 RunRoot: "/var/run/containers/storage", 1257 }, 1258 goodNewWithSpecialChars, 1259 true, 1260 false, 1261 false, 1262 false, 1263 }, 1264 {"good with ID files", 1265 containerInfo{ 1266 Executable: "/usr/bin/podman", 1267 ServiceName: "jadda-jadda", 1268 ContainerNameOrID: "jadda-jadda", 1269 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1270 StopTimeout: 10, 1271 PodmanVersion: "CI", 1272 GraphRoot: "/var/lib/containers/storage", 1273 RunRoot: "/var/run/containers/storage", 1274 CreateCommand: []string{"I'll get stripped", "create", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "awesome-image:latest", "podman", "run", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "alpine"}, 1275 EnvVariable: define.EnvVariable, 1276 }, 1277 goodNewWithIDFiles, 1278 true, 1279 false, 1280 false, 1281 false, 1282 }, 1283 {"good with pod ID files", 1284 containerInfo{ 1285 Executable: "/usr/bin/podman", 1286 ServiceName: "jadda-jadda", 1287 ContainerNameOrID: "jadda-jadda", 1288 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1289 StopTimeout: 10, 1290 PodmanVersion: "CI", 1291 GraphRoot: "/var/lib/containers/storage", 1292 RunRoot: "/var/run/containers/storage", 1293 CreateCommand: []string{"I'll get stripped", "create", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "--pod", "test", "awesome-image:latest", "podman", "run", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "--pod-id-file", "/tmp/pod-foobar.pod-id-file", "alpine"}, 1294 EnvVariable: define.EnvVariable, 1295 Pod: &podInfo{ 1296 PodIDFile: "%t/pod-foobar.pod-id-file", 1297 }, 1298 }, 1299 goodNewWithPodIDFiles, 1300 true, 1301 false, 1302 false, 1303 false, 1304 }, 1305 {"good with environment variables", 1306 containerInfo{ 1307 Executable: "/usr/bin/podman", 1308 ServiceName: "jadda-jadda", 1309 ContainerNameOrID: "jadda-jadda", 1310 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1311 StopTimeout: 10, 1312 PodmanVersion: "CI", 1313 GraphRoot: "/var/lib/containers/storage", 1314 RunRoot: "/var/run/containers/storage", 1315 CreateCommand: []string{"I'll get stripped", "create", "--env", "FOO", "--env=BAR", "--env=MYENV=2", "-e", "USER", "awesome-image:latest"}, 1316 containerEnv: []string{"FOO=abc", "BAR=my test", "USER=%a", "MYENV=2"}, 1317 EnvVariable: define.EnvVariable, 1318 }, 1319 goodNewWithEnvar, 1320 true, 1321 false, 1322 false, 1323 false, 1324 }, 1325 {"good with restart policy", 1326 containerInfo{ 1327 Executable: "/usr/bin/podman", 1328 ServiceName: "jadda-jadda", 1329 ContainerNameOrID: "jadda-jadda", 1330 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1331 StopTimeout: 10, 1332 PodmanVersion: "CI", 1333 GraphRoot: "/var/lib/containers/storage", 1334 RunRoot: "/var/run/containers/storage", 1335 CreateCommand: []string{"I'll get stripped", "create", "--restart", "on-failure:42", "awesome-image:latest"}, 1336 EnvVariable: define.EnvVariable, 1337 }, 1338 goodNewWithRestartPolicy, 1339 true, 1340 false, 1341 false, 1342 false, 1343 }, 1344 {"good template", 1345 containerInfo{ 1346 Executable: "/usr/bin/podman", 1347 ServiceName: "container-foo", 1348 ContainerNameOrID: "foo", 1349 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1350 StopTimeout: 10, 1351 PodmanVersion: "CI", 1352 GraphRoot: "/var/lib/containers/storage", 1353 RunRoot: "/var/run/containers/storage", 1354 CreateCommand: []string{"I'll get stripped", "create", "--restart", "on-failure:42", "awesome-image:latest"}, 1355 }, 1356 templateGood, 1357 true, 1358 false, 1359 false, 1360 true, 1361 }, 1362 {"good with name and empty container-prefix", 1363 containerInfo{ 1364 Executable: "/usr/bin/podman", 1365 ServiceName: "foobar", 1366 ContainerNameOrID: "foobar", 1367 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 1368 StopTimeout: 10, 1369 PodmanVersion: "CI", 1370 EnvVariable: define.EnvVariable, 1371 GraphRoot: "/var/lib/containers/storage", 1372 RunRoot: "/var/run/containers/storage", 1373 }, 1374 goodNameEmptyContainerPrefix, 1375 false, 1376 false, 1377 false, 1378 false, 1379 }, 1380 } 1381 for _, tt := range tests { 1382 test := tt 1383 t.Run(tt.name, func(t *testing.T) { 1384 opts := entities.GenerateSystemdOptions{ 1385 New: test.new, 1386 NoHeader: test.noHeader, 1387 TemplateUnitFile: test.template, 1388 } 1389 test.info.RestartPolicy = define.DefaultRestartPolicy 1390 got, err := executeContainerTemplate(&test.info, opts) 1391 if (err != nil) != test.wantErr { 1392 t.Errorf("CreateContainerSystemdUnit() %s error = \n%v, wantErr \n%v", test.name, err, test.wantErr) 1393 return 1394 } 1395 assert.Equal(t, test.want, got, test.name) 1396 }) 1397 } 1398 } 1399 1400 func TestSetContainerNameForTemplate(t *testing.T) { 1401 tt := []struct { 1402 name string 1403 startCommand []string 1404 info *containerInfo 1405 expected []string 1406 err error 1407 }{ 1408 { 1409 name: "no name argument is set", 1410 startCommand: []string{"/usr/bin/podman", "run", "busybox", "top"}, 1411 info: &containerInfo{ServiceName: "container-122"}, 1412 expected: []string{"/usr/bin/podman", "run", "--name=container-122-%i", "busybox", "top"}, 1413 err: nil, 1414 }, 1415 { 1416 name: "--name=value is used in arguments", 1417 startCommand: []string{"/usr/bin/podman", "run", "--name=lovely_james", "busybox", "top"}, 1418 info: &containerInfo{}, 1419 expected: []string{"/usr/bin/podman", "run", "--name=lovely_james-%i", "busybox", "top"}, 1420 err: nil, 1421 }, 1422 { 1423 name: "--name value is used in arguments", 1424 startCommand: []string{"/usr/bin/podman", "run", "--name", "lovely_james", "busybox", "top"}, 1425 info: &containerInfo{}, 1426 expected: []string{"/usr/bin/podman", "run", "--name", "lovely_james-%i", "busybox", "top"}, 1427 err: nil, 1428 }, 1429 { 1430 name: "--name value is used in arguments", 1431 startCommand: []string{"/usr/bin/podman", "create", "busybox", "top"}, 1432 info: &containerInfo{}, 1433 expected: []string{"/usr/bin/podman", "create", "busybox", "top"}, 1434 err: fmt.Errorf("\"run\" is missing in the command arguments"), 1435 }, 1436 } 1437 1438 for _, te := range tt { 1439 res, err := setContainerNameForTemplate(te.startCommand, te.info) 1440 assert.Equal(t, te.err, err) 1441 assert.Equal(t, te.expected, res) 1442 } 1443 }