2016-09-23 09:48:11 -03:00
package kubernetes
import "testing"
2017-01-15 03:12:28 -05:00
import "reflect"
2016-09-23 09:48:11 -03:00
// Test data for TestSymbolContainsWildcard cases.
var testdataSymbolContainsWildcard = [ ] struct {
Symbol string
ExpectedResult bool
} {
{ "mynamespace" , false } ,
{ "*" , true } ,
{ "any" , true } ,
{ "my*space" , true } ,
{ "*space" , true } ,
{ "myname*" , true } ,
}
func TestSymbolContainsWildcard ( t * testing . T ) {
for _ , example := range testdataSymbolContainsWildcard {
actualResult := symbolContainsWildcard ( example . Symbol )
if actualResult != example . ExpectedResult {
t . Errorf ( "Expected SymbolContainsWildcard result '%v' for example string='%v'. Instead got result '%v'." , example . ExpectedResult , example . Symbol , actualResult )
}
}
}
2017-01-15 03:12:28 -05:00
func expectString ( t * testing . T , function , qtype , query string , r * recordRequest , field , expected string ) {
ref := reflect . ValueOf ( r )
ref_f := reflect . Indirect ( ref ) . FieldByName ( field )
got := ref_f . String ( )
if got != expected {
t . Errorf ( "Expected %v(%v, \"%v\") to get %v == \"%v\". Instead got \"%v\"." , function , query , qtype , field , expected , got )
}
}
func TestParseRequest ( t * testing . T ) {
var tcs map [ string ] string
k := Kubernetes { Zones : [ ] string { "inter.webs.test" } }
f := "parseRequest"
// Test a valid SRV request
//
query := "_http._tcp.webs.mynamespace.svc.inter.webs.test."
r , e := k . parseRequest ( query , "SRV" )
if e != nil {
t . Errorf ( "Expected no error from parseRequest(%v, \"SRV\"). Instead got '%v'." , query , e )
}
tcs = map [ string ] string {
"port" : "http" ,
"protocol" : "tcp" ,
"endpoint" : "" ,
"service" : "webs" ,
"namespace" : "mynamespace" ,
"typeName" : "svc" ,
"zone" : "inter.webs.test" ,
}
for field , expected := range tcs {
expectString ( t , f , "SRV" , query , & r , field , expected )
}
// Test wildcard acceptance
//
query = "*.any.*.any.svc.inter.webs.test."
r , e = k . parseRequest ( query , "SRV" )
if e != nil {
t . Errorf ( "Expected no error from parseRequest(\"%v\", \"SRV\"). Instead got '%v'." , query , e )
}
tcs = map [ string ] string {
"port" : "*" ,
"protocol" : "any" ,
"endpoint" : "" ,
"service" : "*" ,
"namespace" : "any" ,
"typeName" : "svc" ,
"zone" : "inter.webs.test" ,
}
for field , expected := range tcs {
expectString ( t , f , "SRV" , query , & r , field , expected )
}
// Test A request of endpoint
//
query = "1-2-3-4.webs.mynamespace.svc.inter.webs.test."
r , e = k . parseRequest ( query , "A" )
if e != nil {
t . Errorf ( "Expected no error from parseRequest(\"%v\", \"A\"). Instead got '%v'." , query , e )
}
tcs = map [ string ] string {
"port" : "" ,
"protocol" : "" ,
"endpoint" : "1-2-3-4" ,
"service" : "webs" ,
"namespace" : "mynamespace" ,
"typeName" : "svc" ,
"zone" : "inter.webs.test" ,
}
for field , expected := range tcs {
expectString ( t , f , "A" , query , & r , field , expected )
}
// Invalid query tests
//
invalidAQueries := [ ] string {
"_http._tcp.webs.mynamespace.svc.inter.webs.test." , // A requests cannot have port or protocol
"servname.ns1.srv.inter.nets.test." , // A requests must have zone that matches corefile
}
for _ , q := range invalidAQueries {
_ , e = k . parseRequest ( q , "A" )
if e == nil {
t . Errorf ( "Expected error from %v(\"%v\", \"A\")." , f , q )
}
}
invalidSRVQueries := [ ] string {
"webs.mynamespace.svc.inter.webs.test." , // SRV requests must have port and protocol
"_http._pcp.webs.mynamespace.svc.inter.webs.test." , // SRV protocol must be tcp or udp
"_http._tcp.ep.webs.ns.svc.inter.webs.test." , // SRV requests cannot have an endpoint
"_*._*.webs.mynamespace.svc.inter.webs.test." , // SRV request with invalid wildcards
"_http._tcp" ,
"_tcp.test." ,
"." ,
}
for _ , q := range invalidSRVQueries {
_ , e = k . parseRequest ( q , "SRV" )
if e == nil {
t . Errorf ( "Expected error from %v(\"%v\", \"SRV\")." , f , q )
}
}
}