Skip to content

Commit bd4157c

Browse files
committed
add debug logs and hide uploadEvidence errors to debug
1 parent 01bff25 commit bd4157c

File tree

3 files changed

+111
-4
lines changed

3 files changed

+111
-4
lines changed

evidence/create/create_base.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import (
44
"encoding/json"
55
"errors"
66
"fmt"
7-
"github.com/jfrog/jfrog-cli-artifactory/evidence/sign"
87
"os"
98
"strings"
109

10+
"github.com/jfrog/jfrog-cli-artifactory/evidence/sign"
11+
1112
"github.com/jfrog/gofrog/log"
1213
"github.com/jfrog/jfrog-cli-artifactory/evidence/cryptox"
1314
"github.com/jfrog/jfrog-cli-artifactory/evidence/dsse"
@@ -17,6 +18,7 @@ import (
1718
"github.com/jfrog/jfrog-cli-core/v2/utils/config"
1819
"github.com/jfrog/jfrog-client-go/artifactory"
1920
evidenceService "github.com/jfrog/jfrog-client-go/evidence/services"
21+
"github.com/jfrog/jfrog-client-go/utils/errorutils"
2022
clientlog "github.com/jfrog/jfrog-client-go/utils/log"
2123
)
2224

@@ -157,8 +159,14 @@ func (c *createEvidenceBase) uploadEvidence(evidencePayload []byte, repoPath str
157159
DSSEFileRaw: evidencePayload,
158160
ProviderId: c.providerId,
159161
}
162+
clientlog.Debug("Uploading evidence for subject:", repoPath)
160163
body, err := evidenceManager.UploadEvidence(evidenceDetails)
161164
if err != nil {
165+
errStr := err.Error()
166+
if strings.Contains(errStr, "400") || strings.Contains(errStr, "404") {
167+
clientlog.Debug("Server response error:", err.Error())
168+
return errorutils.CheckErrorf("Subject '%s' is invalid or not found. Please ensure the subject exists and follows the correct format: <repo>/<path>/<name> or <repo>/<name>", repoPath)
169+
}
162170
return err
163171
}
164172

evidence/create/create_base_test.go

Lines changed: 98 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,109 @@ package create
22

33
import (
44
"encoding/json"
5-
"github.com/jfrog/jfrog-cli-artifactory/evidence/dsse"
6-
"github.com/jfrog/jfrog-cli-artifactory/evidence/intoto"
7-
"github.com/stretchr/testify/assert"
5+
"errors"
86
"os"
97
"path/filepath"
8+
"strings"
109
"testing"
10+
11+
"github.com/jfrog/jfrog-cli-artifactory/evidence/dsse"
12+
"github.com/jfrog/jfrog-cli-artifactory/evidence/intoto"
13+
"github.com/jfrog/jfrog-cli-core/v2/utils/config"
14+
"github.com/jfrog/jfrog-client-go/evidence/services"
15+
"github.com/jfrog/jfrog-client-go/utils/errorutils"
16+
clientlog "github.com/jfrog/jfrog-client-go/utils/log"
17+
"github.com/stretchr/testify/assert"
1118
)
1219

20+
// MockEvidenceServiceManager mocks the evidence service manager for testing
21+
type MockEvidenceServiceManager struct {
22+
UploadResponse []byte
23+
UploadError error
24+
}
25+
26+
func (m *MockEvidenceServiceManager) UploadEvidence(details services.EvidenceDetails) ([]byte, error) {
27+
if m.UploadError != nil {
28+
return nil, m.UploadError
29+
}
30+
return m.UploadResponse, nil
31+
}
32+
33+
func TestUploadEvidence_ErrorHandling(t *testing.T) {
34+
// Save the current log level and set it to DEBUG for testing
35+
originalLogLevel := clientlog.GetLogger().GetLogLevel()
36+
clientlog.SetLogger(clientlog.NewLogger(clientlog.DEBUG, nil))
37+
defer clientlog.SetLogger(clientlog.NewLogger(originalLogLevel, nil))
38+
39+
tests := []struct {
40+
name string
41+
uploadError error
42+
repoPath string
43+
expectedError string
44+
debugLogCheck bool
45+
}{
46+
{
47+
name: "404 Not Found Error",
48+
uploadError: errors.New("server response: 404 Not Found"),
49+
repoPath: "test-repo/path/file.txt",
50+
expectedError: "Subject 'test-repo/path/file.txt' is invalid or not found. Please ensure the subject exists and follows the correct format: <repo>/<path>/<name> or <repo>/<name>",
51+
debugLogCheck: true,
52+
},
53+
{
54+
name: "400 Bad Request Error",
55+
uploadError: errors.New("server response: 400 Bad Request"),
56+
repoPath: "invalid-subject",
57+
expectedError: "Subject 'invalid-subject' is invalid or not found. Please ensure the subject exists and follows the correct format: <repo>/<path>/<name> or <repo>/<name>",
58+
debugLogCheck: true,
59+
},
60+
{
61+
name: "404 Error with Repository not found message",
62+
uploadError: errors.New(`server response: 404 Not Found {"errors": [{"message": "Repository https: not found"}]}`),
63+
repoPath: "@ https://evidencetrial.jfrog.io/evidence/api/v1/subject/https:/evidencetrial.jfrog.io/artifactory/cli-sigstore-test/commons-1.0.0.txt",
64+
expectedError: "Subject '@ https://evidencetrial.jfrog.io/evidence/api/v1/subject/https:/evidencetrial.jfrog.io/artifactory/cli-sigstore-test/commons-1.0.0.txt' is invalid or not found. Please ensure the subject exists and follows the correct format: <repo>/<path>/<name> or <repo>/<name>",
65+
debugLogCheck: true,
66+
},
67+
{
68+
name: "Other Error - Not 400 or 404",
69+
uploadError: errors.New("server response: 500 Internal Server Error"),
70+
repoPath: "test-repo/path/file.txt",
71+
expectedError: "server response: 500 Internal Server Error",
72+
debugLogCheck: false,
73+
},
74+
}
75+
76+
for _, tt := range tests {
77+
t.Run(tt.name, func(t *testing.T) {
78+
// Create a createEvidenceBase instance
79+
c := &createEvidenceBase{
80+
serverDetails: &config.ServerDetails{},
81+
providerId: "test-provider",
82+
}
83+
84+
// Since we can't easily mock utils.CreateEvidenceServiceManager,
85+
// we'll need to test the error handling logic directly.
86+
// For a full integration test, you would need to use dependency injection
87+
// or refactor the code to accept the evidence manager as a parameter.
88+
89+
// For now, let's test the error message formatting by simulating the error
90+
err := c.handleUploadError(tt.uploadError, tt.repoPath)
91+
92+
assert.Error(t, err)
93+
assert.Equal(t, tt.expectedError, err.Error())
94+
})
95+
}
96+
}
97+
98+
// Add a helper method to test error handling logic
99+
func (c *createEvidenceBase) handleUploadError(err error, repoPath string) error {
100+
errStr := err.Error()
101+
if strings.Contains(errStr, "400") || strings.Contains(errStr, "404") {
102+
clientlog.Debug("Server response error:", err.Error())
103+
return errorutils.CheckErrorf("Subject '%s' is invalid or not found. Please ensure the subject exists and follows the correct format: <repo>/<path>/<name> or <repo>/<name>", repoPath)
104+
}
105+
return err
106+
}
107+
13108
func TestCreateAndSignEnvelope(t *testing.T) {
14109
tests := []struct {
15110
name string

evidence/create/create_custom.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package create
22

33
import (
44
"encoding/json"
5+
clientLog "github.com/jfrog/jfrog-client-go/utils/log"
56
"github.com/sigstore/sigstore-go/pkg/bundle"
67
"strings"
78

@@ -49,8 +50,10 @@ func (c *createEvidenceCustom) Run() error {
4950
var err error
5051

5152
if c.sigstoreBundlePath != "" {
53+
clientLog.Debug("Reading sigstore bundle from path:", c.sigstoreBundlePath)
5254
evidencePayload, err = c.processSigstoreBundle()
5355
} else {
56+
clientLog.Debug("Creating DSSE envelope for subject:", c.subjectRepoPath)
5457
evidencePayload, err = c.createDSSEEnvelope()
5558
}
5659

@@ -81,6 +84,7 @@ func (c *createEvidenceCustom) processSigstoreBundle() ([]byte, error) {
8184
if err != nil {
8285
return nil, err
8386
}
87+
clientLog.Debug("subject extracted from sigstore bundle:", extractedSubject)
8488
c.subjectRepoPath = extractedSubject
8589
}
8690

0 commit comments

Comments
 (0)