init
This commit is contained in:
152
permissions_test.go
Normal file
152
permissions_test.go
Normal file
@ -0,0 +1,152 @@
|
||||
package gost
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var portRangeTests = []struct {
|
||||
in string
|
||||
out *PortRange
|
||||
}{
|
||||
{"1", &PortRange{Min: 1, Max: 1}},
|
||||
{"1-3", &PortRange{Min: 1, Max: 3}},
|
||||
{"3-1", &PortRange{Min: 1, Max: 3}},
|
||||
{"0-100000", &PortRange{Min: 0, Max: 65535}},
|
||||
{"*", &PortRange{Min: 0, Max: 65535}},
|
||||
}
|
||||
|
||||
var stringSetTests = []struct {
|
||||
in string
|
||||
out *StringSet
|
||||
}{
|
||||
{"*", &StringSet{"*"}},
|
||||
{"google.pl,google.com", &StringSet{"google.pl", "google.com"}},
|
||||
}
|
||||
|
||||
var portSetTests = []struct {
|
||||
in string
|
||||
out *PortSet
|
||||
}{
|
||||
{"1,3", &PortSet{PortRange{Min: 1, Max: 1}, PortRange{Min: 3, Max: 3}}},
|
||||
{"1-3,7-5", &PortSet{PortRange{Min: 1, Max: 3}, PortRange{Min: 5, Max: 7}}},
|
||||
{"0-100000", &PortSet{PortRange{Min: 0, Max: 65535}}},
|
||||
{"*", &PortSet{PortRange{Min: 0, Max: 65535}}},
|
||||
}
|
||||
|
||||
var permissionsTests = []struct {
|
||||
in string
|
||||
out *Permissions
|
||||
}{
|
||||
{"", &Permissions{}},
|
||||
{"*:*:*", &Permissions{
|
||||
Permission{
|
||||
Actions: StringSet{"*"},
|
||||
Hosts: StringSet{"*"},
|
||||
Ports: PortSet{PortRange{Min: 0, Max: 65535}},
|
||||
},
|
||||
}},
|
||||
{"bind:127.0.0.1,localhost:80,443,8000-8100 connect:*.google.pl:80,443", &Permissions{
|
||||
Permission{
|
||||
Actions: StringSet{"bind"},
|
||||
Hosts: StringSet{"127.0.0.1", "localhost"},
|
||||
Ports: PortSet{
|
||||
PortRange{Min: 80, Max: 80},
|
||||
PortRange{Min: 443, Max: 443},
|
||||
PortRange{Min: 8000, Max: 8100},
|
||||
},
|
||||
},
|
||||
Permission{
|
||||
Actions: StringSet{"connect"},
|
||||
Hosts: StringSet{"*.google.pl"},
|
||||
Ports: PortSet{
|
||||
PortRange{Min: 80, Max: 80},
|
||||
PortRange{Min: 443, Max: 443},
|
||||
},
|
||||
},
|
||||
}},
|
||||
}
|
||||
|
||||
func TestPortRangeParse(t *testing.T) {
|
||||
for _, test := range portRangeTests {
|
||||
actual, err := ParsePortRange(test.in)
|
||||
if err != nil {
|
||||
t.Errorf("ParsePortRange(%q) returned error: %v", test.in, err)
|
||||
} else if *actual != *test.out {
|
||||
t.Errorf("ParsePortRange(%q): got %v, want %v", test.in, actual, test.out)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPortRangeContains(t *testing.T) {
|
||||
actual, _ := ParsePortRange("5-10")
|
||||
|
||||
if !actual.Contains(5) || !actual.Contains(7) || !actual.Contains(10) {
|
||||
t.Errorf("5-10 should contain 5, 7 and 10")
|
||||
}
|
||||
|
||||
if actual.Contains(4) || actual.Contains(11) {
|
||||
t.Errorf("5-10 should not contain 4, 11")
|
||||
}
|
||||
}
|
||||
|
||||
func TestStringSetParse(t *testing.T) {
|
||||
for _, test := range stringSetTests {
|
||||
actual, err := ParseStringSet(test.in)
|
||||
if err != nil {
|
||||
t.Errorf("ParseStringSet(%q) returned error: %v", test.in, err)
|
||||
} else if fmt.Sprintln(actual) != fmt.Sprintln(test.out) {
|
||||
t.Errorf("ParseStringSet(%q): got %v, want %v", test.in, actual, test.out)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestStringSetContains(t *testing.T) {
|
||||
ss, _ := ParseStringSet("google.pl,*.google.com")
|
||||
|
||||
if !ss.Contains("google.pl") || !ss.Contains("www.google.com") {
|
||||
t.Errorf("google.pl,*.google.com should contain google.pl and www.google.com")
|
||||
}
|
||||
|
||||
if ss.Contains("www.google.pl") || ss.Contains("foobar.com") {
|
||||
t.Errorf("google.pl,*.google.com shound not contain www.google.pl and foobar.com")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPortSetParse(t *testing.T) {
|
||||
for _, test := range portSetTests {
|
||||
actual, err := ParsePortSet(test.in)
|
||||
if err != nil {
|
||||
t.Errorf("ParsePortRange(%q) returned error: %v", test.in, err)
|
||||
} else if fmt.Sprintln(actual) != fmt.Sprintln(test.out) {
|
||||
t.Errorf("ParsePortRange(%q): got %v, want %v", test.in, actual, test.out)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPortSetContains(t *testing.T) {
|
||||
actual, _ := ParsePortSet("5-10,20-30")
|
||||
|
||||
if !actual.Contains(5) || !actual.Contains(7) || !actual.Contains(10) {
|
||||
t.Errorf("5-10,20-30 should contain 5, 7 and 10")
|
||||
}
|
||||
|
||||
if !actual.Contains(20) || !actual.Contains(27) || !actual.Contains(30) {
|
||||
t.Errorf("5-10,20-30 should contain 20, 27 and 30")
|
||||
}
|
||||
|
||||
if actual.Contains(4) || actual.Contains(11) || actual.Contains(31) {
|
||||
t.Errorf("5-10,20-30 should not contain 4, 11, 31")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPermissionsParse(t *testing.T) {
|
||||
for _, test := range permissionsTests {
|
||||
actual, err := ParsePermissions(test.in)
|
||||
if err != nil {
|
||||
t.Errorf("ParsePermissions(%q) returned error: %v", test.in, err)
|
||||
} else if fmt.Sprintln(actual) != fmt.Sprintln(test.out) {
|
||||
t.Errorf("ParsePermissions(%q): got %v, want %v", test.in, actual, test.out)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user