github.com/jfrog/jfrog-client-go@v1.40.2/tests/artifactorydockerpromote_test.go (about)

     1  package tests
     2  
     3  import (
     4  	"encoding/json"
     5  	"io"
     6  	"net/http"
     7  	"net/http/httptest"
     8  	"testing"
     9  
    10  	"github.com/jfrog/jfrog-client-go/artifactory/auth"
    11  	"github.com/jfrog/jfrog-client-go/artifactory/services"
    12  	"github.com/jfrog/jfrog-client-go/http/jfroghttpclient"
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  const (
    17  	sourceRepo        = "source-repo"
    18  	targetRepo        = "target-repo"
    19  	sourceDockerImage = "source-docker-image"
    20  	targetDockerImage = "target-docker-image"
    21  	sourceTag         = "source-tag"
    22  	targetTag         = "target-tag"
    23  	copy              = true
    24  )
    25  
    26  func TestDockerPromote(t *testing.T) {
    27  	initArtifactoryTest(t)
    28  	// Create mock server
    29  	handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    30  		// Check method
    31  		assert.Equal(t, http.MethodPost, r.Method)
    32  
    33  		// Check URL
    34  		assert.Equal(t, "/api/docker/"+sourceRepo+"/v2/promote", r.URL.Path)
    35  
    36  		// Check body
    37  		body, err := io.ReadAll(r.Body)
    38  		assert.NoError(t, err)
    39  		response := services.DockerPromoteBody{}
    40  		err = json.Unmarshal(body, &response)
    41  		assert.NoError(t, err)
    42  		assert.Equal(t, targetRepo, response.TargetRepo)
    43  		assert.Equal(t, sourceDockerImage, response.DockerRepository)
    44  		assert.Equal(t, targetDockerImage, response.TargetDockerRepository)
    45  		assert.Equal(t, sourceTag, response.Tag)
    46  		assert.Equal(t, targetTag, response.TargetTag)
    47  		assert.Equal(t, copy, response.Copy)
    48  
    49  		// Send response 200 OK
    50  		w.WriteHeader(http.StatusOK)
    51  	})
    52  	ts := httptest.NewServer(handler)
    53  	defer ts.Close()
    54  
    55  	// Promote docker image
    56  	service := createDockerPromoteService(t, ts.URL)
    57  	err := service.PromoteDocker(createTestParams())
    58  	assert.NoError(t, err)
    59  }
    60  
    61  func createDockerPromoteService(t *testing.T, url string) *services.DockerPromoteService {
    62  	// Create artifactory details
    63  	rtDetails := auth.NewArtifactoryDetails()
    64  	rtDetails.SetUrl(url + "/")
    65  
    66  	// Create http client
    67  	client, err := jfroghttpclient.JfrogClientBuilder().
    68  		SetInsecureTls(true).
    69  		SetClientCertPath(rtDetails.GetClientCertPath()).
    70  		SetClientCertKeyPath(rtDetails.GetClientCertKeyPath()).
    71  		AppendPreRequestInterceptor(rtDetails.RunPreRequestFunctions).
    72  		Build()
    73  	assert.NoError(t, err, "Failed to create Artifactory client: %v\n")
    74  
    75  	// Create docker promote service
    76  	dockerPromoteService := services.NewDockerPromoteService(rtDetails, client)
    77  	return dockerPromoteService
    78  }
    79  
    80  func createTestParams() services.DockerPromoteParams {
    81  	params := services.NewDockerPromoteParams(sourceDockerImage, sourceRepo, targetRepo)
    82  	params.TargetDockerImage = targetDockerImage
    83  	params.SourceTag = sourceTag
    84  	params.TargetTag = targetTag
    85  	params.Copy = copy
    86  	return params
    87  }