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  }