mirror of
https://github.com/gin-gonic/gin.git
synced 2026-06-06 12:08:20 +08:00
Compare commits
5 Commits
80774df320
...
cdb2c23d82
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cdb2c23d82 | ||
|
|
5f4f964325 | ||
|
|
0cebb2da0a | ||
|
|
e5d837948a | ||
|
|
043b245931 |
2
.github/workflows/gin.yml
vendored
2
.github/workflows/gin.yml
vendored
@ -78,6 +78,6 @@ jobs:
|
||||
run: make test
|
||||
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v5
|
||||
uses: codecov/codecov-action@v6
|
||||
with:
|
||||
flags: ${{ matrix.os }},go-${{ matrix.go }},${{ matrix.test-tags }}
|
||||
|
||||
4
.github/workflows/trivy-scan.yml
vendored
4
.github/workflows/trivy-scan.yml
vendored
@ -27,7 +27,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Run Trivy vulnerability scanner (source code)
|
||||
uses: aquasecurity/trivy-action@0.35.0
|
||||
uses: aquasecurity/trivy-action@v0.36.0
|
||||
with:
|
||||
scan-type: "fs"
|
||||
scan-ref: "."
|
||||
@ -44,7 +44,7 @@ jobs:
|
||||
sarif_file: "trivy-results.sarif"
|
||||
|
||||
- name: Run Trivy scanner (table output for logs)
|
||||
uses: aquasecurity/trivy-action@0.35.0
|
||||
uses: aquasecurity/trivy-action@v0.36.0
|
||||
if: always()
|
||||
with:
|
||||
scan-type: "fs"
|
||||
|
||||
@ -141,6 +141,15 @@ func (c *Context) Copy() *Context {
|
||||
cp.Params = make([]Param, len(cParams))
|
||||
copy(cp.Params, cParams)
|
||||
|
||||
cErrors := c.Errors
|
||||
cp.Errors = make(errorMsgs, len(cErrors))
|
||||
for i, e := range cErrors {
|
||||
cp.Errors[i] = &Error{
|
||||
Err: e.Err,
|
||||
Type: e.Type,
|
||||
Meta: e.Meta,
|
||||
}
|
||||
}
|
||||
return &cp
|
||||
}
|
||||
|
||||
|
||||
@ -688,6 +688,41 @@ func TestContextCopy(t *testing.T) {
|
||||
assert.Equal(t, cp.fullPath, c.fullPath)
|
||||
}
|
||||
|
||||
func TestContextCopyErrors(t *testing.T) {
|
||||
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||
|
||||
// Add errors to the original context
|
||||
c.Error(fmt.Errorf("first error")).SetType(ErrorTypePublic).SetMeta("meta1") // nolint: errcheck
|
||||
c.Error(fmt.Errorf("second error")).SetType(ErrorTypePrivate).SetMeta(42) // nolint: errcheck
|
||||
|
||||
// Copy the context
|
||||
cp := c.Copy()
|
||||
|
||||
// Verify the copied context has the same number of errors
|
||||
assert.Equal(t, len(c.Errors), len(cp.Errors), "Copied context should have the same number of errors")
|
||||
|
||||
// Verify that the slices are distinct (deep copy) by checking contents and ensuring independence
|
||||
assert.True(t, reflect.DeepEqual(c.Errors, cp.Errors), "Copied errors should have the same content initially")
|
||||
// Since we can’t compare slices with ==, we rely on content equality and test isolation below
|
||||
|
||||
// Check each error in the copied context matches the original
|
||||
for i, origErr := range c.Errors {
|
||||
copiedErr := cp.Errors[i]
|
||||
assert.Equal(t, origErr.Err, copiedErr.Err, "Error message should match")
|
||||
assert.Equal(t, origErr.Type, copiedErr.Type, "Error type should match")
|
||||
assert.Equal(t, origErr.Meta, copiedErr.Meta, "Error metadata should match")
|
||||
// Ensure pointers are different (deep copy)
|
||||
assert.NotSame(t, origErr, copiedErr, "Each error should be a distinct instance")
|
||||
}
|
||||
|
||||
// Modify original context errors and ensure copy remains unchanged
|
||||
c.Error(fmt.Errorf("third error")) // nolint: errcheck
|
||||
assert.Equal(t, 2, len(cp.Errors), "Copied context errors should not reflect changes to original")
|
||||
assert.Equal(t, 3, len(c.Errors), "Original context should have new error")
|
||||
assert.False(t, reflect.DeepEqual(c.Errors, cp.Errors), "Copied errors should differ after modification")
|
||||
}
|
||||
|
||||
|
||||
func TestContextHandlerName(t *testing.T) {
|
||||
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||
c.handlers = HandlersChain{func(c *Context) {}, handlerNameTest}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user