diff --git a/go.mod b/go.mod index 2574cfe4e..1e7f4f380 100644 --- a/go.mod +++ b/go.mod @@ -16,15 +16,15 @@ require ( github.com/docker/docker v28.5.2+incompatible github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1 github.com/jfrog/archiver/v3 v3.6.1 - github.com/jfrog/build-info-go v1.13.0 + github.com/jfrog/build-info-go v1.13.1-0.20251230063402-e9f0a3564df1 github.com/jfrog/gofrog v1.7.6 github.com/jfrog/jfrog-cli-application v1.0.2-0.20251210075951-519050602a7f - github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20251224081136-c963f7963aa1 + github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20251230064405-049e011b0bb7 github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251223102649-e659f6937251 github.com/jfrog/jfrog-cli-evidence v0.8.3-0.20251204144808-73fa744851c0 github.com/jfrog/jfrog-cli-platform-services v1.10.1-0.20251205121610-171eb9b0000e github.com/jfrog/jfrog-cli-security v1.24.1 - github.com/jfrog/jfrog-client-go v1.55.1-0.20251224075603-b50939a87fa6 + github.com/jfrog/jfrog-client-go v1.55.1-0.20251230061734-d954605bdb23 github.com/jszwec/csvutil v1.10.0 github.com/manifoldco/promptui v0.9.0 github.com/spf13/viper v1.21.0 @@ -282,10 +282,6 @@ replace github.com/docker/docker => github.com/docker/docker v27.5.1+incompatibl replace github.com/gfleury/go-bitbucket-v1 => github.com/gfleury/go-bitbucket-v1 v0.0.0-20230825095122-9bc1711434ab -//replace github.com/jfrog/jfrog-cli-artifactory => github.com/naveenku-jfrog/jfrog-cli-artifactory v0.0.0-20251210184507-0c8d138690cb - -//replace github.com/jfrog/build-info-go => github.com/jfrog/build-info-go v1.8.9-0.20251006061821-8b1be6a65215 - // replace github.com/jfrog/jfrog-cli-core/v2 => github.com/reshmifrog/jfrog-cli-core/v2 v2.58.5-0.20251110095124-ab9a4102ec5a // replace github.com/jfrog/jfrog-cli-core/v2 => github.com/attiasas/jfrog-cli-core/v2 v2.0.0-20251104113958-abd9de5958c4 diff --git a/go.sum b/go.sum index ea0c31b99..4619b1ffb 100644 --- a/go.sum +++ b/go.sum @@ -1204,8 +1204,8 @@ github.com/jellydator/ttlcache/v3 v3.4.0 h1:YS4P125qQS0tNhtL6aeYkheEaB/m8HCqdMMP github.com/jellydator/ttlcache/v3 v3.4.0/go.mod h1:Hw9EgjymziQD3yGsQdf1FqFdpp7YjFMd4Srg5EJlgD4= github.com/jfrog/archiver/v3 v3.6.1 h1:LOxnkw9pOn45DzCbZNFV6K0+6dCsQ0L8mR3ZcujO5eI= github.com/jfrog/archiver/v3 v3.6.1/go.mod h1:VgR+3WZS4N+i9FaDwLZbq+jeU4B4zctXL+gL4EMzfLw= -github.com/jfrog/build-info-go v1.13.0 h1:bHedp1Gl+a8eR71xxP5JvkqwDj2X3r6e5NiIwNcIwRM= -github.com/jfrog/build-info-go v1.13.0/go.mod h1:+OCtMb22/D+u7Wne5lzkjJjaWr0LRZcHlDwTH86Mpwo= +github.com/jfrog/build-info-go v1.13.1-0.20251230063402-e9f0a3564df1 h1:ZT/hph6QcpTi9Fam9MJiouJ6g0H8Hx9p2Mnah2zPnks= +github.com/jfrog/build-info-go v1.13.1-0.20251230063402-e9f0a3564df1/go.mod h1:+OCtMb22/D+u7Wne5lzkjJjaWr0LRZcHlDwTH86Mpwo= github.com/jfrog/froggit-go v1.20.6 h1:Xp7+LlEh0m1KGrQstb+u0aGfjRUtv1eh9xQBV3571jQ= github.com/jfrog/froggit-go v1.20.6/go.mod h1:obSG1SlsWjktkuqmKtpq7MNTTL63e0ot+ucTnlOMV88= github.com/jfrog/go-mockhttp v0.3.1 h1:/wac8v4GMZx62viZmv4wazB5GNKs+GxawuS1u3maJH8= @@ -1216,8 +1216,8 @@ github.com/jfrog/jfrog-apps-config v1.0.1 h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYL github.com/jfrog/jfrog-apps-config v1.0.1/go.mod h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w= github.com/jfrog/jfrog-cli-application v1.0.2-0.20251210075951-519050602a7f h1:YHwPNF13Gmt65J618kEGn/4SGewXqyYuAdcyYWYdrBA= github.com/jfrog/jfrog-cli-application v1.0.2-0.20251210075951-519050602a7f/go.mod h1:xum2HquWO5uExa/A7MQs3TgJJVEeoqTR+6Z4mfBr1Xw= -github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20251224081136-c963f7963aa1 h1:bwS1qqLwr3+bVuvsClk/dWBAvPp31/rkwIqKdyDT2Hk= -github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20251224081136-c963f7963aa1/go.mod h1:QRRvIcvN/qQEGZmanB8ILKjVawNiu0kZAcjcnST3Bsk= +github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20251230064405-049e011b0bb7 h1:UzFwA39ZTvinCbNvhr9QooeZaF1NBMkxXdBYJwTrXcU= +github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20251230064405-049e011b0bb7/go.mod h1:T8BzK7jnojx74G/tFs6lTjvNjNO6ltdWaZmY0X0YOOI= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251223102649-e659f6937251 h1:WTyDOaYJUwY6zQujZuL9JQ9Q9+QWj9p31tLb4bJnu4U= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251223102649-e659f6937251/go.mod h1:REkU0OfnLYZbQIjD2Cg85DAVP0SRZuV/PxiDfCJiJOc= github.com/jfrog/jfrog-cli-evidence v0.8.3-0.20251204144808-73fa744851c0 h1:8S1vE1PeVtrzWkKL0N39cX6XLLNV0It+f6xjRKjw7Ug= @@ -1226,8 +1226,8 @@ github.com/jfrog/jfrog-cli-platform-services v1.10.1-0.20251205121610-171eb9b000 github.com/jfrog/jfrog-cli-platform-services v1.10.1-0.20251205121610-171eb9b0000e/go.mod h1:qbu4iqBST9x8LgD8HhzUm91iOB3vHqtoGmaxOnmw0ok= github.com/jfrog/jfrog-cli-security v1.24.1 h1:NF8SE9uzUgqvqYjuuqbduXBqj+fwE4CmkMeVKtcLkyI= github.com/jfrog/jfrog-cli-security v1.24.1/go.mod h1:3FXD5IkKtdQOm9CZk6cR7q0iC6PaGMnjqzZqRcQp2r0= -github.com/jfrog/jfrog-client-go v1.55.1-0.20251224075603-b50939a87fa6 h1:vn7xCygFmL2etGiKnW+aDKCx6cSg1qgC0iaTSBX1kbA= -github.com/jfrog/jfrog-client-go v1.55.1-0.20251224075603-b50939a87fa6/go.mod h1:sCE06+GngPoyrGO0c+vmhgMoVSP83UMNiZnIuNPzU8U= +github.com/jfrog/jfrog-client-go v1.55.1-0.20251230061734-d954605bdb23 h1:tL4NUrnSiFN6MeK27z96ehiKXhYZDY2DyH95ogNRHrY= +github.com/jfrog/jfrog-client-go v1.55.1-0.20251230061734-d954605bdb23/go.mod h1:sCE06+GngPoyrGO0c+vmhgMoVSP83UMNiZnIuNPzU8U= github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= github.com/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24 h1:liMMTbpW34dhU4az1GN0pTPADwNmvoRSeoZ6PItiqnY= diff --git a/pip_test.go b/pip_test.go index 4303aaeea..5ba4af1ba 100644 --- a/pip_test.go +++ b/pip_test.go @@ -11,6 +11,7 @@ import ( "strings" "testing" + pythoncmd "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/python" "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils" biutils "github.com/jfrog/build-info-go/utils" @@ -595,6 +596,69 @@ func validateBuildTimestampProperty(properties map[string][]string, moduleType b return nil } +func TestCreateAqlQueryForSearchBySHA256(t *testing.T) { + tests := []struct { + name string + repo string + sha256s []string + expected string + }{ + { + name: "single SHA256", + repo: "pypi-local", + sha256s: []string{"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, + expected: `{"repo": "pypi-local","$or": [{"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}]}`, + }, + { + name: "multiple SHA256s", + repo: "pypi-local", + sha256s: []string{ + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456", + "f6e5d4c3b2a1098765432109876543210987654321098765432109876543210987", + }, + expected: `{"repo": "pypi-local","$or": [{"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"sha256": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456"},{"sha256": "f6e5d4c3b2a1098765432109876543210987654321098765432109876543210987"}]}`, + }, + { + name: "empty SHA256s", + repo: "pypi-local", + sha256s: []string{}, + expected: `{"repo": "pypi-local","$or": []}`, + }, + { + name: "different repository", + repo: "maven-local", + sha256s: []string{"abc123def456"}, + expected: `{"repo": "maven-local","$or": [{"sha256": "abc123def456"}]}`, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := pythoncmd.CreateAqlQueryForSearchBySHA256(tt.repo, tt.sha256s) + assert.Equal(t, tt.expected, result) + + // Verify it's valid JSON + var jsonObj map[string]interface{} + err := json.Unmarshal([]byte(result), &jsonObj) + assert.NoError(t, err, "Generated query should be valid JSON") + assert.Equal(t, tt.repo, jsonObj["repo"], "Repository should match") + + // Verify $or array exists and has correct structure + orArray, ok := jsonObj["$or"].([]interface{}) + assert.True(t, ok, "$or should be an array") + assert.Equal(t, len(tt.sha256s), len(orArray), "Number of SHA256 conditions should match") + + // Verify each SHA256 condition + for i, sha256 := range tt.sha256s { + condition, ok := orArray[i].(map[string]interface{}) + assert.True(t, ok, "Each condition should be an object") + assert.Equal(t, sha256, condition["sha256"], "SHA256 value should match") + } + }) + } +} + func TestSetupPipCommand(t *testing.T) { if !*tests.TestPip { t.Skip("Skipping Pip test. To run Pip test add the '-test.pip=true' option.")