summaryrefslogtreecommitdiff
path: root/lib/coverage_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/coverage_test.go')
-rw-r--r--lib/coverage_test.go221
1 files changed, 221 insertions, 0 deletions
diff --git a/lib/coverage_test.go b/lib/coverage_test.go
new file mode 100644
index 00000000..ced4df2f
--- /dev/null
+++ b/lib/coverage_test.go
@@ -0,0 +1,221 @@
+package lib
+
+import (
+ "testing"
+)
+
+// Additional tests for edge cases to improve coverage
+
+func TestContainer_InvalidContainer(t *testing.T) {
+ // Test with nil entries map
+ c := &container{entries: nil}
+
+ if c.isValid() {
+ t.Error("container with nil entries should not be valid")
+ }
+
+ if c.Len() != 0 {
+ t.Errorf("invalid container.Len() = %d, want 0", c.Len())
+ }
+
+ _, found := c.GetEntry("test")
+ if found {
+ t.Error("invalid container.GetEntry() should not find entries")
+ }
+}
+
+func TestEntry_BuildIPSetErrors(t *testing.T) {
+ entry := NewEntry("test")
+
+ // Add IPv4 prefix
+ entry.AddPrefix("192.168.1.0/24")
+
+ // Build the set (this should succeed)
+ err := entry.buildIPSet()
+ if err != nil {
+ t.Errorf("Entry.buildIPSet() error = %v, want nil", err)
+ }
+
+ // Build again (should be cached and succeed)
+ err = entry.buildIPSet()
+ if err != nil {
+ t.Errorf("Entry.buildIPSet() second call error = %v, want nil", err)
+ }
+
+ // Test with IPv6
+ entry2 := NewEntry("test2")
+ entry2.AddPrefix("2001:db8::/32")
+
+ err = entry2.buildIPSet()
+ if err != nil {
+ t.Errorf("Entry.buildIPSet() for IPv6 error = %v, want nil", err)
+ }
+
+ // Build again for IPv6 (should be cached)
+ err = entry2.buildIPSet()
+ if err != nil {
+ t.Errorf("Entry.buildIPSet() for IPv6 second call error = %v, want nil", err)
+ }
+}
+
+func TestEntry_RemoveIPv6(t *testing.T) {
+ entry := NewEntry("test")
+
+ // Add IPv6 prefix
+ entry.AddPrefix("2001:db8::/32")
+
+ // Remove it
+ err := entry.RemovePrefix("2001:db8::/32")
+ if err != nil {
+ t.Errorf("Entry.RemovePrefix() IPv6 error = %v, want nil", err)
+ }
+}
+
+func TestContainer_Add_ExistingEntryWithoutBuilders(t *testing.T) {
+ container := NewContainer()
+
+ // Add entry without creating builders (empty entry)
+ entry1 := NewEntry("test")
+ container.Add(entry1)
+
+ // Add another entry with prefixes
+ entry2 := NewEntry("test")
+ entry2.AddPrefix("192.168.1.0/24")
+ entry2.AddPrefix("2001:db8::/32")
+
+ err := container.Add(entry2)
+ if err != nil {
+ t.Errorf("Container.Add() error = %v, want nil", err)
+ }
+}
+
+func TestWantedListExtended_EmptyJSON(t *testing.T) {
+ var w WantedListExtended
+ err := w.UnmarshalJSON([]byte(""))
+ if err != nil {
+ t.Errorf("WantedListExtended.UnmarshalJSON() with empty data error = %v, want nil", err)
+ }
+}
+
+func TestContainer_RemoveWithErrorInBuilder(t *testing.T) {
+ container := NewContainer()
+
+ // Add entry with both IPv4 and IPv6
+ entry := NewEntry("test")
+ entry.AddPrefix("192.168.1.0/24")
+ entry.AddPrefix("2001:db8::/32")
+ container.Add(entry)
+
+ // Try removing with a malformed entry (empty, will cause issues building sets)
+ removeEntry := NewEntry("test")
+ // Don't add any prefixes, this should work but remove nothing
+ err := container.Remove(removeEntry, CaseRemovePrefix)
+ if err != nil {
+ t.Errorf("Container.Remove() with empty entry error = %v, want nil", err)
+ }
+}
+
+func TestEntry_ProcessPrefix_EdgeCases(t *testing.T) {
+ entry := NewEntry("test")
+
+ // Test string with only comment marker and content
+ err := entry.AddPrefix("//")
+ if err != ErrInvalidIPType {
+ t.Errorf("Entry.AddPrefix('//') error = %v, want %v", err, ErrInvalidIPType)
+ }
+
+ err = entry.AddPrefix("#")
+ if err != ErrInvalidIPType {
+ t.Errorf("Entry.AddPrefix('#') error = %v, want %v", err, ErrInvalidIPType)
+ }
+
+ err = entry.AddPrefix("/*")
+ if err != ErrInvalidIPType {
+ t.Errorf("Entry.AddPrefix('/*') error = %v, want %v", err, ErrInvalidIPType)
+ }
+}
+
+func TestContainer_Lookup_EmptyResults(t *testing.T) {
+ container := NewContainer()
+
+ // Add entry
+ entry := NewEntry("entry1")
+ entry.AddPrefix("192.168.1.0/24")
+ container.Add(entry)
+
+ // Lookup with search list that doesn't match
+ results, found, err := container.Lookup("192.168.1.1", "nonexistent")
+ if err != nil {
+ t.Errorf("Container.Lookup() error = %v, want nil", err)
+ }
+ if found {
+ t.Error("Container.Lookup() found = true, want false")
+ }
+ if len(results) != 0 {
+ t.Errorf("Container.Lookup() returned %d results, want 0", len(results))
+ }
+}
+
+func TestEntry_MarshalPrefixOnlyIPv4(t *testing.T) {
+ entry := NewEntry("test")
+ entry.AddPrefix("192.168.1.0/24")
+
+ // Marshal with IgnoreIPv6 (should return IPv4 only)
+ prefixes, err := entry.MarshalPrefix(IgnoreIPv6)
+ if err != nil {
+ t.Errorf("Entry.MarshalPrefix(IgnoreIPv6) error = %v, want nil", err)
+ }
+ if len(prefixes) != 1 {
+ t.Errorf("Entry.MarshalPrefix(IgnoreIPv6) returned %d prefixes, want 1", len(prefixes))
+ }
+
+ // Test MarshalIPRange with only IPv4
+ ipranges, err := entry.MarshalIPRange(IgnoreIPv6)
+ if err != nil {
+ t.Errorf("Entry.MarshalIPRange(IgnoreIPv6) error = %v, want nil", err)
+ }
+ if len(ipranges) != 1 {
+ t.Errorf("Entry.MarshalIPRange(IgnoreIPv6) returned %d ranges, want 1", len(ipranges))
+ }
+
+ // Test MarshalText with only IPv4
+ cidrs, err := entry.MarshalText(IgnoreIPv6)
+ if err != nil {
+ t.Errorf("Entry.MarshalText(IgnoreIPv6) error = %v, want nil", err)
+ }
+ if len(cidrs) != 1 {
+ t.Errorf("Entry.MarshalText(IgnoreIPv6) returned %d CIDRs, want 1", len(cidrs))
+ }
+}
+
+func TestEntry_MarshalPrefixOnlyIPv6(t *testing.T) {
+ entry := NewEntry("test")
+ entry.AddPrefix("2001:db8::/32")
+
+ // Marshal with IgnoreIPv4 (should return IPv6 only)
+ prefixes, err := entry.MarshalPrefix(IgnoreIPv4)
+ if err != nil {
+ t.Errorf("Entry.MarshalPrefix(IgnoreIPv4) error = %v, want nil", err)
+ }
+ if len(prefixes) != 1 {
+ t.Errorf("Entry.MarshalPrefix(IgnoreIPv4) returned %d prefixes, want 1", len(prefixes))
+ }
+
+ // Test MarshalIPRange with only IPv6
+ ipranges, err := entry.MarshalIPRange(IgnoreIPv4)
+ if err != nil {
+ t.Errorf("Entry.MarshalIPRange(IgnoreIPv4) error = %v, want nil", err)
+ }
+ if len(ipranges) != 1 {
+ t.Errorf("Entry.MarshalIPRange(IgnoreIPv4) returned %d ranges, want 1", len(ipranges))
+ }
+
+ // Test MarshalText with only IPv6
+ cidrs, err := entry.MarshalText(IgnoreIPv4)
+ if err != nil {
+ t.Errorf("Entry.MarshalText(IgnoreIPv4) error = %v, want nil", err)
+ }
+ if len(cidrs) != 1 {
+ t.Errorf("Entry.MarshalText(IgnoreIPv4) returned %d CIDRs, want 1", len(cidrs))
+ }
+}