From 23dcee64643fef66663272cd123dc7b42dfa67c9 Mon Sep 17 00:00:00 2001 From: Katie Hockman Date: Mon, 1 Jun 2020 16:20:32 -0400 Subject: [PATCH] crypto/tls: test that Clone copies session ticket key fields Updates #25256 Change-Id: If16c42581f1cf3500fd7fd01c915e487f8025e55 Reviewed-on: https://go-review.googlesource.com/c/go/+/235922 Run-TryBot: Katie Hockman TryBot-Result: Gobot Gobot Reviewed-by: Filippo Valsorda --- src/crypto/tls/tls_test.go | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/crypto/tls/tls_test.go b/src/crypto/tls/tls_test.go index 9e340774b67..d5238026da6 100644 --- a/src/crypto/tls/tls_test.go +++ b/src/crypto/tls/tls_test.go @@ -785,11 +785,6 @@ func TestCloneNonFuncFields(t *testing.T) { typ := v.Type() for i := 0; i < typ.NumField(); i++ { f := v.Field(i) - if !f.CanSet() { - // unexported field; not cloned. - continue - } - // testing/quick can't handle functions or interfaces and so // isn't used here. switch fn := typ.Field(i).Name; fn { @@ -830,17 +825,17 @@ func TestCloneNonFuncFields(t *testing.T) { f.Set(reflect.ValueOf([]CurveID{CurveP256})) case "Renegotiation": f.Set(reflect.ValueOf(RenegotiateOnceAsClient)) + case "mutex", "autoSessionTicketKeys", "sessionTicketKeys": + continue // these are unexported fields that are handled separately default: t.Errorf("all fields must be accounted for, but saw unknown field %q", fn) } } + // Set the unexported fields related to session ticket keys, which are copied with Clone(). + c1.autoSessionTicketKeys = []ticketKey{c1.ticketKeyFromBytes(c1.SessionTicketKey)} + c1.sessionTicketKeys = []ticketKey{c1.ticketKeyFromBytes(c1.SessionTicketKey)} c2 := c1.Clone() - // DeepEqual also compares unexported fields, thus c2 needs to have run - // serverInit in order to be DeepEqual to c1. Cloning it and discarding - // the result is sufficient. - c2.Clone() - if !reflect.DeepEqual(&c1, c2) { t.Errorf("clone failed to copy a field") }