github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/systemd/generate/pods_test.go (about)

     1  package generate
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/hanks177/podman/v4/pkg/domain/entities"
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestSetPodExitPolicy(t *testing.T) {
    11  	tests := []struct {
    12  		input, expected []string
    13  	}{
    14  		{
    15  			[]string{"podman", "pod", "create"},
    16  			[]string{"podman", "pod", "create", "--exit-policy=stop"},
    17  		},
    18  		{
    19  			[]string{"podman", "pod", "create", "--exit-policy=continue"},
    20  			[]string{"podman", "pod", "create", "--exit-policy=continue"},
    21  		},
    22  		{
    23  			[]string{"podman", "pod", "create", "--exit-policy", "continue"},
    24  			[]string{"podman", "pod", "create", "--exit-policy", "continue"},
    25  		},
    26  	}
    27  	for _, test := range tests {
    28  		assert.Equalf(t, test.expected, setPodExitPolicy(test.input), "%v", test.input)
    29  	}
    30  }
    31  
    32  func TestValidateRestartPolicyPod(t *testing.T) {
    33  	type podInfo struct {
    34  		restart string
    35  	}
    36  	tests := []struct {
    37  		name    string
    38  		podInfo podInfo
    39  		wantErr bool
    40  	}{
    41  		{"good-on", podInfo{restart: "no"}, false},
    42  		{"good-on-success", podInfo{restart: "on-success"}, false},
    43  		{"good-on-failure", podInfo{restart: "on-failure"}, false},
    44  		{"good-on-abnormal", podInfo{restart: "on-abnormal"}, false},
    45  		{"good-on-watchdog", podInfo{restart: "on-watchdog"}, false},
    46  		{"good-on-abort", podInfo{restart: "on-abort"}, false},
    47  		{"good-always", podInfo{restart: "always"}, false},
    48  		{"fail", podInfo{restart: "foobar"}, true},
    49  		{"failblank", podInfo{restart: ""}, true},
    50  	}
    51  	for _, tt := range tests {
    52  		test := tt
    53  		t.Run(tt.name, func(t *testing.T) {
    54  			if err := validateRestartPolicy(test.podInfo.restart); (err != nil) != test.wantErr {
    55  				t.Errorf("ValidateRestartPolicy() error = %v, wantErr %v", err, test.wantErr)
    56  			}
    57  		})
    58  	}
    59  }
    60  
    61  func TestCreatePodSystemdUnit(t *testing.T) {
    62  	serviceInfo := `# pod-123abc.service
    63  `
    64  	headerInfo := `# autogenerated by Podman CI
    65  `
    66  	podContent := `
    67  [Unit]
    68  Description=Podman pod-123abc.service
    69  Documentation=man:podman-generate-systemd(1)
    70  Wants=network-online.target
    71  After=network-online.target
    72  RequiresMountsFor=/var/run/containers/storage
    73  Requires=container-1.service container-2.service
    74  Before=container-1.service container-2.service
    75  
    76  [Service]
    77  Environment=PODMAN_SYSTEMD_UNIT=%n
    78  Restart=on-failure
    79  TimeoutStopSec=102
    80  ExecStart=/usr/bin/podman start jadda-jadda-infra
    81  ExecStop=/usr/bin/podman stop -t 42 jadda-jadda-infra
    82  ExecStopPost=/usr/bin/podman stop -t 42 jadda-jadda-infra
    83  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
    84  Type=forking
    85  
    86  [Install]
    87  WantedBy=default.target
    88  `
    89  	podGood := serviceInfo + headerInfo + podContent
    90  	podGoodNoHeaderInfo := serviceInfo + podContent
    91  
    92  	podGoodWithEmptyPrefix := `# 123abc.service
    93  # autogenerated by Podman CI
    94  
    95  [Unit]
    96  Description=Podman 123abc.service
    97  Documentation=man:podman-generate-systemd(1)
    98  Wants=network-online.target
    99  After=network-online.target
   100  RequiresMountsFor=/var/run/containers/storage
   101  Requires=container-1.service container-2.service
   102  Before=container-1.service container-2.service
   103  
   104  [Service]
   105  Environment=PODMAN_SYSTEMD_UNIT=%n
   106  Restart=on-failure
   107  TimeoutStopSec=102
   108  ExecStart=/usr/bin/podman start jadda-jadda-infra
   109  ExecStop=/usr/bin/podman stop -t 42 jadda-jadda-infra
   110  ExecStopPost=/usr/bin/podman stop -t 42 jadda-jadda-infra
   111  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   112  Type=forking
   113  
   114  [Install]
   115  WantedBy=default.target
   116  `
   117  
   118  	podGoodCustomWants := `# pod-123abc.service
   119  # autogenerated by Podman CI
   120  
   121  [Unit]
   122  Description=Podman pod-123abc.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  Requires=container-1.service container-2.service
   128  Before=container-1.service container-2.service
   129  
   130  # User-defined dependencies
   131  Wants=a.service b.service c.target
   132  
   133  [Service]
   134  Environment=PODMAN_SYSTEMD_UNIT=%n
   135  Restart=on-failure
   136  TimeoutStopSec=102
   137  ExecStart=/usr/bin/podman start jadda-jadda-infra
   138  ExecStop=/usr/bin/podman stop -t 42 jadda-jadda-infra
   139  ExecStopPost=/usr/bin/podman stop -t 42 jadda-jadda-infra
   140  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   141  Type=forking
   142  
   143  [Install]
   144  WantedBy=default.target
   145  `
   146  	podGoodCustomAfter := `# pod-123abc.service
   147  # autogenerated by Podman CI
   148  
   149  [Unit]
   150  Description=Podman pod-123abc.service
   151  Documentation=man:podman-generate-systemd(1)
   152  Wants=network-online.target
   153  After=network-online.target
   154  RequiresMountsFor=/var/run/containers/storage
   155  Requires=container-1.service container-2.service
   156  Before=container-1.service container-2.service
   157  
   158  # User-defined dependencies
   159  After=a.service b.service c.target
   160  
   161  [Service]
   162  Environment=PODMAN_SYSTEMD_UNIT=%n
   163  Restart=on-failure
   164  TimeoutStopSec=102
   165  ExecStart=/usr/bin/podman start jadda-jadda-infra
   166  ExecStop=/usr/bin/podman stop -t 42 jadda-jadda-infra
   167  ExecStopPost=/usr/bin/podman stop -t 42 jadda-jadda-infra
   168  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   169  Type=forking
   170  
   171  [Install]
   172  WantedBy=default.target
   173  `
   174  	podGoodCustomRequires := `# pod-123abc.service
   175  # autogenerated by Podman CI
   176  
   177  [Unit]
   178  Description=Podman pod-123abc.service
   179  Documentation=man:podman-generate-systemd(1)
   180  Wants=network-online.target
   181  After=network-online.target
   182  RequiresMountsFor=/var/run/containers/storage
   183  Requires=container-1.service container-2.service
   184  Before=container-1.service container-2.service
   185  
   186  # User-defined dependencies
   187  Requires=a.service b.service c.target
   188  
   189  [Service]
   190  Environment=PODMAN_SYSTEMD_UNIT=%n
   191  Restart=on-failure
   192  TimeoutStopSec=102
   193  ExecStart=/usr/bin/podman start jadda-jadda-infra
   194  ExecStop=/usr/bin/podman stop -t 42 jadda-jadda-infra
   195  ExecStopPost=/usr/bin/podman stop -t 42 jadda-jadda-infra
   196  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   197  Type=forking
   198  
   199  [Install]
   200  WantedBy=default.target
   201  `
   202  	podGoodCustomDependencies := `# pod-123abc.service
   203  # autogenerated by Podman CI
   204  
   205  [Unit]
   206  Description=Podman pod-123abc.service
   207  Documentation=man:podman-generate-systemd(1)
   208  Wants=network-online.target
   209  After=network-online.target
   210  RequiresMountsFor=/var/run/containers/storage
   211  Requires=container-1.service container-2.service
   212  Before=container-1.service container-2.service
   213  
   214  # User-defined dependencies
   215  Wants=a.service b.service c.target
   216  After=a.service b.service c.target
   217  Requires=a.service b.service c.target
   218  
   219  [Service]
   220  Environment=PODMAN_SYSTEMD_UNIT=%n
   221  Restart=on-failure
   222  TimeoutStopSec=102
   223  ExecStart=/usr/bin/podman start jadda-jadda-infra
   224  ExecStop=/usr/bin/podman stop -t 42 jadda-jadda-infra
   225  ExecStopPost=/usr/bin/podman stop -t 42 jadda-jadda-infra
   226  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   227  Type=forking
   228  
   229  [Install]
   230  WantedBy=default.target
   231  `
   232  
   233  	podGoodRestartSec := `# pod-123abc.service
   234  # autogenerated by Podman CI
   235  
   236  [Unit]
   237  Description=Podman pod-123abc.service
   238  Documentation=man:podman-generate-systemd(1)
   239  Wants=network-online.target
   240  After=network-online.target
   241  RequiresMountsFor=/var/run/containers/storage
   242  Requires=container-1.service container-2.service
   243  Before=container-1.service container-2.service
   244  
   245  [Service]
   246  Environment=PODMAN_SYSTEMD_UNIT=%n
   247  Restart=on-failure
   248  RestartSec=15
   249  TimeoutStopSec=102
   250  ExecStart=/usr/bin/podman start jadda-jadda-infra
   251  ExecStop=/usr/bin/podman stop -t 42 jadda-jadda-infra
   252  ExecStopPost=/usr/bin/podman stop -t 42 jadda-jadda-infra
   253  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   254  Type=forking
   255  
   256  [Install]
   257  WantedBy=default.target
   258  `
   259  
   260  	podGoodNamedNew := `# pod-123abc.service
   261  # autogenerated by Podman CI
   262  
   263  [Unit]
   264  Description=Podman pod-123abc.service
   265  Documentation=man:podman-generate-systemd(1)
   266  Wants=network-online.target
   267  After=network-online.target
   268  RequiresMountsFor=/var/run/containers/storage
   269  Requires=container-1.service container-2.service
   270  Before=container-1.service container-2.service
   271  
   272  [Service]
   273  Environment=PODMAN_SYSTEMD_UNIT=%n
   274  Restart=on-failure
   275  TimeoutStopSec=70
   276  ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id
   277  ExecStartPre=/usr/bin/podman pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo "bar=arg with space" --replace --exit-policy=stop
   278  ExecStart=/usr/bin/podman pod start --pod-id-file %t/pod-123abc.pod-id
   279  ExecStop=/usr/bin/podman pod stop --ignore --pod-id-file %t/pod-123abc.pod-id -t 10
   280  ExecStopPost=/usr/bin/podman pod rm --ignore -f --pod-id-file %t/pod-123abc.pod-id
   281  PIDFile=%t/pod-123abc.pid
   282  Type=forking
   283  
   284  [Install]
   285  WantedBy=default.target
   286  `
   287  
   288  	podGoodNamedNewWithRootArgs := `# pod-123abc.service
   289  # autogenerated by Podman CI
   290  
   291  [Unit]
   292  Description=Podman pod-123abc.service
   293  Documentation=man:podman-generate-systemd(1)
   294  Wants=network-online.target
   295  After=network-online.target
   296  RequiresMountsFor=/var/run/containers/storage
   297  Requires=container-1.service container-2.service
   298  Before=container-1.service container-2.service
   299  
   300  [Service]
   301  Environment=PODMAN_SYSTEMD_UNIT=%n
   302  Restart=on-failure
   303  TimeoutStopSec=70
   304  ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id
   305  ExecStartPre=/usr/bin/podman --events-backend none --runroot /root pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo "bar=arg with space" --replace --exit-policy=stop
   306  ExecStart=/usr/bin/podman --events-backend none --runroot /root pod start --pod-id-file %t/pod-123abc.pod-id
   307  ExecStop=/usr/bin/podman --events-backend none --runroot /root pod stop --ignore --pod-id-file %t/pod-123abc.pod-id -t 10
   308  ExecStopPost=/usr/bin/podman --events-backend none --runroot /root pod rm --ignore -f --pod-id-file %t/pod-123abc.pod-id
   309  PIDFile=%t/pod-123abc.pid
   310  Type=forking
   311  
   312  [Install]
   313  WantedBy=default.target
   314  `
   315  
   316  	podGoodNamedNewWithReplaceFalse := `# pod-123abc.service
   317  # autogenerated by Podman CI
   318  
   319  [Unit]
   320  Description=Podman pod-123abc.service
   321  Documentation=man:podman-generate-systemd(1)
   322  Wants=network-online.target
   323  After=network-online.target
   324  RequiresMountsFor=/var/run/containers/storage
   325  Requires=container-1.service container-2.service
   326  Before=container-1.service container-2.service
   327  
   328  [Service]
   329  Environment=PODMAN_SYSTEMD_UNIT=%n
   330  Restart=on-failure
   331  TimeoutStopSec=70
   332  ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id
   333  ExecStartPre=/usr/bin/podman pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo --replace --exit-policy=stop
   334  ExecStart=/usr/bin/podman pod start --pod-id-file %t/pod-123abc.pod-id
   335  ExecStop=/usr/bin/podman pod stop --ignore --pod-id-file %t/pod-123abc.pod-id -t 10
   336  ExecStopPost=/usr/bin/podman pod rm --ignore -f --pod-id-file %t/pod-123abc.pod-id
   337  PIDFile=%t/pod-123abc.pid
   338  Type=forking
   339  
   340  [Install]
   341  WantedBy=default.target
   342  `
   343  
   344  	podNewLabelWithCurlyBraces := `# pod-123abc.service
   345  # autogenerated by Podman CI
   346  
   347  [Unit]
   348  Description=Podman pod-123abc.service
   349  Documentation=man:podman-generate-systemd(1)
   350  Wants=network-online.target
   351  After=network-online.target
   352  RequiresMountsFor=/var/run/containers/storage
   353  Requires=container-1.service container-2.service
   354  Before=container-1.service container-2.service
   355  
   356  [Service]
   357  Environment=PODMAN_SYSTEMD_UNIT=%n
   358  Restart=on-failure
   359  TimeoutStopSec=70
   360  ExecStartPre=/bin/rm -f %t/pod-123abc.pid %t/pod-123abc.pod-id
   361  ExecStartPre=/usr/bin/podman pod create --infra-conmon-pidfile %t/pod-123abc.pid --pod-id-file %t/pod-123abc.pod-id --name foo --label key={{someval}} --exit-policy=continue --replace
   362  ExecStart=/usr/bin/podman pod start --pod-id-file %t/pod-123abc.pod-id
   363  ExecStop=/usr/bin/podman pod stop --ignore --pod-id-file %t/pod-123abc.pod-id -t 10
   364  ExecStopPost=/usr/bin/podman pod rm --ignore -f --pod-id-file %t/pod-123abc.pod-id
   365  PIDFile=%t/pod-123abc.pid
   366  Type=forking
   367  
   368  [Install]
   369  WantedBy=default.target
   370  `
   371  
   372  	tests := []struct {
   373  		name     string
   374  		info     podInfo
   375  		want     string
   376  		new      bool
   377  		noHeader bool
   378  		wantErr  bool
   379  	}{
   380  		{"pod",
   381  			podInfo{
   382  				Executable:       "/usr/bin/podman",
   383  				ServiceName:      "pod-123abc",
   384  				InfraNameOrID:    "jadda-jadda-infra",
   385  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   386  				StopTimeout:      42,
   387  				PodmanVersion:    "CI",
   388  				GraphRoot:        "/var/lib/containers/storage",
   389  				RunRoot:          "/var/run/containers/storage",
   390  				RequiredServices: []string{"container-1", "container-2"},
   391  				CreateCommand:    []string{"podman", "pod", "create", "--name", "foo", "bar=arg with space"},
   392  			},
   393  			podGood,
   394  			false,
   395  			false,
   396  			false,
   397  		},
   398  		{"pod",
   399  			podInfo{
   400  				Executable:       "/usr/bin/podman",
   401  				ServiceName:      "pod-123abc",
   402  				InfraNameOrID:    "jadda-jadda-infra",
   403  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   404  				StopTimeout:      42,
   405  				PodmanVersion:    "CI",
   406  				GraphRoot:        "/var/lib/containers/storage",
   407  				RunRoot:          "/var/run/containers/storage",
   408  				RequiredServices: []string{"container-1", "container-2"},
   409  				Wants:            []string{"a.service", "b.service", "c.target"},
   410  				CreateCommand: []string{
   411  					"podman", "pod", "create", "--name", "foo", "--wants", "a.service",
   412  					"--wants", "b.service", "--wants", "c.target", "bar=arg with space"},
   413  			},
   414  			podGoodCustomWants,
   415  			false,
   416  			false,
   417  			false,
   418  		},
   419  		{"pod",
   420  			podInfo{
   421  				Executable:       "/usr/bin/podman",
   422  				ServiceName:      "pod-123abc",
   423  				InfraNameOrID:    "jadda-jadda-infra",
   424  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   425  				StopTimeout:      42,
   426  				PodmanVersion:    "CI",
   427  				GraphRoot:        "/var/lib/containers/storage",
   428  				RunRoot:          "/var/run/containers/storage",
   429  				RequiredServices: []string{"container-1", "container-2"},
   430  				After:            []string{"a.service", "b.service", "c.target"},
   431  				CreateCommand: []string{
   432  					"podman", "pod", "create", "--name", "foo", "--after", "a.service",
   433  					"--after", "b.service", "--after", "c.target", "bar=arg with space"},
   434  			},
   435  			podGoodCustomAfter,
   436  			false,
   437  			false,
   438  			false,
   439  		},
   440  		{"pod",
   441  			podInfo{
   442  				Executable:       "/usr/bin/podman",
   443  				ServiceName:      "pod-123abc",
   444  				InfraNameOrID:    "jadda-jadda-infra",
   445  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   446  				StopTimeout:      42,
   447  				PodmanVersion:    "CI",
   448  				GraphRoot:        "/var/lib/containers/storage",
   449  				RunRoot:          "/var/run/containers/storage",
   450  				RequiredServices: []string{"container-1", "container-2"},
   451  				Requires:         []string{"a.service", "b.service", "c.target"},
   452  				CreateCommand: []string{
   453  					"podman", "pod", "create", "--name", "foo", "--requires", "a.service",
   454  					"--requires", "b.service", "--requires", "c.target", "bar=arg with space"},
   455  			},
   456  			podGoodCustomRequires,
   457  			false,
   458  			false,
   459  			false,
   460  		},
   461  		{"pod",
   462  			podInfo{
   463  				Executable:       "/usr/bin/podman",
   464  				ServiceName:      "pod-123abc",
   465  				InfraNameOrID:    "jadda-jadda-infra",
   466  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   467  				StopTimeout:      42,
   468  				PodmanVersion:    "CI",
   469  				GraphRoot:        "/var/lib/containers/storage",
   470  				RunRoot:          "/var/run/containers/storage",
   471  				RequiredServices: []string{"container-1", "container-2"},
   472  				Wants:            []string{"a.service", "b.service", "c.target"},
   473  				After:            []string{"a.service", "b.service", "c.target"},
   474  				Requires:         []string{"a.service", "b.service", "c.target"},
   475  				CreateCommand: []string{
   476  					"podman", "pod", "create", "--name", "foo", "--wants", "a.service",
   477  					"--wants", "b.service", "--wants", "c.target", "--after", "a.service",
   478  					"--after", "b.service", "--after", "c.target", "--requires", "a.service",
   479  					"--requires", "b.service", "--requires", "c.target", "bar=arg with space"},
   480  			},
   481  			podGoodCustomDependencies,
   482  			false,
   483  			false,
   484  			false,
   485  		},
   486  		{"pod restartSec",
   487  			podInfo{
   488  				Executable:       "/usr/bin/podman",
   489  				ServiceName:      "pod-123abc",
   490  				InfraNameOrID:    "jadda-jadda-infra",
   491  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   492  				StopTimeout:      42,
   493  				PodmanVersion:    "CI",
   494  				GraphRoot:        "/var/lib/containers/storage",
   495  				RunRoot:          "/var/run/containers/storage",
   496  				RequiredServices: []string{"container-1", "container-2"},
   497  				CreateCommand:    []string{"podman", "pod", "create", "--name", "foo", "bar=arg with space"},
   498  				RestartSec:       15,
   499  			},
   500  			podGoodRestartSec,
   501  			false,
   502  			false,
   503  			false,
   504  		},
   505  		{"pod noHeader",
   506  			podInfo{
   507  				Executable:       "/usr/bin/podman",
   508  				ServiceName:      "pod-123abc",
   509  				InfraNameOrID:    "jadda-jadda-infra",
   510  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   511  				StopTimeout:      42,
   512  				PodmanVersion:    "CI",
   513  				GraphRoot:        "/var/lib/containers/storage",
   514  				RunRoot:          "/var/run/containers/storage",
   515  				RequiredServices: []string{"container-1", "container-2"},
   516  				CreateCommand:    []string{"podman", "pod", "create", "--name", "foo", "bar=arg with space"},
   517  			},
   518  			podGoodNoHeaderInfo,
   519  			false,
   520  			true,
   521  			false,
   522  		},
   523  		{"pod with root args",
   524  			podInfo{
   525  				Executable:       "/usr/bin/podman",
   526  				ServiceName:      "pod-123abc",
   527  				InfraNameOrID:    "jadda-jadda-infra",
   528  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   529  				StopTimeout:      42,
   530  				PodmanVersion:    "CI",
   531  				GraphRoot:        "/var/lib/containers/storage",
   532  				RunRoot:          "/var/run/containers/storage",
   533  				RequiredServices: []string{"container-1", "container-2"},
   534  				CreateCommand:    []string{"podman", "--events-backend", "none", "--runroot", "/root", "pod", "create", "--name", "foo", "bar=arg with space"},
   535  			},
   536  			podGood,
   537  			false,
   538  			false,
   539  			false,
   540  		},
   541  		{"pod --new",
   542  			podInfo{
   543  				Executable:       "/usr/bin/podman",
   544  				ServiceName:      "pod-123abc",
   545  				InfraNameOrID:    "jadda-jadda-infra",
   546  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   547  				StopTimeout:      10,
   548  				PodmanVersion:    "CI",
   549  				GraphRoot:        "/var/lib/containers/storage",
   550  				RunRoot:          "/var/run/containers/storage",
   551  				RequiredServices: []string{"container-1", "container-2"},
   552  				CreateCommand:    []string{"podman", "pod", "create", "--name", "foo", "bar=arg with space"},
   553  			},
   554  			podGoodNamedNew,
   555  			true,
   556  			false,
   557  			false,
   558  		},
   559  		{"pod --new with root args",
   560  			podInfo{
   561  				Executable:       "/usr/bin/podman",
   562  				ServiceName:      "pod-123abc",
   563  				InfraNameOrID:    "jadda-jadda-infra",
   564  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   565  				StopTimeout:      10,
   566  				PodmanVersion:    "CI",
   567  				GraphRoot:        "/var/lib/containers/storage",
   568  				RunRoot:          "/var/run/containers/storage",
   569  				RequiredServices: []string{"container-1", "container-2"},
   570  				CreateCommand:    []string{"podman", "--events-backend", "none", "--runroot", "/root", "pod", "create", "--name", "foo", "bar=arg with space"},
   571  			},
   572  			podGoodNamedNewWithRootArgs,
   573  			true,
   574  			false,
   575  			false,
   576  		},
   577  		{"pod --new with --replace=false",
   578  			podInfo{
   579  				Executable:       "/usr/bin/podman",
   580  				ServiceName:      "pod-123abc",
   581  				InfraNameOrID:    "jadda-jadda-infra",
   582  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   583  				StopTimeout:      10,
   584  				PodmanVersion:    "CI",
   585  				GraphRoot:        "/var/lib/containers/storage",
   586  				RunRoot:          "/var/run/containers/storage",
   587  				RequiredServices: []string{"container-1", "container-2"},
   588  				CreateCommand:    []string{"podman", "pod", "create", "--name", "foo", "--replace=false"},
   589  			},
   590  			podGoodNamedNewWithReplaceFalse,
   591  			true,
   592  			false,
   593  			false,
   594  		},
   595  		{"pod --new with double curly braces",
   596  			podInfo{
   597  				Executable:       "/usr/bin/podman",
   598  				ServiceName:      "pod-123abc",
   599  				InfraNameOrID:    "jadda-jadda-infra",
   600  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   601  				StopTimeout:      10,
   602  				PodmanVersion:    "CI",
   603  				GraphRoot:        "/var/lib/containers/storage",
   604  				RunRoot:          "/var/run/containers/storage",
   605  				RequiredServices: []string{"container-1", "container-2"},
   606  				CreateCommand:    []string{"podman", "pod", "create", "--name", "foo", "--label", "key={{someval}}", "--exit-policy=continue"},
   607  			},
   608  			podNewLabelWithCurlyBraces,
   609  			true,
   610  			false,
   611  			false,
   612  		},
   613  		{"pod --new with ID files",
   614  			podInfo{
   615  				Executable:       "/usr/bin/podman",
   616  				ServiceName:      "pod-123abc",
   617  				InfraNameOrID:    "jadda-jadda-infra",
   618  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   619  				StopTimeout:      10,
   620  				PodmanVersion:    "CI",
   621  				GraphRoot:        "/var/lib/containers/storage",
   622  				RunRoot:          "/var/run/containers/storage",
   623  				RequiredServices: []string{"container-1", "container-2"},
   624  				CreateCommand:    []string{"podman", "pod", "create", "--infra-conmon-pidfile", "/tmp/pod-123abc.pid", "--pod-id-file", "/tmp/pod-123abc.pod-id", "--name", "foo", "bar=arg with space"},
   625  			},
   626  			podGoodNamedNew,
   627  			true,
   628  			false,
   629  			false,
   630  		},
   631  		{"pod with empty pod-prefix",
   632  			podInfo{
   633  				Executable:       "/usr/bin/podman",
   634  				ServiceName:      "123abc",
   635  				InfraNameOrID:    "jadda-jadda-infra",
   636  				PIDFile:          "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   637  				StopTimeout:      42,
   638  				PodmanVersion:    "CI",
   639  				GraphRoot:        "/var/lib/containers/storage",
   640  				RunRoot:          "/var/run/containers/storage",
   641  				RequiredServices: []string{"container-1", "container-2"},
   642  				CreateCommand:    []string{"podman", "pod", "create", "--name", "foo", "bar=arg with space"},
   643  			},
   644  			podGoodWithEmptyPrefix,
   645  			false,
   646  			false,
   647  			false,
   648  		},
   649  	}
   650  
   651  	for _, tt := range tests {
   652  		test := tt
   653  		t.Run(tt.name, func(t *testing.T) {
   654  			opts := entities.GenerateSystemdOptions{
   655  				New:      test.new,
   656  				NoHeader: test.noHeader,
   657  			}
   658  			got, err := executePodTemplate(&test.info, opts)
   659  			if (err != nil) != test.wantErr {
   660  				t.Errorf("CreatePodSystemdUnit() error = \n%v, wantErr \n%v", err, test.wantErr)
   661  				return
   662  			}
   663  			assert.Equal(t, test.want, got)
   664  		})
   665  	}
   666  }