summaryrefslogtreecommitdiff
path: root/lib/coverage2_test.go
blob: ff7181e5986a3b94f64d9c9b44ba8640e205aa93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
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)
	}
}