Skip to content

Commit 03afa56

Browse files
committed
Merge remote-tracking branch 'upstream/master' into xray_component_resolution
2 parents ded0cba + e7a90eb commit 03afa56

7 files changed

Lines changed: 128 additions & 8 deletions

File tree

lifecycle/lifecycle_test.go

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@ package lifecycle
33
import (
44
"encoding/json"
55
"fmt"
6-
artifactoryAuth "github.com/jfrog/jfrog-client-go/artifactory/auth"
7-
"github.com/jfrog/jfrog-client-go/artifactory/services/utils"
8-
"github.com/jfrog/jfrog-client-go/http/jfroghttpclient"
9-
lifecycle "github.com/jfrog/jfrog-client-go/lifecycle/services"
10-
"github.com/stretchr/testify/assert"
6+
"io"
117
"net/http"
128
"net/http/httptest"
139
"net/url"
1410
"testing"
1511
"time"
12+
13+
artifactoryAuth "github.com/jfrog/jfrog-client-go/artifactory/auth"
14+
"github.com/jfrog/jfrog-client-go/artifactory/services/utils"
15+
"github.com/jfrog/jfrog-client-go/http/jfroghttpclient"
16+
lifecycle "github.com/jfrog/jfrog-client-go/lifecycle/services"
17+
distributionUtils "github.com/jfrog/jfrog-client-go/utils/distribution"
18+
"github.com/stretchr/testify/assert"
19+
"github.com/stretchr/testify/require"
1620
)
1721

