mirror of
https://github.com/gin-gonic/gin.git
synced 2025-10-14 20:22:20 +08:00
added check assertion of Wrrten() condition before calling Hijack()
This commit is contained in:
parent
faae1ff70b
commit
a21f5aca77
@ -141,15 +141,17 @@ func TestResponseWriterHijackAfterWrite(t *testing.T) {
|
|||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
action func(w ResponseWriter) error // Action to perform before hijacking
|
action func(w ResponseWriter) error // Action to perform before hijacking
|
||||||
expectHijack bool
|
expectWrittenBeforeHijack bool
|
||||||
expectWritten bool
|
expectHijackSuccess bool
|
||||||
|
expectWrittenAfterHijack bool
|
||||||
expectError error
|
expectError error
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "hijack before write should succeed",
|
name: "hijack before write should succeed",
|
||||||
action: func(w ResponseWriter) error { return nil },
|
action: func(w ResponseWriter) error { return nil },
|
||||||
expectHijack: true,
|
expectWrittenBeforeHijack: false,
|
||||||
expectWritten: true, // Hijack itself marks the writer as written
|
expectHijackSuccess: true,
|
||||||
|
expectWrittenAfterHijack: true, // Hijack itself marks the writer as written
|
||||||
expectError: nil,
|
expectError: nil,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -158,8 +160,9 @@ func TestResponseWriterHijackAfterWrite(t *testing.T) {
|
|||||||
_, err := w.Write([]byte("test"))
|
_, err := w.Write([]byte("test"))
|
||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
expectHijack: false,
|
expectWrittenBeforeHijack: true,
|
||||||
expectWritten: true,
|
expectHijackSuccess: false,
|
||||||
|
expectWrittenAfterHijack: true,
|
||||||
expectError: errHijackAlreadyWritten,
|
expectError: errHijackAlreadyWritten,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -171,12 +174,22 @@ func TestResponseWriterHijackAfterWrite(t *testing.T) {
|
|||||||
writer.reset(hijacker)
|
writer.reset(hijacker)
|
||||||
w := ResponseWriter(writer)
|
w := ResponseWriter(writer)
|
||||||
|
|
||||||
|
// Check initial state
|
||||||
|
assert.False(t, w.Written(), "should not be written initially")
|
||||||
|
|
||||||
|
// Perform pre-hijack action
|
||||||
require.NoError(t, tc.action(w), "unexpected error during pre-hijack action")
|
require.NoError(t, tc.action(w), "unexpected error during pre-hijack action")
|
||||||
|
|
||||||
|
// Check state before hijacking
|
||||||
|
assert.Equal(t, tc.expectWrittenBeforeHijack, w.Written(), "unexpected w.Written() state before hijack")
|
||||||
|
|
||||||
|
// Attempt to hijack
|
||||||
_, _, hijackErr := w.Hijack()
|
_, _, hijackErr := w.Hijack()
|
||||||
|
|
||||||
|
// Check results
|
||||||
require.ErrorIs(t, hijackErr, tc.expectError, "unexpected error from Hijack()")
|
require.ErrorIs(t, hijackErr, tc.expectError, "unexpected error from Hijack()")
|
||||||
assert.Equal(t, tc.expectHijack, hijacker.hijacked, "unexpected hijacker.hijacked state")
|
assert.Equal(t, tc.expectHijackSuccess, hijacker.hijacked, "unexpected hijacker.hijacked state")
|
||||||
assert.Equal(t, tc.expectWritten, w.Written(), "unexpected w.Written() state")
|
assert.Equal(t, tc.expectWrittenAfterHijack, w.Written(), "unexpected w.Written() state after hijack")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user