mirror of
https://github.com/netbirdio/netbird.git
synced 2026-09-08 16:01:29 +02:00
40 lines
1.3 KiB
Go
40 lines
1.3 KiB
Go
//go:build privileged
|
|
|
|
package ipfwdstate
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// TestRequestRoutingV6ToV4Transition verifies that a v4-only routing request
|
|
// releases a previously held routing-owned v6 reference without touching
|
|
// references held by DNAT rules.
|
|
func TestRequestRoutingV6ToV4Transition(t *testing.T) {
|
|
f := NewIPForwardingState("wt-fwd-test")
|
|
|
|
require.NoError(t, f.RequestRouting(true), "request routing with v6")
|
|
v4, v6 := f.Counts()
|
|
assert.Equal(t, 1, v4, "v4 reference held")
|
|
assert.Equal(t, 1, v6, "v6 reference held")
|
|
|
|
require.NoError(t, f.RequestRouting(false), "request routing v4-only")
|
|
v4, v6 = f.Counts()
|
|
assert.Equal(t, 1, v4, "v4 reference kept")
|
|
assert.Equal(t, 0, v6, "routing-owned v6 reference released")
|
|
|
|
// A DNAT-held reference survives a v4-only routing request.
|
|
require.NoError(t, f.RequestForwarding(true), "dnat v6 reference")
|
|
require.NoError(t, f.RequestRouting(false), "repeat v4-only request")
|
|
_, v6 = f.Counts()
|
|
assert.Equal(t, 1, v6, "dnat-held v6 reference survives")
|
|
require.NoError(t, f.ReleaseForwarding(true), "release dnat v6 reference")
|
|
|
|
require.NoError(t, f.ReleaseRouting(), "release routing")
|
|
v4, v6 = f.Counts()
|
|
assert.Equal(t, 0, v4, "all v4 references released")
|
|
assert.Equal(t, 0, v6, "all v6 references released")
|
|
}
|