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  }