mirror of
https://github.com/gin-gonic/gin.git
synced 2026-06-06 20:18:19 +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
|
run: make test
|
||||||
|
|
||||||
- name: Upload coverage to Codecov
|
- name: Upload coverage to Codecov
|
||||||
uses: codecov/codecov-action@v5
|
uses: codecov/codecov-action@v6
|
||||||
with:
|
with:
|
||||||
flags: ${{ matrix.os }},go-${{ matrix.go }},${{ matrix.test-tags }}
|
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
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Run Trivy vulnerability scanner (source code)
|
- name: Run Trivy vulnerability scanner (source code)
|
||||||
uses: aquasecurity/trivy-action@0.35.0
|
uses: aquasecurity/trivy-action@v0.36.0
|
||||||
with:
|
with:
|
||||||
scan-type: "fs"
|
scan-type: "fs"
|
||||||
scan-ref: "."
|
scan-ref: "."
|
||||||
@ -44,7 +44,7 @@ jobs:
|
|||||||
sarif_file: "trivy-results.sarif"
|
sarif_file: "trivy-results.sarif"
|
||||||
|
|
||||||
- name: Run Trivy scanner (table output for logs)
|
- name: Run Trivy scanner (table output for logs)
|
||||||
uses: aquasecurity/trivy-action@0.35.0
|
uses: aquasecurity/trivy-action@v0.36.0
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
scan-type: "fs"
|
scan-type: "fs"
|
||||||
|
|||||||
@ -141,6 +141,15 @@ func (c *Context) Copy() *Context {
|
|||||||
cp.Params = make([]Param, len(cParams))
|
cp.Params = make([]Param, len(cParams))
|
||||||
copy(cp.Params, 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
|
return &cp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -688,6 +688,41 @@ func TestContextCopy(t *testing.T) {
|
|||||||
assert.Equal(t, cp.fullPath, c.fullPath)
|
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) {
|
func TestContextHandlerName(t *testing.T) {
|
||||||
c, _ := CreateTestContext(httptest.NewRecorder())
|
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||||
c.handlers = HandlersChain{func(c *Context) {}, handlerNameTest}
|
c.handlers = HandlersChain{func(c *Context) {}, handlerNameTest}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user