github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/pkg/systemd/generate/systemdgen_test.go (about) 1 package generate 2 3 import ( 4 "testing" 5 ) 6 7 func TestValidateRestartPolicy(t *testing.T) { 8 type ContainerInfo struct { 9 restart string 10 } 11 tests := []struct { 12 name string 13 ContainerInfo ContainerInfo 14 wantErr bool 15 }{ 16 {"good-on", ContainerInfo{restart: "no"}, false}, 17 {"good-on-success", ContainerInfo{restart: "on-success"}, false}, 18 {"good-on-failure", ContainerInfo{restart: "on-failure"}, false}, 19 {"good-on-abnormal", ContainerInfo{restart: "on-abnormal"}, false}, 20 {"good-on-watchdog", ContainerInfo{restart: "on-watchdog"}, false}, 21 {"good-on-abort", ContainerInfo{restart: "on-abort"}, false}, 22 {"good-always", ContainerInfo{restart: "always"}, false}, 23 {"fail", ContainerInfo{restart: "foobar"}, true}, 24 {"failblank", ContainerInfo{restart: ""}, true}, 25 } 26 for _, tt := range tests { 27 test := tt 28 t.Run(tt.name, func(t *testing.T) { 29 if err := validateRestartPolicy(test.ContainerInfo.restart); (err != nil) != test.wantErr { 30 t.Errorf("ValidateRestartPolicy() error = %v, wantErr %v", err, test.wantErr) 31 } 32 }) 33 } 34 } 35 36 func TestCreateContainerSystemdUnit(t *testing.T) { 37 goodID := `# container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 38 # autogenerated by Podman CI 39 40 [Unit] 41 Description=Podman container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 42 Documentation=man:podman-generate-systemd(1) 43 Wants=network.target 44 After=network-online.target 45 46 [Service] 47 Environment=PODMAN_SYSTEMD_UNIT=%n 48 Restart=always 49 ExecStart=/usr/bin/podman start 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401 50 ExecStop=/usr/bin/podman stop -t 10 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401 51 PIDFile=/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 52 KillMode=none 53 Type=forking 54 55 [Install] 56 WantedBy=multi-user.target default.target` 57 58 goodName := `# container-foobar.service 59 # autogenerated by Podman CI 60 61 [Unit] 62 Description=Podman container-foobar.service 63 Documentation=man:podman-generate-systemd(1) 64 Wants=network.target 65 After=network-online.target 66 67 [Service] 68 Environment=PODMAN_SYSTEMD_UNIT=%n 69 Restart=always 70 ExecStart=/usr/bin/podman start foobar 71 ExecStop=/usr/bin/podman stop -t 10 foobar 72 PIDFile=/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 73 KillMode=none 74 Type=forking 75 76 [Install] 77 WantedBy=multi-user.target default.target` 78 79 goodNameBoundTo := `# container-foobar.service 80 # autogenerated by Podman CI 81 82 [Unit] 83 Description=Podman container-foobar.service 84 Documentation=man:podman-generate-systemd(1) 85 Wants=network.target 86 After=network-online.target 87 RefuseManualStart=yes 88 RefuseManualStop=yes 89 BindsTo=a.service b.service c.service pod.service 90 After=a.service b.service c.service pod.service 91 92 [Service] 93 Environment=PODMAN_SYSTEMD_UNIT=%n 94 Restart=always 95 ExecStart=/usr/bin/podman start foobar 96 ExecStop=/usr/bin/podman stop -t 10 foobar 97 PIDFile=/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 98 KillMode=none 99 Type=forking 100 101 [Install] 102 WantedBy=multi-user.target default.target` 103 104 podGoodName := `# pod-123abc.service 105 # autogenerated by Podman CI 106 107 [Unit] 108 Description=Podman pod-123abc.service 109 Documentation=man:podman-generate-systemd(1) 110 Wants=network.target 111 After=network-online.target 112 Requires=container-1.service container-2.service 113 Before=container-1.service container-2.service 114 115 [Service] 116 Environment=PODMAN_SYSTEMD_UNIT=%n 117 Restart=always 118 ExecStart=/usr/bin/podman start jadda-jadda-infra 119 ExecStop=/usr/bin/podman stop -t 10 jadda-jadda-infra 120 PIDFile=/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid 121 KillMode=none 122 Type=forking 123 124 [Install] 125 WantedBy=multi-user.target default.target` 126 127 goodNameNew := `# jadda-jadda.service 128 # autogenerated by Podman CI 129 130 [Unit] 131 Description=Podman jadda-jadda.service 132 Documentation=man:podman-generate-systemd(1) 133 Wants=network.target 134 After=network-online.target 135 136 [Service] 137 Environment=PODMAN_SYSTEMD_UNIT=%n 138 Restart=always 139 ExecStartPre=/usr/bin/rm -f %t/%n-pid %t/%n-cid 140 ExecStart=/usr/bin/podman run --conmon-pidfile %t/%n-pid --cidfile %t/%n-cid --cgroups=no-conmon -d --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN 141 ExecStop=/usr/bin/podman stop --ignore --cidfile %t/%n-cid -t 42 142 ExecStopPost=/usr/bin/podman rm --ignore -f --cidfile %t/%n-cid 143 PIDFile=%t/%n-pid 144 KillMode=none 145 Type=forking 146 147 [Install] 148 WantedBy=multi-user.target default.target` 149 150 goodNameNewDetach := `# jadda-jadda.service 151 # autogenerated by Podman CI 152 153 [Unit] 154 Description=Podman jadda-jadda.service 155 Documentation=man:podman-generate-systemd(1) 156 Wants=network.target 157 After=network-online.target 158 159 [Service] 160 Environment=PODMAN_SYSTEMD_UNIT=%n 161 Restart=always 162 ExecStartPre=/usr/bin/rm -f %t/%n-pid %t/%n-cid 163 ExecStart=/usr/bin/podman run --conmon-pidfile %t/%n-pid --cidfile %t/%n-cid --cgroups=no-conmon --detach --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN 164 ExecStop=/usr/bin/podman stop --ignore --cidfile %t/%n-cid -t 42 165 ExecStopPost=/usr/bin/podman rm --ignore -f --cidfile %t/%n-cid 166 PIDFile=%t/%n-pid 167 KillMode=none 168 Type=forking 169 170 [Install] 171 WantedBy=multi-user.target default.target` 172 173 goodIdNew := `# container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 174 # autogenerated by Podman CI 175 176 [Unit] 177 Description=Podman container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service 178 Documentation=man:podman-generate-systemd(1) 179 Wants=network.target 180 After=network-online.target 181 182 [Service] 183 Environment=PODMAN_SYSTEMD_UNIT=%n 184 Restart=always 185 ExecStartPre=/usr/bin/rm -f %t/%n-pid %t/%n-cid 186 ExecStart=/usr/bin/podman run --conmon-pidfile %t/%n-pid --cidfile %t/%n-cid --cgroups=no-conmon -d awesome-image:latest 187 ExecStop=/usr/bin/podman stop --ignore --cidfile %t/%n-cid -t 10 188 ExecStopPost=/usr/bin/podman rm --ignore -f --cidfile %t/%n-cid 189 PIDFile=%t/%n-pid 190 KillMode=none 191 Type=forking 192 193 [Install] 194 WantedBy=multi-user.target default.target` 195 196 tests := []struct { 197 name string 198 info ContainerInfo 199 want string 200 wantErr bool 201 }{ 202 203 {"good with id", 204 ContainerInfo{ 205 Executable: "/usr/bin/podman", 206 ServiceName: "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 207 ContainerName: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 208 RestartPolicy: "always", 209 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 210 StopTimeout: 10, 211 PodmanVersion: "CI", 212 }, 213 goodID, 214 false, 215 }, 216 {"good with name", 217 ContainerInfo{ 218 Executable: "/usr/bin/podman", 219 ServiceName: "container-foobar", 220 ContainerName: "foobar", 221 RestartPolicy: "always", 222 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 223 StopTimeout: 10, 224 PodmanVersion: "CI", 225 }, 226 goodName, 227 false, 228 }, 229 {"good with name and bound to", 230 ContainerInfo{ 231 Executable: "/usr/bin/podman", 232 ServiceName: "container-foobar", 233 ContainerName: "foobar", 234 RestartPolicy: "always", 235 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 236 StopTimeout: 10, 237 PodmanVersion: "CI", 238 BoundToServices: []string{"pod", "a", "b", "c"}, 239 }, 240 goodNameBoundTo, 241 false, 242 }, 243 {"pod", 244 ContainerInfo{ 245 Executable: "/usr/bin/podman", 246 ServiceName: "pod-123abc", 247 ContainerName: "jadda-jadda-infra", 248 RestartPolicy: "always", 249 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 250 StopTimeout: 10, 251 PodmanVersion: "CI", 252 RequiredServices: []string{"container-1", "container-2"}, 253 }, 254 podGoodName, 255 false, 256 }, 257 {"bad restart policy", 258 ContainerInfo{ 259 Executable: "/usr/bin/podman", 260 ServiceName: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 261 RestartPolicy: "never", 262 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 263 StopTimeout: 10, 264 PodmanVersion: "CI", 265 }, 266 "", 267 true, 268 }, 269 {"good with name and generic", 270 ContainerInfo{ 271 Executable: "/usr/bin/podman", 272 ServiceName: "jadda-jadda", 273 ContainerName: "jadda-jadda", 274 RestartPolicy: "always", 275 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 276 StopTimeout: 42, 277 PodmanVersion: "CI", 278 New: true, 279 CreateCommand: []string{"I'll get stripped", "container", "run", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, 280 }, 281 goodNameNew, 282 false, 283 }, 284 {"good with explicit short detach param", 285 ContainerInfo{ 286 Executable: "/usr/bin/podman", 287 ServiceName: "jadda-jadda", 288 ContainerName: "jadda-jadda", 289 RestartPolicy: "always", 290 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 291 StopTimeout: 42, 292 PodmanVersion: "CI", 293 New: true, 294 CreateCommand: []string{"I'll get stripped", "container", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, 295 }, 296 goodNameNew, 297 false, 298 }, 299 {"good with explicit full detach param", 300 ContainerInfo{ 301 Executable: "/usr/bin/podman", 302 ServiceName: "jadda-jadda", 303 ContainerName: "jadda-jadda", 304 RestartPolicy: "always", 305 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 306 StopTimeout: 42, 307 PodmanVersion: "CI", 308 New: true, 309 CreateCommand: []string{"I'll get stripped", "container", "run", "--detach", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, 310 }, 311 goodNameNewDetach, 312 false, 313 }, 314 {"good with id and no param", 315 ContainerInfo{ 316 Executable: "/usr/bin/podman", 317 ServiceName: "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 318 ContainerName: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401", 319 RestartPolicy: "always", 320 PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", 321 StopTimeout: 10, 322 PodmanVersion: "CI", 323 New: true, 324 CreateCommand: []string{"I'll get stripped", "container", "run", "awesome-image:latest"}, 325 }, 326 goodIdNew, 327 false, 328 }, 329 } 330 for _, tt := range tests { 331 test := tt 332 t.Run(tt.name, func(t *testing.T) { 333 opts := Options{ 334 Files: false, 335 New: test.info.New, 336 } 337 got, err := CreateContainerSystemdUnit(&test.info, opts) 338 if (err != nil) != test.wantErr { 339 t.Errorf("CreateContainerSystemdUnit() error = \n%v, wantErr \n%v", err, test.wantErr) 340 return 341 } 342 if got != test.want { 343 t.Errorf("CreateContainerSystemdUnit() = \n%v\n---------> want\n%v", got, test.want) 344 } 345 }) 346 } 347 }