github.com/AbhinandanKurakure/podman/v3@v3.4.10/pkg/systemd/generate/containers_test.go (about) 1 package generate 2 3 import ( 4 "testing" 5 6 "github.com/containers/podman/v3/pkg/domain/entities" 7 "github.com/containers/podman/v3/pkg/systemd/define" 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestValidateRestartPolicyContainer(t *testing.T) { 12 type containerInfo struct { 13 restart string 14 } 15 tests := []struct { 16 name string 17 containerInfo containerInfo 18 wantErr bool 19 }{ 20 {"good-on", containerInfo{restart: "no"}, false}, 21 {"good-on-success", containerInfo{restart: "on-success"}, false}, 22 {"good-on-failure", containerInfo{restart: "on-failure"}, false}, 23 {"good-on-abnormal", containerInfo{restart: "on-abnormal"}, false}, 24 {"good-on-watchdog", containerInfo{restart: "on-watchdog"}, false}, 25 {"good-on-abort", containerInfo{restart: "on-abort"}, false}, 26 {"good-always", containerInfo{restart: "always"}, false}, 27 {"fail", containerInfo{restart: "foobar"}, true}, 28 {"failblank", containerInfo{restart: ""}, true}, 29 } 30 for _, tt := range tests { 31 test := tt 32 t.Run(tt.name, func(t *testing.T) { 33 if err := validateRestartPolicy(test.containerInfo.restart); (err != nil) != test.wantErr { 34 t.Errorf("ValidateRestartPolicy() error = %v, wantErr %v", err, test.wantErr) 35 } 36 }) 37 } 38 } 39 40 func TestCreateContainerSystemdUnit(t *testing.T) { 41 serviceInfo := `# container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 42 ` 43 headerInfo := `# autogenerated by Podman CI 44 ` 45 goodIDContent := ` 46 [Unit] 47 Description=Podman container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 48 Documentation=man:podman-generate-systemd(1) 49 Wants=network-online.target 50 After=network-online.target 51 RequiresMountsFor=/var/run/containers/storage 52 53 [Service] 54 Environment=PODMAN_SYSTEMD_UNIT=%n 55 Restart=on-failure 56 TimeoutStopSec=82 57 ExecStart=/usr/bin/podman start 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401 58 ExecStop=/usr/bin/podman stop -t 22 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401 59 ExecStopPost=/usr/bin/podman stop -t 22 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401 60 PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 61 Type=forking 62 63 [Install] 64 WantedBy=default.target 65 ` 66 goodID := serviceInfo + headerInfo + goodIDContent 67 goodIDNoHeaderInfo := serviceInfo + goodIDContent 68 69 goodName := `# container-foobar.service 70 # autogenerated by Podman CI 71 72 [Unit] 73 Description=Podman container-foobar.service 74 Documentation=man:podman-generate-systemd(1) 75 Wants=network-online.target 76 After=network-online.target 77 RequiresMountsFor=/var/run/containers/storage 78 79 [Service] 80 Environment=PODMAN_SYSTEMD_UNIT=%n 81 Restart=on-failure 82 TimeoutStopSec=70 83 ExecStart=/usr/bin/podman start foobar 84 ExecStop=/usr/bin/podman stop -t 10 foobar 85 ExecStopPost=/usr/bin/podman stop -t 10 foobar 86 PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 87 Type=forking 88 89 [Install] 90 WantedBy=default.target 91 ` 92 93 goodNameBoundTo := `# container-foobar.service 94 # autogenerated by Podman CI 95 96 [Unit] 97 Description=Podman container-foobar.service 98 Documentation=man:podman-generate-systemd(1) 99 Wants=network-online.target 100 After=network-online.target 101 RequiresMountsFor=/var/run/containers/storage 102 BindsTo=a.service b.service c.service pod.service 103 After=a.service b.service c.service pod.service 104 105 [Service] 106 Environment=PODMAN_SYSTEMD_UNIT=%n 107 Restart=on-failure 108 TimeoutStopSec=70 109 ExecStart=/usr/bin/podman start foobar 110 ExecStop=/usr/bin/podman stop -t 10 foobar 111 ExecStopPost=/usr/bin/podman stop -t 10 foobar 112 PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 113 Type=forking 114 115 [Install] 116 WantedBy=default.target 117 ` 118 119 goodWithNameAndGeneric := `# jadda-jadda.service 120 # autogenerated by Podman CI 121 122 [Unit] 123 Description=Podman jadda-jadda.service 124 Documentation=man:podman-generate-systemd(1) 125 Wants=network-online.target 126 After=network-online.target 127 RequiresMountsFor=/var/run/containers/storage 128 129 [Service] 130 Environment=PODMAN_SYSTEMD_UNIT=%n 131 Restart=on-failure 132 TimeoutStopSec=70 133 ExecStartPre=/bin/rm -f %t/%n.ctr-id 134 ExecStart=/usr/bin/podman container run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space" 135 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 136 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 137 Type=notify 138 NotifyAccess=all 139 140 [Install] 141 WantedBy=default.target 142 ` 143 144 goodWithNameAndSdnotify := `# jadda-jadda.service 145 # autogenerated by Podman CI 146 147 [Unit] 148 Description=Podman jadda-jadda.service 149 Documentation=man:podman-generate-systemd(1) 150 Wants=network-online.target 151 After=network-online.target 152 RequiresMountsFor=/var/run/containers/storage 153 154 [Service] 155 Environment=PODMAN_SYSTEMD_UNIT=%n 156 Restart=on-failure 157 TimeoutStopSec=70 158 ExecStartPre=/bin/rm -f %t/%n.ctr-id 159 ExecStart=/usr/bin/podman container run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm -d --replace --sdnotify=container --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space" 160 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 161 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 162 Type=notify 163 NotifyAccess=all 164 165 [Install] 166 WantedBy=default.target 167 ` 168 169 goodWithExplicitShortDetachParam := `# jadda-jadda.service 170 # autogenerated by Podman CI 171 172 [Unit] 173 Description=Podman jadda-jadda.service 174 Documentation=man:podman-generate-systemd(1) 175 Wants=network-online.target 176 After=network-online.target 177 RequiresMountsFor=/var/run/containers/storage 178 179 [Service] 180 Environment=PODMAN_SYSTEMD_UNIT=%n 181 Restart=on-failure 182 TimeoutStopSec=70 183 ExecStartPre=/bin/rm -f %t/%n.ctr-id 184 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon --replace -d --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN 185 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 186 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 187 Type=notify 188 NotifyAccess=all 189 190 [Install] 191 WantedBy=default.target 192 ` 193 194 goodNameNewWithPodFile := `# jadda-jadda.service 195 # autogenerated by Podman CI 196 197 [Unit] 198 Description=Podman jadda-jadda.service 199 Documentation=man:podman-generate-systemd(1) 200 Wants=network-online.target 201 After=network-online.target 202 RequiresMountsFor=/var/run/containers/storage 203 204 [Service] 205 Environment=PODMAN_SYSTEMD_UNIT=%n 206 Restart=on-failure 207 TimeoutStopSec=70 208 ExecStartPre=/bin/rm -f %t/%n.ctr-id 209 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --pod-id-file %t/pod-foobar.pod-id-file --sdnotify=conmon --replace -d --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN 210 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 211 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 212 Type=notify 213 NotifyAccess=all 214 215 [Install] 216 WantedBy=default.target 217 ` 218 219 goodNameNewDetach := `# jadda-jadda.service 220 # autogenerated by Podman CI 221 222 [Unit] 223 Description=Podman jadda-jadda.service 224 Documentation=man:podman-generate-systemd(1) 225 Wants=network-online.target 226 After=network-online.target 227 RequiresMountsFor=/var/run/containers/storage 228 229 [Service] 230 Environment=PODMAN_SYSTEMD_UNIT=%n 231 Restart=on-failure 232 TimeoutStopSec=70 233 ExecStartPre=/bin/rm -f %t/%n.ctr-id 234 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon --replace --detach --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN 235 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 236 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 237 Type=notify 238 NotifyAccess=all 239 240 [Install] 241 WantedBy=default.target 242 ` 243 244 goodIDNew := `# container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 245 # autogenerated by Podman CI 246 247 [Unit] 248 Description=Podman container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 249 Documentation=man:podman-generate-systemd(1) 250 Wants=network-online.target 251 After=network-online.target 252 RequiresMountsFor=/var/run/containers/storage 253 254 [Service] 255 Environment=PODMAN_SYSTEMD_UNIT=%n 256 Restart=on-failure 257 TimeoutStopSec=70 258 ExecStartPre=/bin/rm -f %t/%n.ctr-id 259 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest 260 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 261 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 262 Type=notify 263 NotifyAccess=all 264 265 [Install] 266 WantedBy=default.target 267 ` 268 269 genGoodNewDetach := func(detachparam string) string { 270 goodNewDetach := `# jadda-jadda.service 271 # autogenerated by Podman CI 272 273 [Unit] 274 Description=Podman jadda-jadda.service 275 Documentation=man:podman-generate-systemd(1) 276 Wants=network-online.target 277 After=network-online.target 278 RequiresMountsFor=/var/run/containers/storage 279 280 [Service] 281 Environment=PODMAN_SYSTEMD_UNIT=%n 282 Restart=on-failure 283 TimeoutStopSec=102 284 ExecStartPre=/bin/rm -f %t/%n.ctr-id 285 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon ` + 286 detachparam + 287 ` awesome-image:latest 288 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 289 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 290 Type=notify 291 NotifyAccess=all 292 293 [Install] 294 WantedBy=default.target 295 ` 296 return goodNewDetach 297 } 298 299 goodNameNewDetachFalseWithCmd := `# jadda-jadda.service 300 # autogenerated by Podman CI 301 302 [Unit] 303 Description=Podman jadda-jadda.service 304 Documentation=man:podman-generate-systemd(1) 305 Wants=network-online.target 306 After=network-online.target 307 RequiresMountsFor=/var/run/containers/storage 308 309 [Service] 310 Environment=PODMAN_SYSTEMD_UNIT=%n 311 Restart=on-failure 312 TimeoutStopSec=102 313 ExecStartPre=/bin/rm -f %t/%n.ctr-id 314 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test -p 80:80 awesome-image:latest somecmd --detach=false 315 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 316 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 317 Type=notify 318 NotifyAccess=all 319 320 [Install] 321 WantedBy=default.target 322 ` 323 324 goodNewRootFlags := `# jadda-jadda.service 325 # autogenerated by Podman CI 326 327 [Unit] 328 Description=Podman jadda-jadda.service 329 Documentation=man:podman-generate-systemd(1) 330 Wants=network-online.target 331 After=network-online.target 332 RequiresMountsFor=/var/run/containers/storage 333 334 [Service] 335 Environment=PODMAN_SYSTEMD_UNIT=%n 336 Restart=on-failure 337 TimeoutStopSec=102 338 ExecStartPre=/bin/rm -f %t/%n.ctr-id 339 ExecStart=/usr/bin/podman --events-backend none --runroot /root run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest 340 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 341 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 342 Type=notify 343 NotifyAccess=all 344 345 [Install] 346 WantedBy=default.target 347 ` 348 349 goodContainerCreate := `# jadda-jadda.service 350 # autogenerated by Podman CI 351 352 [Unit] 353 Description=Podman jadda-jadda.service 354 Documentation=man:podman-generate-systemd(1) 355 Wants=network-online.target 356 After=network-online.target 357 RequiresMountsFor=/var/run/containers/storage 358 359 [Service] 360 Environment=PODMAN_SYSTEMD_UNIT=%n 361 Restart=on-failure 362 TimeoutStopSec=70 363 ExecStartPre=/bin/rm -f %t/%n.ctr-id 364 ExecStart=/usr/bin/podman container run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest 365 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 366 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 367 Type=notify 368 NotifyAccess=all 369 370 [Install] 371 WantedBy=default.target 372 ` 373 374 goodNewWithJournaldTag := `# jadda-jadda.service 375 # autogenerated by Podman CI 376 377 [Unit] 378 Description=Podman jadda-jadda.service 379 Documentation=man:podman-generate-systemd(1) 380 Wants=network-online.target 381 After=network-online.target 382 RequiresMountsFor=/var/run/containers/storage 383 384 [Service] 385 Environment=PODMAN_SYSTEMD_UNIT=%n 386 Restart=on-failure 387 TimeoutStopSec=70 388 ExecStartPre=/bin/rm -f %t/%n.ctr-id 389 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test --log-driver=journald --log-opt=tag={{.Name}} awesome-image:latest 390 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 391 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 392 Type=notify 393 NotifyAccess=all 394 395 [Install] 396 WantedBy=default.target 397 ` 398 399 goodNewWithSpecialChars := `# jadda-jadda.service 400 # autogenerated by Podman CI 401 402 [Unit] 403 Description=Podman jadda-jadda.service 404 Documentation=man:podman-generate-systemd(1) 405 Wants=network-online.target 406 After=network-online.target 407 RequiresMountsFor=/var/run/containers/storage 408 409 [Service] 410 Environment=PODMAN_SYSTEMD_UNIT=%n 411 Restart=on-failure 412 TimeoutStopSec=70 413 ExecStartPre=/bin/rm -f %t/%n.ctr-id 414 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test awesome-image:latest sh -c "kill $$$$ && echo %%\\" 415 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 416 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 417 Type=notify 418 NotifyAccess=all 419 420 [Install] 421 WantedBy=default.target 422 ` 423 424 goodNewWithIDFiles := `# jadda-jadda.service 425 # autogenerated by Podman CI 426 427 [Unit] 428 Description=Podman jadda-jadda.service 429 Documentation=man:podman-generate-systemd(1) 430 Wants=network-online.target 431 After=network-online.target 432 RequiresMountsFor=/var/run/containers/storage 433 434 [Service] 435 Environment=PODMAN_SYSTEMD_UNIT=%n 436 Restart=on-failure 437 TimeoutStopSec=70 438 ExecStartPre=/bin/rm -f %t/%n.ctr-id 439 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --conmon-pidfile=foo awesome-image:latest podman run --cgroups=foo --conmon-pidfile=foo --cidfile=foo alpine 440 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 441 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 442 Type=notify 443 NotifyAccess=all 444 445 [Install] 446 WantedBy=default.target 447 ` 448 449 goodNewWithPodIDFiles := `# jadda-jadda.service 450 # autogenerated by Podman CI 451 452 [Unit] 453 Description=Podman jadda-jadda.service 454 Documentation=man:podman-generate-systemd(1) 455 Wants=network-online.target 456 After=network-online.target 457 RequiresMountsFor=/var/run/containers/storage 458 459 [Service] 460 Environment=PODMAN_SYSTEMD_UNIT=%n 461 Restart=on-failure 462 TimeoutStopSec=70 463 ExecStartPre=/bin/rm -f %t/%n.ctr-id 464 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --pod-id-file %t/pod-foobar.pod-id-file --sdnotify=conmon -d --conmon-pidfile=foo awesome-image:latest podman run --cgroups=foo --conmon-pidfile=foo --cidfile=foo --pod-id-file /tmp/pod-foobar.pod-id-file alpine 465 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 466 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 467 Type=notify 468 NotifyAccess=all 469 470 [Install] 471 WantedBy=default.target 472 ` 473 474 goodNewWithEnvar := `# jadda-jadda.service 475 # autogenerated by Podman CI 476 477 [Unit] 478 Description=Podman jadda-jadda.service 479 Documentation=man:podman-generate-systemd(1) 480 Wants=network-online.target 481 After=network-online.target 482 RequiresMountsFor=/var/run/containers/storage 483 484 [Service] 485 Environment=PODMAN_SYSTEMD_UNIT=%n 486 Environment=FOO=abc "BAR=my test" USER=%%a 487 Restart=on-failure 488 TimeoutStopSec=70 489 ExecStartPre=/bin/rm -f %t/%n.ctr-id 490 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --env FOO --env=BAR --env=MYENV=2 -e USER awesome-image:latest 491 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 492 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 493 Type=notify 494 NotifyAccess=all 495 496 [Install] 497 WantedBy=default.target 498 ` 499 500 goodNewWithRestartPolicy := `# jadda-jadda.service 501 # autogenerated by Podman CI 502 503 [Unit] 504 Description=Podman jadda-jadda.service 505 Documentation=man:podman-generate-systemd(1) 506 Wants=network-online.target 507 After=network-online.target 508 RequiresMountsFor=/var/run/containers/storage 509 510 [Service] 511 Environment=PODMAN_SYSTEMD_UNIT=%n 512 Restart=on-failure 513 StartLimitBurst=42 514 TimeoutStopSec=70 515 ExecStartPre=/bin/rm -f %t/%n.ctr-id 516 ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest 517 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id 518 ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id 519 Type=notify 520 NotifyAccess=all 521 522 [Install] 523 WantedBy=default.target 524 ` 525 tests := []struct { 526 name string 527 info containerInfo 528 want string 529 new bool 530 noHeader bool 531 wantErr bool 532 }{ 533 534 {"good with id", 535 containerInfo{ 536 Executable: "/usr/bin/podman", 537 ServiceName: "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 538 ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 539 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 540 StopTimeout: 22, 541 PodmanVersion: "CI", 542 EnvVariable: define.EnvVariable, 543 GraphRoot: "/var/lib/containers/storage", 544 RunRoot: "/var/run/containers/storage", 545 }, 546 goodID, 547 false, 548 false, 549 false, 550 }, 551 {"good with noHeader", 552 containerInfo{ 553 Executable: "/usr/bin/podman", 554 ServiceName: "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 555 ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 556 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 557 StopTimeout: 22, 558 PodmanVersion: "CI", 559 EnvVariable: define.EnvVariable, 560 GraphRoot: "/var/lib/containers/storage", 561 RunRoot: "/var/run/containers/storage", 562 }, 563 goodIDNoHeaderInfo, 564 false, 565 true, 566 false, 567 }, 568 {"good with name", 569 containerInfo{ 570 Executable: "/usr/bin/podman", 571 ServiceName: "container-foobar", 572 ContainerNameOrID: "foobar", 573 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 574 StopTimeout: 10, 575 PodmanVersion: "CI", 576 EnvVariable: define.EnvVariable, 577 GraphRoot: "/var/lib/containers/storage", 578 RunRoot: "/var/run/containers/storage", 579 }, 580 goodName, 581 false, 582 false, 583 false, 584 }, 585 {"good with name and bound to", 586 containerInfo{ 587 Executable: "/usr/bin/podman", 588 ServiceName: "container-foobar", 589 ContainerNameOrID: "foobar", 590 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 591 StopTimeout: 10, 592 PodmanVersion: "CI", 593 BoundToServices: []string{"pod", "a", "b", "c"}, 594 EnvVariable: define.EnvVariable, 595 GraphRoot: "/var/lib/containers/storage", 596 RunRoot: "/var/run/containers/storage", 597 }, 598 goodNameBoundTo, 599 false, 600 false, 601 false, 602 }, 603 {"good with name and generic", 604 containerInfo{ 605 Executable: "/usr/bin/podman", 606 ServiceName: "jadda-jadda", 607 ContainerNameOrID: "jadda-jadda", 608 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 609 StopTimeout: 10, 610 PodmanVersion: "CI", 611 CreateCommand: []string{"I'll get stripped", "container", "run", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"}, 612 EnvVariable: define.EnvVariable, 613 GraphRoot: "/var/lib/containers/storage", 614 RunRoot: "/var/run/containers/storage", 615 }, 616 goodWithNameAndGeneric, 617 true, 618 false, 619 false, 620 }, 621 {"good with name and sdnotify", 622 containerInfo{ 623 Executable: "/usr/bin/podman", 624 ServiceName: "jadda-jadda", 625 ContainerNameOrID: "jadda-jadda", 626 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 627 StopTimeout: 10, 628 PodmanVersion: "CI", 629 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"}, 630 EnvVariable: define.EnvVariable, 631 GraphRoot: "/var/lib/containers/storage", 632 RunRoot: "/var/run/containers/storage", 633 }, 634 goodWithNameAndSdnotify, 635 true, 636 false, 637 false, 638 }, 639 {"good with explicit short detach param", 640 containerInfo{ 641 Executable: "/usr/bin/podman", 642 ServiceName: "jadda-jadda", 643 ContainerNameOrID: "jadda-jadda", 644 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 645 StopTimeout: 10, 646 PodmanVersion: "CI", 647 CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, 648 EnvVariable: define.EnvVariable, 649 GraphRoot: "/var/lib/containers/storage", 650 RunRoot: "/var/run/containers/storage", 651 }, 652 goodWithExplicitShortDetachParam, 653 true, 654 false, 655 false, 656 }, 657 {"good with explicit short detach param and podInfo", 658 containerInfo{ 659 Executable: "/usr/bin/podman", 660 ServiceName: "jadda-jadda", 661 ContainerNameOrID: "jadda-jadda", 662 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 663 StopTimeout: 10, 664 PodmanVersion: "CI", 665 CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, 666 EnvVariable: define.EnvVariable, 667 GraphRoot: "/var/lib/containers/storage", 668 RunRoot: "/var/run/containers/storage", 669 Pod: &podInfo{ 670 PodIDFile: "%t/pod-foobar.pod-id-file", 671 }, 672 }, 673 goodNameNewWithPodFile, 674 true, 675 false, 676 false, 677 }, 678 {"good with explicit full detach param", 679 containerInfo{ 680 Executable: "/usr/bin/podman", 681 ServiceName: "jadda-jadda", 682 ContainerNameOrID: "jadda-jadda", 683 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 684 StopTimeout: 10, 685 PodmanVersion: "CI", 686 CreateCommand: []string{"I'll get stripped", "run", "--detach", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, 687 EnvVariable: define.EnvVariable, 688 GraphRoot: "/var/lib/containers/storage", 689 RunRoot: "/var/run/containers/storage", 690 }, 691 goodNameNewDetach, 692 true, 693 false, 694 false, 695 }, 696 {"good with id and no param", 697 containerInfo{ 698 Executable: "/usr/bin/podman", 699 ServiceName: "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 700 ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 701 PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 702 StopTimeout: 10, 703 PodmanVersion: "CI", 704 CreateCommand: []string{"I'll get stripped", "run", "awesome-image:latest"}, 705 EnvVariable: define.EnvVariable, 706 GraphRoot: "/var/lib/containers/storage", 707 RunRoot: "/var/run/containers/storage", 708 }, 709 goodIDNew, 710 true, 711 false, 712 false, 713 }, 714 {"good with explicit detach=true param", 715 containerInfo{ 716 Executable: "/usr/bin/podman", 717 ServiceName: "jadda-jadda", 718 ContainerNameOrID: "jadda-jadda", 719 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 720 StopTimeout: 42, 721 PodmanVersion: "CI", 722 CreateCommand: []string{"I'll get stripped", "run", "--detach=true", "awesome-image:latest"}, 723 EnvVariable: define.EnvVariable, 724 GraphRoot: "/var/lib/containers/storage", 725 RunRoot: "/var/run/containers/storage", 726 }, 727 genGoodNewDetach("--detach=true"), 728 true, 729 false, 730 false, 731 }, 732 {"good with explicit detach=false param", 733 containerInfo{ 734 Executable: "/usr/bin/podman", 735 ServiceName: "jadda-jadda", 736 ContainerNameOrID: "jadda-jadda", 737 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 738 StopTimeout: 42, 739 PodmanVersion: "CI", 740 CreateCommand: []string{"I'll get stripped", "run", "--detach=false", "awesome-image:latest"}, 741 EnvVariable: define.EnvVariable, 742 GraphRoot: "/var/lib/containers/storage", 743 RunRoot: "/var/run/containers/storage", 744 }, 745 genGoodNewDetach("-d"), 746 true, 747 false, 748 false, 749 }, 750 {"good with explicit detach=false param", 751 containerInfo{ 752 Executable: "/usr/bin/podman", 753 ServiceName: "jadda-jadda", 754 ContainerNameOrID: "jadda-jadda", 755 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 756 StopTimeout: 42, 757 PodmanVersion: "CI", 758 CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"}, 759 EnvVariable: define.EnvVariable, 760 GraphRoot: "/var/lib/containers/storage", 761 RunRoot: "/var/run/containers/storage", 762 }, 763 goodNameNewDetachFalseWithCmd, 764 true, 765 false, 766 false, 767 }, 768 {"good with multiple detach=false params", 769 containerInfo{ 770 Executable: "/usr/bin/podman", 771 ServiceName: "jadda-jadda", 772 ContainerNameOrID: "jadda-jadda", 773 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 774 StopTimeout: 42, 775 PodmanVersion: "CI", 776 CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"}, 777 EnvVariable: define.EnvVariable, 778 GraphRoot: "/var/lib/containers/storage", 779 RunRoot: "/var/run/containers/storage", 780 }, 781 goodNameNewDetachFalseWithCmd, 782 true, 783 false, 784 false, 785 }, 786 {"good with multiple shorthand params detach first", 787 containerInfo{ 788 Executable: "/usr/bin/podman", 789 ServiceName: "jadda-jadda", 790 ContainerNameOrID: "jadda-jadda", 791 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 792 StopTimeout: 42, 793 PodmanVersion: "CI", 794 CreateCommand: []string{"I'll get stripped", "run", "-dti", "awesome-image:latest"}, 795 EnvVariable: define.EnvVariable, 796 GraphRoot: "/var/lib/containers/storage", 797 RunRoot: "/var/run/containers/storage", 798 }, 799 genGoodNewDetach("-dti"), 800 true, 801 false, 802 false, 803 }, 804 {"good with multiple shorthand params detach last", 805 containerInfo{ 806 Executable: "/usr/bin/podman", 807 ServiceName: "jadda-jadda", 808 ContainerNameOrID: "jadda-jadda", 809 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 810 StopTimeout: 42, 811 PodmanVersion: "CI", 812 CreateCommand: []string{"I'll get stripped", "--events-backend", "none", "--runroot", "/root", "run", "awesome-image:latest"}, 813 EnvVariable: define.EnvVariable, 814 GraphRoot: "/var/lib/containers/storage", 815 RunRoot: "/var/run/containers/storage", 816 }, 817 goodNewRootFlags, 818 true, 819 false, 820 false, 821 }, 822 {"good with container create", 823 containerInfo{ 824 Executable: "/usr/bin/podman", 825 ServiceName: "jadda-jadda", 826 ContainerNameOrID: "jadda-jadda", 827 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 828 StopTimeout: 10, 829 PodmanVersion: "CI", 830 CreateCommand: []string{"I'll get stripped", "container", "create", "awesome-image:latest"}, 831 EnvVariable: define.EnvVariable, 832 GraphRoot: "/var/lib/containers/storage", 833 RunRoot: "/var/run/containers/storage", 834 }, 835 goodContainerCreate, 836 true, 837 false, 838 false, 839 }, 840 {"good with journald log tag (see #9034)", 841 containerInfo{ 842 Executable: "/usr/bin/podman", 843 ServiceName: "jadda-jadda", 844 ContainerNameOrID: "jadda-jadda", 845 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 846 StopTimeout: 10, 847 PodmanVersion: "CI", 848 CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "--log-driver=journald", "--log-opt=tag={{.Name}}", "awesome-image:latest"}, 849 EnvVariable: define.EnvVariable, 850 GraphRoot: "/var/lib/containers/storage", 851 RunRoot: "/var/run/containers/storage", 852 }, 853 goodNewWithJournaldTag, 854 true, 855 false, 856 false, 857 }, 858 {"good with special chars", 859 containerInfo{ 860 Executable: "/usr/bin/podman", 861 ServiceName: "jadda-jadda", 862 ContainerNameOrID: "jadda-jadda", 863 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 864 StopTimeout: 10, 865 PodmanVersion: "CI", 866 CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "awesome-image:latest", "sh", "-c", "kill $$ && echo %\\"}, 867 EnvVariable: define.EnvVariable, 868 GraphRoot: "/var/lib/containers/storage", 869 RunRoot: "/var/run/containers/storage", 870 }, 871 goodNewWithSpecialChars, 872 true, 873 false, 874 false, 875 }, 876 {"good with ID files", 877 containerInfo{ 878 Executable: "/usr/bin/podman", 879 ServiceName: "jadda-jadda", 880 ContainerNameOrID: "jadda-jadda", 881 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 882 StopTimeout: 10, 883 PodmanVersion: "CI", 884 GraphRoot: "/var/lib/containers/storage", 885 RunRoot: "/var/run/containers/storage", 886 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"}, 887 EnvVariable: define.EnvVariable, 888 }, 889 goodNewWithIDFiles, 890 true, 891 false, 892 false, 893 }, 894 {"good with pod ID files", 895 containerInfo{ 896 Executable: "/usr/bin/podman", 897 ServiceName: "jadda-jadda", 898 ContainerNameOrID: "jadda-jadda", 899 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 900 StopTimeout: 10, 901 PodmanVersion: "CI", 902 GraphRoot: "/var/lib/containers/storage", 903 RunRoot: "/var/run/containers/storage", 904 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"}, 905 EnvVariable: define.EnvVariable, 906 Pod: &podInfo{ 907 PodIDFile: "%t/pod-foobar.pod-id-file", 908 }, 909 }, 910 goodNewWithPodIDFiles, 911 true, 912 false, 913 false, 914 }, 915 {"good with environment variables", 916 containerInfo{ 917 Executable: "/usr/bin/podman", 918 ServiceName: "jadda-jadda", 919 ContainerNameOrID: "jadda-jadda", 920 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 921 StopTimeout: 10, 922 PodmanVersion: "CI", 923 GraphRoot: "/var/lib/containers/storage", 924 RunRoot: "/var/run/containers/storage", 925 CreateCommand: []string{"I'll get stripped", "create", "--env", "FOO", "--env=BAR", "--env=MYENV=2", "-e", "USER", "awesome-image:latest"}, 926 containerEnv: []string{"FOO=abc", "BAR=my test", "USER=%a", "MYENV=2"}, 927 EnvVariable: define.EnvVariable, 928 }, 929 goodNewWithEnvar, 930 true, 931 false, 932 false, 933 }, 934 {"good with restart policy", 935 containerInfo{ 936 Executable: "/usr/bin/podman", 937 ServiceName: "jadda-jadda", 938 ContainerNameOrID: "jadda-jadda", 939 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 940 StopTimeout: 10, 941 PodmanVersion: "CI", 942 GraphRoot: "/var/lib/containers/storage", 943 RunRoot: "/var/run/containers/storage", 944 CreateCommand: []string{"I'll get stripped", "create", "--restart", "on-failure:42", "awesome-image:latest"}, 945 EnvVariable: define.EnvVariable, 946 }, 947 goodNewWithRestartPolicy, 948 true, 949 false, 950 false, 951 }, 952 } 953 for _, tt := range tests { 954 test := tt 955 t.Run(tt.name, func(t *testing.T) { 956 opts := entities.GenerateSystemdOptions{ 957 New: test.new, 958 NoHeader: test.noHeader, 959 } 960 test.info.RestartPolicy = define.DefaultRestartPolicy 961 got, err := executeContainerTemplate(&test.info, opts) 962 if (err != nil) != test.wantErr { 963 t.Errorf("CreateContainerSystemdUnit() %s error = \n%v, wantErr \n%v", test.name, err, test.wantErr) 964 return 965 } 966 assert.Equal(t, test.want, got, test.name) 967 }) 968 } 969 }