73 lines
2.6 KiB
Go
73 lines
2.6 KiB
Go
package hosts
|
|
|
|
import (
|
|
"github.com/stretchr/testify/assert"
|
|
"strings"
|
|
"testing"
|
|
"unicode"
|
|
)
|
|
|
|
func TestParseEntry(t *testing.T) {
|
|
entry, err := ParseEntry(strings.NewReader("127.0.0.1 myself.local another.local # this is a test comment"))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, Entry{
|
|
IPAddress: "127.0.0.1",
|
|
Domains: []string{"myself.local", "another.local"},
|
|
Comment: " this is a test comment",
|
|
}, entry)
|
|
|
|
entry, err = ParseEntry(strings.NewReader("127.0.0.1 test.local #another comment"))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, Entry{
|
|
IPAddress: "127.0.0.1",
|
|
Domains: []string{"test.local"},
|
|
Comment: "another comment",
|
|
}, entry)
|
|
|
|
entry, err = ParseEntry(strings.NewReader("127.0.0.1 "))
|
|
assert.EqualError(t, err, "invalid entry")
|
|
}
|
|
|
|
func TestEntry_IsFilled(t *testing.T) {
|
|
assert.True(t, Entry{IPAddress: "127.0.0.1", Domains: []string{"myself.local"}}.IsFilled())
|
|
assert.False(t, Entry{}.IsFilled())
|
|
assert.False(t, Entry{IPAddress: "127.0.0.1"}.IsFilled())
|
|
}
|
|
|
|
func TestEntry_HasDomain(t *testing.T) {
|
|
assert.True(t, Entry{IPAddress: "127.0.0.1", Domains: []string{"myself.local", "another.local"}}.HasDomain("myself.local"))
|
|
assert.True(t, Entry{IPAddress: "127.0.0.1", Domains: []string{"myself.local", "another.local"}}.HasDomain("MYSELF.local"))
|
|
assert.False(t, Entry{IPAddress: "127.0.0.1", Domains: []string{"notme.local", "another.local"}}.HasDomain("myself.local"))
|
|
}
|
|
|
|
func TestEntry_ToLine(t *testing.T) {
|
|
assert.Equal(t, "127.0.0.1 myself.local another.local # this is a test comment", Entry{IPAddress: "127.0.0.1", Domains: []string{"myself.local", "another.local"}, Comment: " this is a test comment"}.ToLine())
|
|
assert.Equal(t, "# this is a test comment", Entry{IPAddress: "", Domains: nil, Comment: " this is a test comment"}.ToLine())
|
|
assert.Equal(t, "127.0.0.1 myself.local another.local", Entry{IPAddress: "127.0.0.1", Domains: []string{"myself.local", "another.local"}}.ToLine())
|
|
}
|
|
|
|
func FuzzParseEntry(f *testing.F) {
|
|
f.Add("127.0.0.1", "myself.local", "another.local", "this is a test comment")
|
|
f.Fuzz(func(t *testing.T, a, b, c, d string) {
|
|
for _, i := range []string{a, b, c} {
|
|
i = strings.TrimSpace(i)
|
|
if i == "" || strings.ContainsFunc(i, func(r rune) bool {
|
|
return r == '#' || unicode.IsSpace(r)
|
|
}) {
|
|
t.Skip()
|
|
}
|
|
}
|
|
|
|
entry := Entry{IPAddress: a, Domains: []string{b, c}, Comment: d}
|
|
e2, err := ParseEntryString(entry.ToLine())
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
assert.Equal(t, Entry{
|
|
IPAddress: strings.TrimSpace(a),
|
|
Domains: []string{strings.TrimSpace(b), strings.TrimSpace(c)},
|
|
Comment: d,
|
|
}, e2)
|
|
})
|
|
}
|