diff --git a/packets/krb5_test.go b/packets/krb5_test.go new file mode 100644 index 00000000..afd2b139 --- /dev/null +++ b/packets/krb5_test.go @@ -0,0 +1,208 @@ +package packets + +import ( + "encoding/asn1" + "errors" + "reflect" + "testing" + "time" +) + +func TestKrb5Contants(t *testing.T) { + var units = []struct { + got interface{} + exp interface{} + }{ + {Krb5AsRequestType, 10}, + {Krb5Krb5PrincipalNameType, 1}, + {Krb5CryptDesCbcMd4, 2}, + {Krb5CryptDescCbcMd5, 3}, + {Krb5CryptRc4Hmac, 23}, + } + for _, u := range units { + if !reflect.DeepEqual(u.exp, u.got) { + t.Fatalf("expected '%v', got '%v'", u.exp, u.got) + } + } +} + +func TestKrb5Vars(t *testing.T) { + var units = []struct { + got interface{} + exp interface{} + }{ + {ErrNoCrypt, errors.New("No crypt alg found")}, + {ErrReqData, errors.New("Failed to extract pnData from as-req")}, + {ErrNoCipher, errors.New("No encryption type or cipher found")}, + {Krb5AsReqParam, "application,explicit,tag:10"}, + } + for _, u := range units { + if !reflect.DeepEqual(u.exp, u.got) { + t.Fatalf("expected '%v', got '%v'", u.exp, u.got) + } + } +} + +func TestKrb5PrincipalName(t *testing.T) { + str := []string{"example"} + name := Krb5PrincipalName{NameString: str} + var units = []struct { + got interface{} + exp interface{} + }{ + {name.NameType, 0}, + {name.NameString, str}, + } + for _, u := range units { + if !reflect.DeepEqual(u.exp, u.got) { + t.Fatalf("expected '%v', got '%v'", u.exp, u.got) + } + } +} + +func TestKrb5EncryptedData(t *testing.T) { + cipher := []byte{} + data := Krb5EncryptedData{Cipher: cipher} + var units = []struct { + got interface{} + exp interface{} + }{ + {data.Cipher, cipher}, + {data.Etype, 0}, + {data.Kvno, 0}, + } + for _, u := range units { + if !reflect.DeepEqual(u.exp, u.got) { + t.Fatalf("expected '%v', got '%v'", u.exp, u.got) + } + } +} + +func TestKrb5Ticket(t *testing.T) { + v := 0 + r := "picat" + s := Krb5PrincipalName{} + e := Krb5EncryptedData{} + + ticket := Krb5Ticket{ + TktVno: v, + Realm: r, + Sname: s, + EncPart: e, + } + var units = []struct { + got interface{} + exp interface{} + }{ + {ticket.TktVno, v}, + {ticket.Realm, r}, + {ticket.Sname, s}, + {ticket.EncPart, e}, + } + for _, u := range units { + if !reflect.DeepEqual(u.exp, u.got) { + t.Fatalf("expected '%v', got '%v'", u.exp, u.got) + } + } +} + +func TestKrb5Address(t *testing.T) { + x := 0 + y := []byte{} + addr := Krb5Address{ + AddrType: x, + Krb5Address: y, + } + var units = []struct { + got interface{} + exp interface{} + }{ + {addr.AddrType, x}, + {addr.Krb5Address, y}, + } + for _, u := range units { + if !reflect.DeepEqual(u.exp, u.got) { + t.Fatalf("expected '%v', got '%v'", u.exp, u.got) + } + } +} + +func TestKrb5PnData(t *testing.T) { + x := 0 + y := []byte{} + addr := Krb5PnData{ + Krb5PnDataType: x, + Krb5PnDataValue: y, + } + var units = []struct { + got interface{} + exp interface{} + }{ + {addr.Krb5PnDataType, x}, + {addr.Krb5PnDataValue, y}, + } + for _, u := range units { + if !reflect.DeepEqual(u.exp, u.got) { + t.Fatalf("expected '%v', got '%v'", u.exp, u.got) + } + } +} + +func TestKrb5ReqBody(t *testing.T) { + e := []int{} + a := []Krb5Address{} + k := []Krb5Ticket{} + req := Krb5ReqBody{ + Etype: e, + Krb5Addresses: a, + AdditionalKrb5Tickets: k, + } + var units = []struct { + got interface{} + exp interface{} + }{ + {req.KDCOptions, asn1.BitString{}}, + {req.Cname, Krb5PrincipalName{}}, + {req.Realm, ""}, + {req.Sname, Krb5PrincipalName{}}, + {req.From, time.Time{}}, + {req.Till, time.Time{}}, + {req.Rtime, time.Time{}}, + {req.Nonce, 0}, + {req.Etype, e}, + {req.Krb5Addresses, a}, + {req.EncAuthData, Krb5EncryptedData{}}, + {req.AdditionalKrb5Tickets, k}, + } + for _, u := range units { + if !reflect.DeepEqual(u.exp, u.got) { + t.Fatalf("expected '%v', got '%v'", u.exp, u.got) + } + } + +} + +func TestKrb5Request(t *testing.T) { + p := []Krb5PnData{} + req := Krb5Request{ + Krb5PnData: p, + } + var units = []struct { + got interface{} + exp interface{} + }{ + {req.Pvno, 0}, + {req.MsgType, 0}, + {req.Krb5PnData, p}, + {req.ReqBody, Krb5ReqBody{}}, + } + for _, u := range units { + if !reflect.DeepEqual(u.exp, u.got) { + t.Fatalf("expected '%v', got '%v'", u.exp, u.got) + } + } + +} + +// TODO: add test for func (kdc Krb5Request) String() +// TODO: add test for func (pd Krb5PnData) getParsedValue()