github.com/jfrog/jfrog-cli-core/v2@v2.51.0/common/tests/docker.go (about) 1 package tests 2 3 import ( 4 "io" 5 "os/exec" 6 "path" 7 "testing" 8 9 gofrogcmd "github.com/jfrog/gofrog/io" 10 "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils/container" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 // Image get parent image id command 15 type BuildDockerImage struct { 16 // The build command builds images from a Dockerfile and a context. 17 // A build's context is the set of files located in the specified PATH. 18 // The build process can refer to any of the files in the context. 19 // For example, The build can use a COPY instruction to reference a file in the context. 20 buildContext string 21 dockerFileName string 22 imageName string 23 containerManager container.ContainerManagerType 24 } 25 26 func NewBuildDockerImage(imageTag, dockerFilePath string, containerManager container.ContainerManagerType) *BuildDockerImage { 27 return &BuildDockerImage{imageName: imageTag, buildContext: dockerFilePath, containerManager: containerManager} 28 } 29 30 func (image *BuildDockerImage) SetDockerFileName(name string) *BuildDockerImage { 31 image.dockerFileName = name 32 return image 33 } 34 35 func (image *BuildDockerImage) GetCmd() *exec.Cmd { 36 var cmd []string 37 cmd = append(cmd, "build") 38 cmd = append(cmd, "--tag", image.imageName) 39 if image.dockerFileName != "" { 40 cmd = append(cmd, "--file", path.Join(image.buildContext, image.dockerFileName)) 41 42 } 43 cmd = append(cmd, image.buildContext) 44 return exec.Command(image.containerManager.String(), cmd...) 45 } 46 47 func (image *BuildDockerImage) GetEnv() map[string]string { 48 return map[string]string{} 49 } 50 51 func (image *BuildDockerImage) GetStdWriter() io.WriteCloser { 52 return nil 53 } 54 55 func (image *BuildDockerImage) GetErrWriter() io.WriteCloser { 56 return nil 57 } 58 59 // The ExecDockerImage command runs a new command in a running container. 60 type ExecDockerImage struct { 61 Args []string 62 errCloser io.WriteCloser 63 stdWriter io.WriteCloser 64 containerManager container.ContainerManagerType 65 } 66 67 func NewExecDockerImage(containerManager container.ContainerManagerType, args ...string) *ExecDockerImage { 68 return &ExecDockerImage{Args: args, containerManager: containerManager} 69 } 70 71 func (e *ExecDockerImage) GetCmd() *exec.Cmd { 72 var cmd []string 73 cmd = append(cmd, "exec") 74 cmd = append(cmd, e.Args...) 75 return exec.Command(e.containerManager.String(), cmd...) 76 } 77 78 func (e *ExecDockerImage) GetEnv() map[string]string { 79 return map[string]string{} 80 } 81 82 func (e *ExecDockerImage) GetStdWriter() io.WriteCloser { 83 return e.stdWriter 84 } 85 86 func (e *ExecDockerImage) SetStdWriter(writer io.WriteCloser) { 87 e.stdWriter = writer 88 } 89 90 func (e *ExecDockerImage) GetErrWriter() io.WriteCloser { 91 return e.errCloser 92 } 93 94 func (e *ExecDockerImage) SetErrWriter(writer io.WriteCloser) { 95 e.errCloser = writer 96 } 97 98 type RunDockerImage struct { 99 Args []string 100 containerManager container.ContainerManagerType 101 } 102 103 func NewRunDockerImage(containerManager container.ContainerManagerType, args ...string) *RunDockerImage { 104 return &RunDockerImage{Args: args, containerManager: containerManager} 105 } 106 107 func (run *RunDockerImage) GetCmd() *exec.Cmd { 108 var cmd []string 109 cmd = append(cmd, "run") 110 cmd = append(cmd, run.Args...) 111 return exec.Command(run.containerManager.String(), cmd...) 112 } 113 114 func (run *RunDockerImage) GetEnv() map[string]string { 115 return map[string]string{} 116 } 117 118 func (run *RunDockerImage) GetStdWriter() io.WriteCloser { 119 return nil 120 } 121 122 func (run *RunDockerImage) GetErrWriter() io.WriteCloser { 123 return nil 124 } 125 126 type DeleteDockerImage struct { 127 imageTag string 128 containerManager container.ContainerManagerType 129 } 130 131 func NewDeleteDockerImage(imageTag string, containerManager container.ContainerManagerType) *DeleteDockerImage { 132 return &DeleteDockerImage{imageTag: imageTag, containerManager: containerManager} 133 } 134 135 func (image *DeleteDockerImage) GetCmd() *exec.Cmd { 136 var cmd []string 137 cmd = append(cmd, "image") 138 cmd = append(cmd, "rm") 139 cmd = append(cmd, image.imageTag) 140 return exec.Command(image.containerManager.String(), cmd...) 141 } 142 143 func (image *DeleteDockerImage) GetEnv() map[string]string { 144 return map[string]string{} 145 } 146 147 func (image *DeleteDockerImage) GetStdWriter() io.WriteCloser { 148 return nil 149 } 150 151 func (image *DeleteDockerImage) GetErrWriter() io.WriteCloser { 152 return nil 153 } 154 155 type DeleteContainer struct { 156 containerName string 157 containerManager container.ContainerManagerType 158 } 159 160 func NewDeleteContainer(containerName string, containerManager container.ContainerManagerType) *DeleteContainer { 161 return &DeleteContainer{containerName: containerName, containerManager: containerManager} 162 } 163 164 func (image *DeleteContainer) GetCmd() *exec.Cmd { 165 var cmd []string 166 cmd = append(cmd, "rm") 167 cmd = append(cmd, "--force") 168 cmd = append(cmd, image.containerName) 169 return exec.Command(image.containerManager.String(), cmd...) 170 } 171 172 func (image *DeleteContainer) GetEnv() map[string]string { 173 return map[string]string{} 174 } 175 176 func (image *DeleteContainer) GetStdWriter() io.WriteCloser { 177 return nil 178 } 179 180 func (image *DeleteContainer) GetErrWriter() io.WriteCloser { 181 return nil 182 } 183 184 func DeleteTestImage(t *testing.T, imageTag string, containerManagerType container.ContainerManagerType) { 185 imageBuilder := NewDeleteDockerImage(imageTag, containerManagerType) 186 assert.NoError(t, gofrogcmd.RunCmd(imageBuilder)) 187 } 188 189 func DeleteTestContainer(t *testing.T, containerName string, containerManagerType container.ContainerManagerType) { 190 containerDelete := NewDeleteContainer(containerName, containerManagerType) 191 assert.NoError(t, gofrogcmd.RunCmd(containerDelete)) 192 }