diff options
Diffstat (limited to 'lib/coverage2_test.go')
| -rw-r--r-- | lib/coverage2_test.go | 261 |
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) + } +} |