1822
const (
@@ -248,6 +252,43 @@ func TestRemoteDeleteReleaseBundle(t *testing.T) {
248252
assert.NoError(t, rbService.RemoteDeleteReleaseBundle(testRb, lifecycle.ReleaseBundleRemoteDeleteParams{MaxWaitMinutes: 2}))
249253
}
250254

255+
func TestRemoteDeleteReleaseBundleSendsPriority(t *testing.T) {
256+
var capturedBody []byte
257+
var capturedMethod string
258+
mockServer, rbService := createMockServer(t, func(w http.ResponseWriter, r *http.Request) {
259+
expectedPath := "/" + lifecycle.GetRemoteDeleteReleaseBundleApi(testRb, true)
260+
if r.URL.Path == expectedPath {
261+
capturedMethod = r.Method
262+
body, err := io.ReadAll(r.Body)
263+
assert.NoError(t, err)
264+
capturedBody = body
265+
w.WriteHeader(http.StatusAccepted)
266+
return
267+
}
268+
w.WriteHeader(http.StatusNotFound)
269+
})
270+
defer mockServer.Close()
271+
272+
params := lifecycle.ReleaseBundleRemoteDeleteParams{
273+
DistributionRules: []*distributionUtils.DistributionCommonParams{{SiteName: "edge1", Priority: "medium"}},
274+
Priority: "high",
275+
DryRun: true,
276+
}
277+
assert.NoError(t, rbService.RemoteDeleteReleaseBundle(testRb, params))
278+
assert.Equal(t, http.MethodPost, capturedMethod)
279+
280+
var body map[string]any
281+
require.NoError(t, json.Unmarshal(capturedBody, &body))
282+
assert.Equal(t, "high", body["priority"])
283+
rules, ok := body["distribution_rules"].([]any)
284+
require.True(t, ok)
285+
require.Len(t, rules, 1)
286+
rule, ok := rules[0].(map[string]any)
287+
require.True(t, ok)
288+
assert.Equal(t, "edge1", rule["site_name"])
289+
assert.Equal(t, "medium", rule["priority"])
290+
}
291+
251292
func TestGetReleaseBundleVersionPromotions(t *testing.T) {
252293
mockServer, rbService := createMockServer(t, func(w http.ResponseWriter, r *http.Request) {
253294
if r.RequestURI == "/"+lifecycle.GetGetReleaseBundleVersionPromotionsApi(testRb) {

lifecycle/manager.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ func (lcs *LifecycleServicesManager) DistributeReleaseBundle(rbDetails lifecycle
182182
distributeBundleService.Sync = distributeParams.Sync
183183
distributeBundleService.MaxWaitMinutes = distributeParams.MaxWaitMinutes
184184
distributeBundleService.ProjectKey = distributeParams.ProjectKey
185+
distributeBundleService.Priority = distributeParams.Priority
185186

186187
mappings := &distributeBundleService.PathMappings
187188
*mappings = []utils.PathMapping{}

lifecycle/services/delete.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func (rbs *ReleaseBundlesService) RemoteDeleteReleaseBundle(rbDetails ReleaseBun
5353
}
5454
log.Info(dryRunStr + "Remote Deleting: " + rbDetails.ReleaseBundleName + "/" + rbDetails.ReleaseBundleVersion)
5555

56-
rbBody := distribution.CreateDistributeV1Body(params.DistributionRules, params.DryRun, false)
56+
rbBody := distribution.CreateDistributeV1BodyWithPriority(params.DistributionRules, params.DryRun, false, params.Priority)
5757
content, err := json.Marshal(rbBody)
5858
if err != nil {
5959
return errorutils.CheckError(err)
@@ -138,5 +138,7 @@ type ReleaseBundleRemoteDeleteParams struct {
138138
DryRun bool
139139
// Max time in minutes to wait for sync distribution to finish.
140140
MaxWaitMinutes int
141+
// Priority is the optional base priority for RBv2 remote delete (low|medium|high).
142+
Priority string
141143
CommonOptionalQueryParams
142144
}

lifecycle/services/distribute.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type DistributeReleaseBundleService struct {
2929
MaxWaitMinutes int
3030
DistributeParams distribution.DistributionParams
3131
ProjectKey string
32+
Priority string
3233
Modifications
3334
}
3435

@@ -39,6 +40,7 @@ type DistributeReleaseBundleParams struct {
3940
DistributionRules []*distribution.DistributionCommonParams
4041
PathMappings []PathMapping
4142
ProjectKey string
43+
Priority string
4244
}
4345

4446
func (dr *DistributeReleaseBundleService) GetHttpClient() *jfroghttpclient.JfrogHttpClient {
@@ -93,8 +95,9 @@ func (dr *DistributeReleaseBundleService) Distribute() error {
9395

9496
func (dr *DistributeReleaseBundleService) createDistributeBody() ReleaseBundleDistributeBody {
9597
return ReleaseBundleDistributeBody{
96-
ReleaseBundleDistributeV1Body: distribution.CreateDistributeV1Body(dr.DistributeParams.DistributionRules, dr.DryRun, dr.AutoCreateRepo),
97-
Modifications: dr.Modifications,
98+
ReleaseBundleDistributeV1Body: distribution.CreateDistributeV1BodyWithPriority(
99+
dr.DistributeParams.DistributionRules, dr.DryRun, dr.AutoCreateRepo, dr.Priority),
100+
Modifications: dr.Modifications,
98101
}
99102
}
100103

utils/distribution/distribute.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,27 @@ type DistributeReleaseBundleExecutor interface {
2121
}
2222

2323
func CreateDistributeV1Body(distCommonParams []*DistributionCommonParams, dryRun, isAutoCreateRepo bool) ReleaseBundleDistributeV1Body {
24+
return CreateDistributeV1BodyWithPriority(distCommonParams, dryRun, isAutoCreateRepo, "")
25+
}
26+
27+
// CreateDistributeV1BodyWithPriority builds the Dist request body and sets an optional base priority
28+
// (low|medium|high). Empty priority is omitted from JSON.
29+
func CreateDistributeV1BodyWithPriority(distCommonParams []*DistributionCommonParams, dryRun, isAutoCreateRepo bool, priority string) ReleaseBundleDistributeV1Body {
2430
var distributionRules []DistributionRulesBody
2531
for i := range distCommonParams {
2632
distributionRule := DistributionRulesBody{
2733
SiteName: distCommonParams[i].GetSiteName(),
2834
CityName: distCommonParams[i].GetCityName(),
2935
CountryCodes: distCommonParams[i].GetCountryCodes(),
36+
Priority: distCommonParams[i].GetPriority(),
3037
}
3138
distributionRules = append(distributionRules, distributionRule)
3239
}
3340
body := ReleaseBundleDistributeV1Body{
3441
DryRun: dryRun,
3542
DistributionRules: distributionRules,
3643
AutoCreateRepo: isAutoCreateRepo,
44+
Priority: priority,
3745
}
3846
return body
3947
}
@@ -97,12 +105,14 @@ type ReleaseBundleDistributeV1Body struct {
97105
DryRun bool `json:"dry_run"`
98106
DistributionRules []DistributionRulesBody `json:"distribution_rules"`
99107
AutoCreateRepo bool `json:"auto_create_missing_repositories,omitempty"`
108+
Priority string `json:"priority,omitempty"`
100109
}
101110

102111
type DistributionRulesBody struct {
103112
SiteName string `json:"site_name,omitempty"`
104113
CityName string `json:"city_name,omitempty"`
105114
CountryCodes []string `json:"country_codes,omitempty"`
115+
Priority string `json:"priority,omitempty"`
106116
}
107117

108118
type DistributionResponseBody struct {
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package distribution
2+
3+
import (
4+
"encoding/json"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
"github.com/stretchr/testify/require"
9+
)
10+
11+
func TestCreateDistributeV1BodyWithPriority(t *testing.T) {
12+
rules := []*DistributionCommonParams{
13+
{SiteName: "edge1", Priority: "medium"},
14+
{SiteName: "edge2", Priority: "low"},
15+
}
16+
17+
body := CreateDistributeV1BodyWithPriority(rules, false, true, "high")
18+
assert.Equal(t, "high", body.Priority)
19+
assert.True(t, body.AutoCreateRepo)
20+
assert.False(t, body.DryRun)
21+
require.Len(t, body.DistributionRules, 2)
22+
assert.Equal(t, "edge1", body.DistributionRules[0].SiteName)
23+
assert.Equal(t, "medium", body.DistributionRules[0].Priority)
24+
assert.Equal(t, "edge2", body.DistributionRules[1].SiteName)
25+
assert.Equal(t, "low", body.DistributionRules[1].Priority)
26+
27+
raw, err := json.Marshal(body)
28+
require.NoError(t, err)
29+
assert.Contains(t, string(raw), `"priority":"high"`)
30+
assert.Contains(t, string(raw), `"site_name":"edge1"`)
31+
assert.Contains(t, string(raw), `"priority":"medium"`)
32+
assert.Contains(t, string(raw), `"priority":"low"`)
33+
}
34+
35+
func TestCreateDistributeV1BodyOmitsEmptyPriority(t *testing.T) {
36+
body := CreateDistributeV1Body([]*DistributionCommonParams{{SiteName: "edge1"}}, true, false)
37+
assert.Empty(t, body.Priority)
38+
require.Len(t, body.DistributionRules, 1)
39+
assert.Empty(t, body.DistributionRules[0].Priority)
40+
41+
raw, err := json.Marshal(body)
42+
require.NoError(t, err)
43+
assert.NotContains(t, string(raw), `"priority"`)
44+
assert.Contains(t, string(raw), `"dry_run":true`)
45+
}
46+
47+
func TestDistributionCommonParamsPriorityAccessors(t *testing.T) {
48+
params := &DistributionCommonParams{SiteName: "edge1"}
49+
assert.Empty(t, params.GetPriority())
50+
params.SetPriority("high")
51+
assert.Equal(t, "high", params.GetPriority())
52+
}

utils/distribution/specutils.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ type DistributionCommonParams struct {
44
SiteName string
55
CityName string
66
CountryCodes []string
7+
Priority string
78
}
89

910
type DistributionGetter interface {
@@ -13,6 +14,8 @@ type DistributionGetter interface {
1314
SetCityName(cityName string)
1415
GetCountryCodes() []string
1516
SetCountryCodes(countryCodes []string)
17+
GetPriority() string
18+
SetPriority(priority string)
1619
}
1720

1821
func (params *DistributionCommonParams) GetSiteName() string {
@@ -38,3 +41,11 @@ func (params *DistributionCommonParams) GetCountryCodes() []string {
3841
func (params *DistributionCommonParams) SetCountryCodes(countryCodes []string) {
3942
params.CountryCodes = countryCodes
4043
}
44+
45+
func (params *DistributionCommonParams) GetPriority() string {
46+
return params.Priority
47+
}
48+
49+
func (params *DistributionCommonParams) SetPriority(priority string) {
50+
params.Priority = priority
51+
}

0 commit comments

Comments
 (0)