added check assertion of Wrrten() condition before calling Hijack()

This commit is contained in:
keitosuwahara 2025-08-01 22:22:55 +09:00
parent faae1ff70b
commit a21f5aca77

View File

@ -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")
}) })
} }
} }