package attack import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestDetectIncrementalRoute_ChannelID(t *testing.T) { route := "/StreamingSetting?version=1.0&action=getRTSPStream&ChannelID=01&ChannelName=Channel1" match, ok := detectIncrementalRoute(route) require.True(t, ok) assert.True(t, match.isChannel) assert.Equal(t, 1, match.number) assert.Equal(t, 2, match.width) assert.Equal(t, "/StreamingSetting?version=1.0&action=getRTSPStream&ChannelID=", match.prefix) assert.Equal(t, "&ChannelName=Channel1", match.suffix) next := buildIncrementedRoute(match, match.number+1) assert.Equal(t, "/StreamingSetting?version=1.0&action=getRTSPStream&ChannelID=02&ChannelName=Channel1", next) } func TestDetectIncrementalRoute_ChannelSuffix(t *testing.T) { route := "/path/to/channel2/stream" match, ok := detectIncrementalRoute(route) require.True(t, ok) assert.True(t, match.isChannel) assert.Equal(t, 2, match.number) assert.Equal(t, "/path/to/channel", match.prefix) assert.Equal(t, "/stream", match.suffix) } func TestDetectIncrementalRoute_LastNumber(t *testing.T) { route := "/foo/bar12/baz" match, ok := detectIncrementalRoute(route) require.True(t, ok) assert.False(t, match.isChannel) assert.Equal(t, 12, match.number) assert.Equal(t, 2, match.width) assert.Equal(t, "/foo/bar", match.prefix) assert.Equal(t, "/baz", match.suffix) next := buildIncrementedRoute(match, 13) assert.Equal(t, "/foo/bar13/baz", next) } func TestDetectIncrementalRoute_NoNumber(t *testing.T) { match, ok := detectIncrementalRoute("/no/number/here") assert.False(t, ok) assert.Equal(t, incrementalRoute{}, match) } func TestBuildIncrementedRoute_ZeroPadding(t *testing.T) { match := incrementalRoute{ prefix: "/channel", suffix: "/stream", number: 1, width: 3, } assert.Equal(t, "/channel002/stream", buildIncrementedRoute(match, 2)) }