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 }