mirror of
				https://github.com/containers/podman.git
				synced 2025-11-04 17:07:20 +08:00 
			
		
		
		
	Add testcase for WSL dist conflicts
Signed-off-by: Brent Baude <bbaude@redhat.com>
This commit is contained in:
		
				
					committed by
					
						
						Jason T. Greene
					
				
			
			
				
	
			
			
			
						parent
						
							d23dd35dc1
						
					
				
				
					commit
					144e420bb9
				
			@ -235,3 +235,21 @@ func isVmtype(vmType define.VMType) bool {
 | 
				
			|||||||
func isWSL() bool {
 | 
					func isWSL() bool {
 | 
				
			||||||
	return isVmtype(define.WSLVirt)
 | 
						return isVmtype(define.WSLVirt)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func runSystemCommand(binary string, cmdArgs []string, timeout time.Duration, wait bool) (*machineSession, error) {
 | 
				
			||||||
 | 
						if len(os.Getenv("DEBUG")) > 0 {
 | 
				
			||||||
 | 
							cmdArgs = append([]string{"--log-level=debug"}, cmdArgs...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						GinkgoWriter.Println(binary + " " + strings.Join(cmdArgs, " "))
 | 
				
			||||||
 | 
						c := exec.Command(binary, cmdArgs...)
 | 
				
			||||||
 | 
						session, err := Start(c, GinkgoWriter, GinkgoWriter)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							Fail(fmt.Sprintf("Unable to start session: %q", err))
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						ms := machineSession{session}
 | 
				
			||||||
 | 
						if wait {
 | 
				
			||||||
 | 
							ms.waitWithTimeout(timeout)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &ms, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@ package e2e_test
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/Microsoft/go-winio/vhd"
 | 
						"github.com/Microsoft/go-winio/vhd"
 | 
				
			||||||
@ -42,6 +43,7 @@ var _ = Describe("podman machine init - windows only", func() {
 | 
				
			|||||||
		Expect(inspectSession).To(Exit(0))
 | 
							Expect(inspectSession).To(Exit(0))
 | 
				
			||||||
		Expect(inspectSession.outputToString()).To(Equal("true"))
 | 
							Expect(inspectSession.outputToString()).To(Equal("true"))
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	It("init should not should not overwrite existing HyperV vms", func() {
 | 
						It("init should not should not overwrite existing HyperV vms", func() {
 | 
				
			||||||
		skipIfNotVmtype(define.HyperVVirt, "HyperV test only")
 | 
							skipIfNotVmtype(define.HyperVVirt, "HyperV test only")
 | 
				
			||||||
		name := randomString()
 | 
							name := randomString()
 | 
				
			||||||
@ -75,4 +77,50 @@ var _ = Describe("podman machine init - windows only", func() {
 | 
				
			|||||||
		Expect(session).To(Exit(125))
 | 
							Expect(session).To(Exit(125))
 | 
				
			||||||
		Expect(session.errorToString()).To(ContainSubstring("already exists on hypervisor"))
 | 
							Expect(session.errorToString()).To(ContainSubstring("already exists on hypervisor"))
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						It("init should not should not overwrite existing HyperV vms", func() {
 | 
				
			||||||
 | 
							skipIfNotVmtype(define.WSLVirt, "WSL test only")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var (
 | 
				
			||||||
 | 
								wsl string = "wsl"
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							name := randomString()
 | 
				
			||||||
 | 
							distName := fmt.Sprintf("podman-%s", name)
 | 
				
			||||||
 | 
							exportedPath := filepath.Join(testDir, "bogus.tar")
 | 
				
			||||||
 | 
							distrDir := filepath.Join(testDir, "testDistro")
 | 
				
			||||||
 | 
							err := os.Mkdir(distrDir, 0755)
 | 
				
			||||||
 | 
							Expect(err).ToNot(HaveOccurred())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// create a bogus machine
 | 
				
			||||||
 | 
							i := new(initMachine)
 | 
				
			||||||
 | 
							session, err := mb.setName("foobarexport").setCmd(i.withImagePath(mb.imagePath)).run()
 | 
				
			||||||
 | 
							Expect(err).ToNot(HaveOccurred())
 | 
				
			||||||
 | 
							Expect(session).To(Exit(0))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// export the bogus machine so we have input for making
 | 
				
			||||||
 | 
							// a vm outside the context of podman-machine and also
 | 
				
			||||||
 | 
							// so we dont have to download a distribution from microsoft
 | 
				
			||||||
 | 
							// servers
 | 
				
			||||||
 | 
							exportSession, err := runSystemCommand(wsl, []string{"--export", "podman-foobarexport", exportedPath}, defaultTimeout, true)
 | 
				
			||||||
 | 
							Expect(err).ToNot(HaveOccurred())
 | 
				
			||||||
 | 
							Expect(exportSession).To(Exit(0))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// importing the machine and creating a vm
 | 
				
			||||||
 | 
							importSession, err := runSystemCommand(wsl, []string{"--import", distName, distrDir, exportedPath}, defaultTimeout, true)
 | 
				
			||||||
 | 
							Expect(err).ToNot(HaveOccurred())
 | 
				
			||||||
 | 
							Expect(importSession).To(Exit(0))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							defer func() {
 | 
				
			||||||
 | 
								_, err := runSystemCommand(wsl, []string{"--unregister", distName}, defaultTimeout, true)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									fmt.Println("unable to remove bogus wsl instance")
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Trying to make a vm with the same name as an existing name should result in a 125
 | 
				
			||||||
 | 
							checkSession, err := mb.setName(name).setCmd(i.withImagePath(mb.imagePath)).run()
 | 
				
			||||||
 | 
							Expect(err).ToNot(HaveOccurred())
 | 
				
			||||||
 | 
							Expect(checkSession).To(Exit(125))
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user