summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/container_test.go53
-rw-r--r--lib/entry_test.go28
2 files changed, 79 insertions, 2 deletions
diff --git a/lib/container_test.go b/lib/container_test.go
index dac76ae9..61a1ae76 100644
--- a/lib/container_test.go
+++ b/lib/container_test.go
@@ -1,6 +1,7 @@
package lib
import (
+ "fmt"
"testing"
)
@@ -91,8 +92,8 @@ func TestContainer_Len(t *testing.T) {
t.Run("with entries", func(t *testing.T) {
c := NewContainer()
for i := 0; i < 5; i++ {
- e := NewEntry("test" + string(rune('A'+i)))
- if err := e.AddPrefix("192.168." + string(rune('0'+i)) + ".0/24"); err != nil {
+ e := NewEntry(fmt.Sprintf("test%c", 'A'+i))
+ if err := e.AddPrefix(fmt.Sprintf("192.168.%d.0/24", i)); err != nil {
t.Fatalf("AddPrefix failed: %v", err)
}
if err := c.Add(e); err != nil {
@@ -929,3 +930,51 @@ func TestContainer_Remove_CaseRemovePrefix_IPv6Only(t *testing.T) {
t.Fatalf("Remove failed: %v", err)
}
}
+
+func TestContainer_Remove_CaseRemovePrefix_IgnoreIPv4_NoIPv6Builder(t *testing.T) {
+ c := NewContainer()
+
+ // Create entry with only IPv4
+ e1 := NewEntry("test")
+ if err := e1.AddPrefix("192.168.0.0/16"); err != nil {
+ t.Fatalf("AddPrefix failed: %v", err)
+ }
+ if err := c.Add(e1); err != nil {
+ t.Fatalf("Add failed: %v", err)
+ }
+
+ // Create entry with IPv6 to remove
+ e2 := NewEntry("test")
+ if err := e2.AddPrefix("2001:db8::/32"); err != nil {
+ t.Fatalf("AddPrefix failed: %v", err)
+ }
+
+ // Remove with IgnoreIPv4 - should create IPv6 builder on val to remove from
+ if err := c.Remove(e2, CaseRemovePrefix, IgnoreIPv4); err != nil {
+ t.Fatalf("Remove failed: %v", err)
+ }
+}
+
+func TestContainer_Remove_CaseRemovePrefix_IgnoreIPv6_NoIPv4Builder(t *testing.T) {
+ c := NewContainer()
+
+ // Create entry with only IPv6
+ e1 := NewEntry("test")
+ if err := e1.AddPrefix("2001:db8::/32"); err != nil {
+ t.Fatalf("AddPrefix failed: %v", err)
+ }
+ if err := c.Add(e1); err != nil {
+ t.Fatalf("Add failed: %v", err)
+ }
+
+ // Create entry with IPv4 to remove
+ e2 := NewEntry("test")
+ if err := e2.AddPrefix("192.168.1.0/24"); err != nil {
+ t.Fatalf("AddPrefix failed: %v", err)
+ }
+
+ // Remove with IgnoreIPv6 - should create IPv4 builder on val to remove from
+ if err := c.Remove(e2, CaseRemovePrefix, IgnoreIPv6); err != nil {
+ t.Fatalf("Remove failed: %v", err)
+ }
+}
diff --git a/lib/entry_test.go b/lib/entry_test.go
index 299b7ddf..fdc55ee7 100644
--- a/lib/entry_test.go
+++ b/lib/entry_test.go
@@ -751,6 +751,34 @@ func TestEntry_processPrefix_InvalidPrefix(t *testing.T) {
if err != ErrInvalidIPLength {
t.Errorf("expected ErrInvalidIPLength for zero prefix pointer, got %v", err)
}
+
+ // Test with invalid bit count for IPv4 prefix (33 bits)
+ addr := netip.MustParseAddr("192.168.1.1")
+ invalidPrefix := netip.PrefixFrom(addr, 33)
+ _, _, err = e.processPrefix(invalidPrefix)
+ if err != ErrInvalidPrefix {
+ t.Errorf("expected ErrInvalidPrefix for out-of-range bits, got %v", err)
+ }
+
+ // Test with pointer to invalid bit count prefix
+ _, _, err = e.processPrefix(&invalidPrefix)
+ if err != ErrInvalidPrefix {
+ t.Errorf("expected ErrInvalidPrefix for out-of-range bits pointer, got %v", err)
+ }
+
+ // Test with invalid bit count for IPv6 prefix (129 bits)
+ addr6 := netip.MustParseAddr("2001:db8::1")
+ invalidPrefix6 := netip.PrefixFrom(addr6, 129)
+ _, _, err = e.processPrefix(invalidPrefix6)
+ if err != ErrInvalidPrefix {
+ t.Errorf("expected ErrInvalidPrefix for IPv6 out-of-range bits, got %v", err)
+ }
+
+ // Test with pointer to invalid IPv6 prefix
+ _, _, err = e.processPrefix(&invalidPrefix6)
+ if err != ErrInvalidPrefix {
+ t.Errorf("expected ErrInvalidPrefix for IPv6 out-of-range bits pointer, got %v", err)
+ }
}
func TestEntry_processPrefix_IPv4MappedCIDRString(t *testing.T) {