whitelist/whitelist_test.go
package whitelist
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestWhiteListFromString(t *testing.T) {
whitelist := NewWhitelistFromString("1.2.3.4")
assert := assert.New(t)
assert.Contains(whitelist.Ips, "1.2.3.4/32", "IP is missing")
}
func TestThatItCreatesWhiteListFromStringContainingSeveralIps(t *testing.T) {
whitelist := NewWhitelistFromString("1.2.3.4,8.8.8.0/28")
assert := assert.New(t)
assert.Contains(whitelist.Ips, "1.2.3.4/32", "Initial ip's must appear")
assert.Contains(whitelist.Ips, "8.8.8.0/28", "Initial ip's must appear")
}
func TestWhiteListFromArray(t *testing.T) {
whitelist := NewWhitelistFromArray([]string{"8.8.8.8", "1.2.3.4"})
assert := assert.New(t)
assert.Contains(whitelist.Ips, "1.2.3.4/32", "Initial ip's must appear")
assert.Contains(whitelist.Ips, "8.8.8.8/32", "Initial ip's must appear")
}
func TestEmptyWhiteList(t *testing.T) {
whitelist := NewEmptyWhitelist()
assert := assert.New(t)
assert.Len(whitelist.Ips, 0, "Empty whitelist must contain 0 elements")
}
func TestThatEmptyStringReturnsEmptyWhitelist(t *testing.T) {
whitelist := NewWhitelistFromString("")
assert := assert.New(t)
assert.Len(whitelist.Ips, 0, "It must contain no IPs")
}
func TestThatEmptyArrayReturnsEmptyWhiteList(t *testing.T) {
whitelist := NewWhitelistFromArray([]string{})
assert := assert.New(t)
assert.Len(whitelist.Ips, 0, "It must contain no IPs")
}
func TestWhiteListRemoveDuplicates(t *testing.T) {
whitelist := NewWhitelistFromString("1.2.3.0/28,8.8.8.0/28")
whitelist.Add([]string{"5.5.5.5", "8.8.8.0/28", "1.2.3.4"})
assert := assert.New(t)
assert.Len(whitelist.Ips, 4, "It must contain no duplicates")
assert.Contains(whitelist.Ips, "1.2.3.4/32", "Added ip's must appear")
assert.Contains(whitelist.Ips, "1.2.3.0/28", "Added ip's must appear")
assert.Contains(whitelist.Ips, "8.8.8.0/28", "Added ip's must appear")
assert.Contains(whitelist.Ips, "5.5.5.5/32", "Added ip's must appear")
}
func TestMergingWhitelists(t *testing.T) {
whitelist1 := NewWhitelistFromString("1.2.3.4")
whitelist2 := NewWhitelistFromString("8.8.8.0/28")
whitelist1.Merge(whitelist2)
assert := assert.New(t)
assert.Contains(whitelist1.Ips, "1.2.3.4/32", "There is one missing IP from merged Whitelists")
assert.Contains(whitelist1.Ips, "8.8.8.0/28", "There is one missing IP from merged Whitelists")
}
func TestThatItIgnoresAnInvalidIp(t *testing.T) {
whitelist := NewWhitelistFromString("1.2.3.4")
whitelist.Add([]string{"5.5.5", "8.8.8.8", "non-valid.3.4"})
assert := assert.New(t)
assert.Contains(whitelist.Ips, "1.2.3.4/32", "There is one missing IP from merged Whitelists")
assert.Contains(whitelist.Ips, "8.8.8.8/32", "There is one missing IP from merged Whitelists")
assert.Len(whitelist.Ips, 2, "It must ignore non valid IP addresses")
}
func TestThatItRemovesItemsFromAnotherWhitelist(t *testing.T) {
whitelist := NewWhitelistFromString("1.2.3.4/32,4.4.4.4,8.8.8.8")
whitelist.Minus(NewWhitelistFromString("4.4.4.4/32,3.3.3.3/28"))
assert := assert.New(t)
assert.Contains(whitelist.Ips, "1.2.3.4/32", "It should only subtract IPs from second whitelist")
assert.Contains(whitelist.Ips, "8.8.8.8/32", "It should only subtract IPs from second whitelist")
assert.Len(whitelist.Ips, 2, "It must remove IP from the subtracted whitelist")
}
func TestThatTransformWhitelistToString(t *testing.T) {
whitelist := NewWhitelistFromString("1.2.3.4/32,4.4.4.4,8.8.8.8")
assert := assert.New(t)
assert.Equal("1.2.3.4/32,4.4.4.4/32,8.8.8.8/32", whitelist.ToString(), "String representation is wrong")
}