srs/internal/rtmp/rtmpfakes/fake_protocol.go
Winlin 3663a8e38f
Proxy: Refactor server APIs and expand RTMP test coverage. v7.0.147 (#4672)
This PR refactors the Go proxy server internals and significantly
expands RTMP/proxy verification coverage.

- Rename internal/protocol to internal/server to better describe the
package responsibility.
- Refactor proxy server constructors and types toward cleaner exported
interfaces:
      - NewRTMPServer
      - NewWebRTCServer
      - NewHTTPAPIServer
      - NewHTTPStreamServer
      - NewSystemAPI
  - Expose RTMP protocol interfaces for better testability:
      - Handshake
      - Protocol
      - Message
- AMF0 public interfaces such as Amf0Any, Amf0Number, Amf0String,
Amf0Object, etc.
- Add RTMP unit tests covering AMF0, handshake, protocol messages,
packet encoding/decoding, and API examples.
  - Add generated RTMP fakes for interface-based tests.
  - Add proxy E2E scripts for:
      - multi-origin memory load-balancer routing
      - Redis multi-proxy routing
- RTMP transmuxing verification across RTMP, HTTP-FLV, HLS, and optional
WebRTC WHEP
- Update OpenClaw/SRSBot development docs and memory to reflect the new
package layout, new verification scripts, and unsupported origin/edge
development scope.

---------

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
2026-05-02 09:36:55 -04:00

500 lines
14 KiB
Go

// Code generated by counterfeiter. DO NOT EDIT.
package rtmpfakes
import (
"context"
"srsx/internal/rtmp"
"sync"
)
type FakeProtocol struct {
DecodeMessageStub func(rtmp.Message) (rtmp.Packet, error)
decodeMessageMutex sync.RWMutex
decodeMessageArgsForCall []struct {
arg1 rtmp.Message
}
decodeMessageReturns struct {
result1 rtmp.Packet
result2 error
}
decodeMessageReturnsOnCall map[int]struct {
result1 rtmp.Packet
result2 error
}
ExpectMessageStub func(context.Context, ...rtmp.MessageType) (rtmp.Message, error)
expectMessageMutex sync.RWMutex
expectMessageArgsForCall []struct {
arg1 context.Context
arg2 []rtmp.MessageType
}
expectMessageReturns struct {
result1 rtmp.Message
result2 error
}
expectMessageReturnsOnCall map[int]struct {
result1 rtmp.Message
result2 error
}
ExpectPacketStub func(context.Context, any) (rtmp.Message, error)
expectPacketMutex sync.RWMutex
expectPacketArgsForCall []struct {
arg1 context.Context
arg2 any
}
expectPacketReturns struct {
result1 rtmp.Message
result2 error
}
expectPacketReturnsOnCall map[int]struct {
result1 rtmp.Message
result2 error
}
ReadMessageStub func(context.Context) (rtmp.Message, error)
readMessageMutex sync.RWMutex
readMessageArgsForCall []struct {
arg1 context.Context
}
readMessageReturns struct {
result1 rtmp.Message
result2 error
}
readMessageReturnsOnCall map[int]struct {
result1 rtmp.Message
result2 error
}
WriteMessageStub func(context.Context, rtmp.Message) error
writeMessageMutex sync.RWMutex
writeMessageArgsForCall []struct {
arg1 context.Context
arg2 rtmp.Message
}
writeMessageReturns struct {
result1 error
}
writeMessageReturnsOnCall map[int]struct {
result1 error
}
WritePacketStub func(context.Context, rtmp.Packet, int) error
writePacketMutex sync.RWMutex
writePacketArgsForCall []struct {
arg1 context.Context
arg2 rtmp.Packet
arg3 int
}
writePacketReturns struct {
result1 error
}
writePacketReturnsOnCall map[int]struct {
result1 error
}
invocations map[string][][]interface{}
invocationsMutex sync.RWMutex
}
func (fake *FakeProtocol) DecodeMessage(arg1 rtmp.Message) (rtmp.Packet, error) {
fake.decodeMessageMutex.Lock()
ret, specificReturn := fake.decodeMessageReturnsOnCall[len(fake.decodeMessageArgsForCall)]
fake.decodeMessageArgsForCall = append(fake.decodeMessageArgsForCall, struct {
arg1 rtmp.Message
}{arg1})
stub := fake.DecodeMessageStub
fakeReturns := fake.decodeMessageReturns
fake.recordInvocation("DecodeMessage", []interface{}{arg1})
fake.decodeMessageMutex.Unlock()
if stub != nil {
return stub(arg1)
}
if specificReturn {
return ret.result1, ret.result2
}
return fakeReturns.result1, fakeReturns.result2
}
func (fake *FakeProtocol) DecodeMessageCallCount() int {
fake.decodeMessageMutex.RLock()
defer fake.decodeMessageMutex.RUnlock()
return len(fake.decodeMessageArgsForCall)
}
func (fake *FakeProtocol) DecodeMessageCalls(stub func(rtmp.Message) (rtmp.Packet, error)) {
fake.decodeMessageMutex.Lock()
defer fake.decodeMessageMutex.Unlock()
fake.DecodeMessageStub = stub
}
func (fake *FakeProtocol) DecodeMessageArgsForCall(i int) rtmp.Message {
fake.decodeMessageMutex.RLock()
defer fake.decodeMessageMutex.RUnlock()
argsForCall := fake.decodeMessageArgsForCall[i]
return argsForCall.arg1
}
func (fake *FakeProtocol) DecodeMessageReturns(result1 rtmp.Packet, result2 error) {
fake.decodeMessageMutex.Lock()
defer fake.decodeMessageMutex.Unlock()
fake.DecodeMessageStub = nil
fake.decodeMessageReturns = struct {
result1 rtmp.Packet
result2 error
}{result1, result2}
}
func (fake *FakeProtocol) DecodeMessageReturnsOnCall(i int, result1 rtmp.Packet, result2 error) {
fake.decodeMessageMutex.Lock()
defer fake.decodeMessageMutex.Unlock()
fake.DecodeMessageStub = nil
if fake.decodeMessageReturnsOnCall == nil {
fake.decodeMessageReturnsOnCall = make(map[int]struct {
result1 rtmp.Packet
result2 error
})
}
fake.decodeMessageReturnsOnCall[i] = struct {
result1 rtmp.Packet
result2 error
}{result1, result2}
}
func (fake *FakeProtocol) ExpectMessage(arg1 context.Context, arg2 ...rtmp.MessageType) (rtmp.Message, error) {
fake.expectMessageMutex.Lock()
ret, specificReturn := fake.expectMessageReturnsOnCall[len(fake.expectMessageArgsForCall)]
fake.expectMessageArgsForCall = append(fake.expectMessageArgsForCall, struct {
arg1 context.Context
arg2 []rtmp.MessageType
}{arg1, arg2})
stub := fake.ExpectMessageStub
fakeReturns := fake.expectMessageReturns
fake.recordInvocation("ExpectMessage", []interface{}{arg1, arg2})
fake.expectMessageMutex.Unlock()
if stub != nil {
return stub(arg1, arg2...)
}
if specificReturn {
return ret.result1, ret.result2
}
return fakeReturns.result1, fakeReturns.result2
}
func (fake *FakeProtocol) ExpectMessageCallCount() int {
fake.expectMessageMutex.RLock()
defer fake.expectMessageMutex.RUnlock()
return len(fake.expectMessageArgsForCall)
}
func (fake *FakeProtocol) ExpectMessageCalls(stub func(context.Context, ...rtmp.MessageType) (rtmp.Message, error)) {
fake.expectMessageMutex.Lock()
defer fake.expectMessageMutex.Unlock()
fake.ExpectMessageStub = stub
}
func (fake *FakeProtocol) ExpectMessageArgsForCall(i int) (context.Context, []rtmp.MessageType) {
fake.expectMessageMutex.RLock()
defer fake.expectMessageMutex.RUnlock()
argsForCall := fake.expectMessageArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2
}
func (fake *FakeProtocol) ExpectMessageReturns(result1 rtmp.Message, result2 error) {
fake.expectMessageMutex.Lock()
defer fake.expectMessageMutex.Unlock()
fake.ExpectMessageStub = nil
fake.expectMessageReturns = struct {
result1 rtmp.Message
result2 error
}{result1, result2}
}
func (fake *FakeProtocol) ExpectMessageReturnsOnCall(i int, result1 rtmp.Message, result2 error) {
fake.expectMessageMutex.Lock()
defer fake.expectMessageMutex.Unlock()
fake.ExpectMessageStub = nil
if fake.expectMessageReturnsOnCall == nil {
fake.expectMessageReturnsOnCall = make(map[int]struct {
result1 rtmp.Message
result2 error
})
}
fake.expectMessageReturnsOnCall[i] = struct {
result1 rtmp.Message
result2 error
}{result1, result2}
}
func (fake *FakeProtocol) ExpectPacket(arg1 context.Context, arg2 any) (rtmp.Message, error) {
fake.expectPacketMutex.Lock()
ret, specificReturn := fake.expectPacketReturnsOnCall[len(fake.expectPacketArgsForCall)]
fake.expectPacketArgsForCall = append(fake.expectPacketArgsForCall, struct {
arg1 context.Context
arg2 any
}{arg1, arg2})
stub := fake.ExpectPacketStub
fakeReturns := fake.expectPacketReturns
fake.recordInvocation("ExpectPacket", []interface{}{arg1, arg2})
fake.expectPacketMutex.Unlock()
if stub != nil {
return stub(arg1, arg2)
}
if specificReturn {
return ret.result1, ret.result2
}
return fakeReturns.result1, fakeReturns.result2
}
func (fake *FakeProtocol) ExpectPacketCallCount() int {
fake.expectPacketMutex.RLock()
defer fake.expectPacketMutex.RUnlock()
return len(fake.expectPacketArgsForCall)
}
func (fake *FakeProtocol) ExpectPacketCalls(stub func(context.Context, any) (rtmp.Message, error)) {
fake.expectPacketMutex.Lock()
defer fake.expectPacketMutex.Unlock()
fake.ExpectPacketStub = stub
}
func (fake *FakeProtocol) ExpectPacketArgsForCall(i int) (context.Context, any) {
fake.expectPacketMutex.RLock()
defer fake.expectPacketMutex.RUnlock()
argsForCall := fake.expectPacketArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2
}
func (fake *FakeProtocol) ExpectPacketReturns(result1 rtmp.Message, result2 error) {
fake.expectPacketMutex.Lock()
defer fake.expectPacketMutex.Unlock()
fake.ExpectPacketStub = nil
fake.expectPacketReturns = struct {
result1 rtmp.Message
result2 error
}{result1, result2}
}
func (fake *FakeProtocol) ExpectPacketReturnsOnCall(i int, result1 rtmp.Message, result2 error) {
fake.expectPacketMutex.Lock()
defer fake.expectPacketMutex.Unlock()
fake.ExpectPacketStub = nil
if fake.expectPacketReturnsOnCall == nil {
fake.expectPacketReturnsOnCall = make(map[int]struct {
result1 rtmp.Message
result2 error
})
}
fake.expectPacketReturnsOnCall[i] = struct {
result1 rtmp.Message
result2 error
}{result1, result2}
}
func (fake *FakeProtocol) ReadMessage(arg1 context.Context) (rtmp.Message, error) {
fake.readMessageMutex.Lock()
ret, specificReturn := fake.readMessageReturnsOnCall[len(fake.readMessageArgsForCall)]
fake.readMessageArgsForCall = append(fake.readMessageArgsForCall, struct {
arg1 context.Context
}{arg1})
stub := fake.ReadMessageStub
fakeReturns := fake.readMessageReturns
fake.recordInvocation("ReadMessage", []interface{}{arg1})
fake.readMessageMutex.Unlock()
if stub != nil {
return stub(arg1)
}
if specificReturn {
return ret.result1, ret.result2
}
return fakeReturns.result1, fakeReturns.result2
}
func (fake *FakeProtocol) ReadMessageCallCount() int {
fake.readMessageMutex.RLock()
defer fake.readMessageMutex.RUnlock()
return len(fake.readMessageArgsForCall)
}
func (fake *FakeProtocol) ReadMessageCalls(stub func(context.Context) (rtmp.Message, error)) {
fake.readMessageMutex.Lock()
defer fake.readMessageMutex.Unlock()
fake.ReadMessageStub = stub
}
func (fake *FakeProtocol) ReadMessageArgsForCall(i int) context.Context {
fake.readMessageMutex.RLock()
defer fake.readMessageMutex.RUnlock()
argsForCall := fake.readMessageArgsForCall[i]
return argsForCall.arg1
}
func (fake *FakeProtocol) ReadMessageReturns(result1 rtmp.Message, result2 error) {
fake.readMessageMutex.Lock()
defer fake.readMessageMutex.Unlock()
fake.ReadMessageStub = nil
fake.readMessageReturns = struct {
result1 rtmp.Message
result2 error
}{result1, result2}
}
func (fake *FakeProtocol) ReadMessageReturnsOnCall(i int, result1 rtmp.Message, result2 error) {
fake.readMessageMutex.Lock()
defer fake.readMessageMutex.Unlock()
fake.ReadMessageStub = nil
if fake.readMessageReturnsOnCall == nil {
fake.readMessageReturnsOnCall = make(map[int]struct {
result1 rtmp.Message
result2 error
})
}
fake.readMessageReturnsOnCall[i] = struct {
result1 rtmp.Message
result2 error
}{result1, result2}
}
func (fake *FakeProtocol) WriteMessage(arg1 context.Context, arg2 rtmp.Message) error {
fake.writeMessageMutex.Lock()
ret, specificReturn := fake.writeMessageReturnsOnCall[len(fake.writeMessageArgsForCall)]
fake.writeMessageArgsForCall = append(fake.writeMessageArgsForCall, struct {
arg1 context.Context
arg2 rtmp.Message
}{arg1, arg2})
stub := fake.WriteMessageStub
fakeReturns := fake.writeMessageReturns
fake.recordInvocation("WriteMessage", []interface{}{arg1, arg2})
fake.writeMessageMutex.Unlock()
if stub != nil {
return stub(arg1, arg2)
}
if specificReturn {
return ret.result1
}
return fakeReturns.result1
}
func (fake *FakeProtocol) WriteMessageCallCount() int {
fake.writeMessageMutex.RLock()
defer fake.writeMessageMutex.RUnlock()
return len(fake.writeMessageArgsForCall)
}
func (fake *FakeProtocol) WriteMessageCalls(stub func(context.Context, rtmp.Message) error) {
fake.writeMessageMutex.Lock()
defer fake.writeMessageMutex.Unlock()
fake.WriteMessageStub = stub
}
func (fake *FakeProtocol) WriteMessageArgsForCall(i int) (context.Context, rtmp.Message) {
fake.writeMessageMutex.RLock()
defer fake.writeMessageMutex.RUnlock()
argsForCall := fake.writeMessageArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2
}
func (fake *FakeProtocol) WriteMessageReturns(result1 error) {
fake.writeMessageMutex.Lock()
defer fake.writeMessageMutex.Unlock()
fake.WriteMessageStub = nil
fake.writeMessageReturns = struct {
result1 error
}{result1}
}
func (fake *FakeProtocol) WriteMessageReturnsOnCall(i int, result1 error) {
fake.writeMessageMutex.Lock()
defer fake.writeMessageMutex.Unlock()
fake.WriteMessageStub = nil
if fake.writeMessageReturnsOnCall == nil {
fake.writeMessageReturnsOnCall = make(map[int]struct {
result1 error
})
}
fake.writeMessageReturnsOnCall[i] = struct {
result1 error
}{result1}
}
func (fake *FakeProtocol) WritePacket(arg1 context.Context, arg2 rtmp.Packet, arg3 int) error {
fake.writePacketMutex.Lock()
ret, specificReturn := fake.writePacketReturnsOnCall[len(fake.writePacketArgsForCall)]
fake.writePacketArgsForCall = append(fake.writePacketArgsForCall, struct {
arg1 context.Context
arg2 rtmp.Packet
arg3 int
}{arg1, arg2, arg3})
stub := fake.WritePacketStub
fakeReturns := fake.writePacketReturns
fake.recordInvocation("WritePacket", []interface{}{arg1, arg2, arg3})
fake.writePacketMutex.Unlock()
if stub != nil {
return stub(arg1, arg2, arg3)
}
if specificReturn {
return ret.result1
}
return fakeReturns.result1
}
func (fake *FakeProtocol) WritePacketCallCount() int {
fake.writePacketMutex.RLock()
defer fake.writePacketMutex.RUnlock()
return len(fake.writePacketArgsForCall)
}
func (fake *FakeProtocol) WritePacketCalls(stub func(context.Context, rtmp.Packet, int) error) {
fake.writePacketMutex.Lock()
defer fake.writePacketMutex.Unlock()
fake.WritePacketStub = stub
}
func (fake *FakeProtocol) WritePacketArgsForCall(i int) (context.Context, rtmp.Packet, int) {
fake.writePacketMutex.RLock()
defer fake.writePacketMutex.RUnlock()
argsForCall := fake.writePacketArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3
}
func (fake *FakeProtocol) WritePacketReturns(result1 error) {
fake.writePacketMutex.Lock()
defer fake.writePacketMutex.Unlock()
fake.WritePacketStub = nil
fake.writePacketReturns = struct {
result1 error
}{result1}
}
func (fake *FakeProtocol) WritePacketReturnsOnCall(i int, result1 error) {
fake.writePacketMutex.Lock()
defer fake.writePacketMutex.Unlock()
fake.WritePacketStub = nil
if fake.writePacketReturnsOnCall == nil {
fake.writePacketReturnsOnCall = make(map[int]struct {
result1 error
})
}
fake.writePacketReturnsOnCall[i] = struct {
result1 error
}{result1}
}
func (fake *FakeProtocol) Invocations() map[string][][]interface{} {
fake.invocationsMutex.RLock()
defer fake.invocationsMutex.RUnlock()
copiedInvocations := map[string][][]interface{}{}
for key, value := range fake.invocations {
copiedInvocations[key] = value
}
return copiedInvocations
}
func (fake *FakeProtocol) recordInvocation(key string, args []interface{}) {
fake.invocationsMutex.Lock()
defer fake.invocationsMutex.Unlock()
if fake.invocations == nil {
fake.invocations = map[string][][]interface{}{}
}
if fake.invocations[key] == nil {
fake.invocations[key] = [][]interface{}{}
}
fake.invocations[key] = append(fake.invocations[key], args)
}
var _ rtmp.Protocol = new(FakeProtocol)