summaryrefslogtreecommitdiff
path: root/lib/coverage2_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/coverage2_test.go')
-rw-r--r--lib/coverage2_test.go261
1 files changed, 261 insertions, 0 deletions
diff --git a/lib/coverage2_test.go b/lib/coverage2_test.go
new file mode 100644
index 00000000..ff7181e5
--- /dev/null
+++ b/lib/coverage2_test.go
@@ -0,0 +1,261 @@
+package lib
+
+import (
+ "net"
+ "testing"
+)
+
+// Additional comprehensive coverage tests
+
+func TestEntry_ProcessPrefix_NetIPNetEdgeCases(t *testing.T) {
+ entry := NewEntry("test")
+
+ // Test with *net.IPNet IPv6
+ _, ipnet, _ := net.ParseCIDR("2001:db8::/32")
+ err := entry.AddPrefix(ipnet)
+ if err != nil {
+ t.Errorf("Entry.AddPrefix(*net.IPNet IPv6) error = %v, want nil", err)
+ }
+}
+
+func TestContainer_AddExistingWithNilBuilders(t *testing.T) {
+ container := NewContainer()
+
+ // Add first entry with IPv4
+ entry1 := NewEntry("test")
+ entry1.AddPrefix("192.168.1.0/24")
+ container.Add(entry1)
+
+ // Add second entry with IPv6 and default ignore option (no ignore)
+ entry2 := NewEntry("test")
+ entry2.AddPrefix("2001:db8::/32")
+ err := container.Add(entry2, nil)
+ if err != nil {
+ t.Errorf("Container.Add() with nil option error = %v, want nil", err)
+ }
+}
+
+func TestContainer_RemoveWithNilBuilders(t *testing.T) {
+ container := NewContainer()
+
+ // Add entry with IPv4
+ entry := NewEntry("test")
+ entry.AddPrefix("192.168.1.0/24")
+ container.Add(entry)
+
+ // Remove with entry that has no builders created
+ removeEntry := NewEntry("test")
+ removeEntry.AddPrefix("10.0.0.0/8")
+
+ // Remove prefixes with no ignore option
+ err := container.Remove(removeEntry, CaseRemovePrefix, nil)
+ if err != nil {
+ t.Errorf("Container.Remove() with nil option error = %v, want nil", err)
+ }
+}
+
+func TestEntry_MarshalWithNilOption(t *testing.T) {
+ entry := NewEntry("test")
+ entry.AddPrefix("192.168.1.0/24")
+
+ // Test with nil option
+ prefixes, err := entry.MarshalPrefix(nil)
+ if err != nil {
+ t.Errorf("Entry.MarshalPrefix(nil) error = %v, want nil", err)
+ }
+ if len(prefixes) != 1 {
+ t.Errorf("Entry.MarshalPrefix(nil) returned %d prefixes, want 1", len(prefixes))
+ }
+
+ ipranges, err := entry.MarshalIPRange(nil)
+ if err != nil {
+ t.Errorf("Entry.MarshalIPRange(nil) error = %v, want nil", err)
+ }
+ if len(ipranges) != 1 {
+ t.Errorf("Entry.MarshalIPRange(nil) returned %d ranges, want 1", len(ipranges))
+ }
+
+ cidrs, err := entry.MarshalText(nil)
+ if err != nil {
+ t.Errorf("Entry.MarshalText(nil) error = %v, want nil", err)
+ }
+ if len(cidrs) != 1 {
+ t.Errorf("Entry.MarshalText(nil) returned %d CIDRs, want 1", len(cidrs))
+ }
+}
+
+func TestContainer_LookupIPv6Prefix(t *testing.T) {
+ container := NewContainer()
+
+ // Add IPv6 entry
+ entry := NewEntry("entry1")
+ entry.AddPrefix("2001:db8::/32")
+ container.Add(entry)
+
+ // Lookup IPv6 CIDR
+ results, found, err := container.Lookup("2001:db8:1::/48")
+ if err != nil {
+ t.Errorf("Container.Lookup() IPv6 CIDR error = %v, want nil", err)
+ }
+ if !found {
+ t.Error("Container.Lookup() IPv6 CIDR found = false, want true")
+ }
+ if len(results) != 1 {
+ t.Errorf("Container.Lookup() IPv6 CIDR returned %d results, want 1", len(results))
+ }
+}
+
+func TestEntry_RemovePrefixComment(t *testing.T) {
+ entry := NewEntry("test")
+ entry.AddPrefix("192.168.1.0/24")
+
+ // Remove with comment (should still work)
+ err := entry.RemovePrefix("192.168.1.0/24 // comment")
+ if err != nil {
+ t.Errorf("Entry.RemovePrefix() with comment error = %v, want nil", err)
+ }
+}
+
+func TestEntry_GetIPv4SetBuildError(t *testing.T) {
+ entry := NewEntry("test")
+ entry.AddPrefix("192.168.1.0/24")
+
+ // Get the set
+ set, err := entry.GetIPv4Set()
+ if err != nil {
+ t.Errorf("Entry.GetIPv4Set() error = %v, want nil", err)
+ }
+ if set == nil {
+ t.Error("Entry.GetIPv4Set() returned nil set")
+ }
+
+ // Get it again (should use cached version)
+ set2, err := entry.GetIPv4Set()
+ if err != nil {
+ t.Errorf("Entry.GetIPv4Set() second call error = %v, want nil", err)
+ }
+ if set2 == nil {
+ t.Error("Entry.GetIPv4Set() second call returned nil set")
+ }
+}
+
+func TestEntry_GetIPv6SetBuildError(t *testing.T) {
+ entry := NewEntry("test")
+ entry.AddPrefix("2001:db8::/32")
+
+ // Get the set
+ set, err := entry.GetIPv6Set()
+ if err != nil {
+ t.Errorf("Entry.GetIPv6Set() error = %v, want nil", err)
+ }
+ if set == nil {
+ t.Error("Entry.GetIPv6Set() returned nil set")
+ }
+
+ // Get it again (should use cached version)
+ set2, err := entry.GetIPv6Set()
+ if err != nil {
+ t.Errorf("Entry.GetIPv6Set() second call error = %v, want nil", err)
+ }
+ if set2 == nil {
+ t.Error("Entry.GetIPv6Set() second call returned nil set")
+ }
+}
+
+func TestContainer_RemoveEntryWithIgnoreOptions_EdgeCases(t *testing.T) {
+ container := NewContainer()
+
+ // Add entry with only IPv4
+ entry := NewEntry("test")
+ entry.AddPrefix("192.168.1.0/24")
+ container.Add(entry)
+
+ // Remove with CaseRemoveEntry and IgnoreIPv4 (should remove IPv6 builder, but there is none)
+ err := container.Remove(entry, CaseRemoveEntry, IgnoreIPv4)
+ if err != nil {
+ t.Errorf("Container.Remove() CaseRemoveEntry with IgnoreIPv4 error = %v, want nil", err)
+ }
+}
+
+func TestContainer_RemoveEntryWithIgnoreOptions_IPv6Only(t *testing.T) {
+ container := NewContainer()
+
+ // Add entry with only IPv6
+ entry := NewEntry("test")
+ entry.AddPrefix("2001:db8::/32")
+ container.Add(entry)
+
+ // Remove with CaseRemoveEntry and IgnoreIPv6 (should remove IPv4 builder, but there is none)
+ err := container.Remove(entry, CaseRemoveEntry, IgnoreIPv6)
+ if err != nil {
+ t.Errorf("Container.Remove() CaseRemoveEntry with IgnoreIPv6 error = %v, want nil", err)
+ }
+}
+
+func TestContainer_RemovePrefixWithIgnoreOptions_EdgeCases(t *testing.T) {
+ container := NewContainer()
+
+ // Add entry with only IPv4
+ entry := NewEntry("test")
+ entry.AddPrefix("192.168.1.0/24")
+ container.Add(entry)
+
+ // Remove prefix with IgnoreIPv4 (should only remove IPv6, but there is none)
+ removeEntry := NewEntry("test")
+ removeEntry.AddPrefix("2001:db8::/32")
+ err := container.Remove(removeEntry, CaseRemovePrefix, IgnoreIPv4)
+ if err != nil {
+ t.Errorf("Container.Remove() CaseRemovePrefix with IgnoreIPv4 error = %v, want nil", err)
+ }
+}
+
+func TestContainer_RemovePrefixWithIgnoreOptions_IPv6Only(t *testing.T) {
+ container := NewContainer()
+
+ // Add entry with only IPv6
+ entry := NewEntry("test")
+ entry.AddPrefix("2001:db8::/32")
+ container.Add(entry)
+
+ // Remove prefix with IgnoreIPv6 (should only remove IPv4, but there is none)
+ removeEntry := NewEntry("test")
+ removeEntry.AddPrefix("192.168.1.0/24")
+ err := container.Remove(removeEntry, CaseRemovePrefix, IgnoreIPv6)
+ if err != nil {
+ t.Errorf("Container.Remove() CaseRemovePrefix with IgnoreIPv6 error = %v, want nil", err)
+ }
+}
+
+func TestContainer_AddExistingWithIgnoreOptionsAndNilBuilders(t *testing.T) {
+ container := NewContainer()
+
+ // Add entry with only IPv6
+ entry1 := NewEntry("test")
+ entry1.AddPrefix("2001:db8::/32")
+ container.Add(entry1)
+
+ // Add with IgnoreIPv6 (should add IPv4, but entry2 has none)
+ entry2 := NewEntry("test")
+ entry2.AddPrefix("192.168.1.0/24")
+ err := container.Add(entry2, IgnoreIPv6)
+ if err != nil {
+ t.Errorf("Container.Add() with IgnoreIPv6 error = %v, want nil", err)
+ }
+}
+
+func TestContainer_AddExistingWithIgnoreIPv4AndNilBuilders(t *testing.T) {
+ container := NewContainer()
+
+ // Add entry with only IPv4
+ entry1 := NewEntry("test")
+ entry1.AddPrefix("192.168.1.0/24")
+ container.Add(entry1)
+
+ // Add with IgnoreIPv4 (should add IPv6, but entry2 has none)
+ entry2 := NewEntry("test")
+ entry2.AddPrefix("2001:db8::/32")
+ err := container.Add(entry2, IgnoreIPv4)
+ if err != nil {
+ t.Errorf("Container.Add() with IgnoreIPv4 error = %v, want nil", err)
+ }
+}