diff options
Diffstat (limited to 'src/pkg/crypto/tls/record_process_test.go')
-rw-r--r-- | src/pkg/crypto/tls/record_process_test.go | 146 |
1 files changed, 73 insertions, 73 deletions
diff --git a/src/pkg/crypto/tls/record_process_test.go b/src/pkg/crypto/tls/record_process_test.go index 1d019e30d..65ce3eba9 100644 --- a/src/pkg/crypto/tls/record_process_test.go +++ b/src/pkg/crypto/tls/record_process_test.go @@ -5,132 +5,132 @@ package tls import ( - "encoding/hex"; - "testing"; - "testing/script"; + "encoding/hex" + "testing" + "testing/script" ) func setup() (appDataChan chan []byte, requestChan chan interface{}, controlChan chan interface{}, recordChan chan *record, handshakeChan chan interface{}) { - rp := new(recordProcessor); - appDataChan = make(chan []byte); - requestChan = make(chan interface{}); - controlChan = make(chan interface{}); - recordChan = make(chan *record); - handshakeChan = make(chan interface{}); - - go rp.loop(appDataChan, requestChan, controlChan, recordChan, handshakeChan); - return; + rp := new(recordProcessor) + appDataChan = make(chan []byte) + requestChan = make(chan interface{}) + controlChan = make(chan interface{}) + recordChan = make(chan *record) + handshakeChan = make(chan interface{}) + + go rp.loop(appDataChan, requestChan, controlChan, recordChan, handshakeChan) + return } func fromHex(s string) []byte { - b, _ := hex.DecodeString(s); - return b; + b, _ := hex.DecodeString(s) + return b } func TestNullConnectionState(t *testing.T) { - _, requestChan, controlChan, recordChan, _ := setup(); - defer close(requestChan); - defer close(controlChan); - defer close(recordChan); + _, requestChan, controlChan, recordChan, _ := setup() + defer close(requestChan) + defer close(controlChan) + defer close(recordChan) // Test a simple request for the connection state. - replyChan := make(chan ConnectionState); - sendReq := script.NewEvent("send request", nil, script.Send{requestChan, getConnectionState{replyChan}}); - getReply := script.NewEvent("get reply", []*script.Event{sendReq}, script.Recv{replyChan, ConnectionState{false, "", 0}}); + replyChan := make(chan ConnectionState) + sendReq := script.NewEvent("send request", nil, script.Send{requestChan, getConnectionState{replyChan}}) + getReply := script.NewEvent("get reply", []*script.Event{sendReq}, script.Recv{replyChan, ConnectionState{false, "", 0}}) - err := script.Perform(0, []*script.Event{sendReq, getReply}); + err := script.Perform(0, []*script.Event{sendReq, getReply}) if err != nil { t.Errorf("Got error: %s", err) } } func TestWaitConnectionState(t *testing.T) { - _, requestChan, controlChan, recordChan, _ := setup(); - defer close(requestChan); - defer close(controlChan); - defer close(recordChan); + _, requestChan, controlChan, recordChan, _ := setup() + defer close(requestChan) + defer close(controlChan) + defer close(recordChan) // Test that waitConnectionState doesn't get a reply until the connection state changes. - replyChan := make(chan ConnectionState); - sendReq := script.NewEvent("send request", nil, script.Send{requestChan, waitConnectionState{replyChan}}); - replyChan2 := make(chan ConnectionState); - sendReq2 := script.NewEvent("send request 2", []*script.Event{sendReq}, script.Send{requestChan, getConnectionState{replyChan2}}); - getReply2 := script.NewEvent("get reply 2", []*script.Event{sendReq2}, script.Recv{replyChan2, ConnectionState{false, "", 0}}); - sendState := script.NewEvent("send state", []*script.Event{getReply2}, script.Send{controlChan, ConnectionState{true, "test", 1}}); - getReply := script.NewEvent("get reply", []*script.Event{sendState}, script.Recv{replyChan, ConnectionState{true, "test", 1}}); - - err := script.Perform(0, []*script.Event{sendReq, sendReq2, getReply2, sendState, getReply}); + replyChan := make(chan ConnectionState) + sendReq := script.NewEvent("send request", nil, script.Send{requestChan, waitConnectionState{replyChan}}) + replyChan2 := make(chan ConnectionState) + sendReq2 := script.NewEvent("send request 2", []*script.Event{sendReq}, script.Send{requestChan, getConnectionState{replyChan2}}) + getReply2 := script.NewEvent("get reply 2", []*script.Event{sendReq2}, script.Recv{replyChan2, ConnectionState{false, "", 0}}) + sendState := script.NewEvent("send state", []*script.Event{getReply2}, script.Send{controlChan, ConnectionState{true, "test", 1}}) + getReply := script.NewEvent("get reply", []*script.Event{sendState}, script.Recv{replyChan, ConnectionState{true, "test", 1}}) + + err := script.Perform(0, []*script.Event{sendReq, sendReq2, getReply2, sendState, getReply}) if err != nil { t.Errorf("Got error: %s", err) } } func TestHandshakeAssembly(t *testing.T) { - _, requestChan, controlChan, recordChan, handshakeChan := setup(); - defer close(requestChan); - defer close(controlChan); - defer close(recordChan); + _, requestChan, controlChan, recordChan, handshakeChan := setup() + defer close(requestChan) + defer close(controlChan) + defer close(recordChan) // Test the reassembly of a fragmented handshake message. - send1 := script.NewEvent("send 1", nil, script.Send{recordChan, &record{recordTypeHandshake, 0, 0, fromHex("10000003")}}); - send2 := script.NewEvent("send 2", []*script.Event{send1}, script.Send{recordChan, &record{recordTypeHandshake, 0, 0, fromHex("0001")}}); - send3 := script.NewEvent("send 3", []*script.Event{send2}, script.Send{recordChan, &record{recordTypeHandshake, 0, 0, fromHex("42")}}); - recvMsg := script.NewEvent("recv", []*script.Event{send3}, script.Recv{handshakeChan, &clientKeyExchangeMsg{fromHex("10000003000142"), fromHex("42")}}); + send1 := script.NewEvent("send 1", nil, script.Send{recordChan, &record{recordTypeHandshake, 0, 0, fromHex("10000003")}}) + send2 := script.NewEvent("send 2", []*script.Event{send1}, script.Send{recordChan, &record{recordTypeHandshake, 0, 0, fromHex("0001")}}) + send3 := script.NewEvent("send 3", []*script.Event{send2}, script.Send{recordChan, &record{recordTypeHandshake, 0, 0, fromHex("42")}}) + recvMsg := script.NewEvent("recv", []*script.Event{send3}, script.Recv{handshakeChan, &clientKeyExchangeMsg{fromHex("10000003000142"), fromHex("42")}}) - err := script.Perform(0, []*script.Event{send1, send2, send3, recvMsg}); + err := script.Perform(0, []*script.Event{send1, send2, send3, recvMsg}) if err != nil { t.Errorf("Got error: %s", err) } } func TestEarlyApplicationData(t *testing.T) { - _, requestChan, controlChan, recordChan, handshakeChan := setup(); - defer close(requestChan); - defer close(controlChan); - defer close(recordChan); + _, requestChan, controlChan, recordChan, handshakeChan := setup() + defer close(requestChan) + defer close(controlChan) + defer close(recordChan) // Test that applicaton data received before the handshake has completed results in an error. - send := script.NewEvent("send", nil, script.Send{recordChan, &record{recordTypeApplicationData, 0, 0, fromHex("")}}); - recv := script.NewEvent("recv", []*script.Event{send}, script.Closed{handshakeChan}); + send := script.NewEvent("send", nil, script.Send{recordChan, &record{recordTypeApplicationData, 0, 0, fromHex("")}}) + recv := script.NewEvent("recv", []*script.Event{send}, script.Closed{handshakeChan}) - err := script.Perform(0, []*script.Event{send, recv}); + err := script.Perform(0, []*script.Event{send, recv}) if err != nil { t.Errorf("Got error: %s", err) } } func TestApplicationData(t *testing.T) { - appDataChan, requestChan, controlChan, recordChan, handshakeChan := setup(); - defer close(requestChan); - defer close(controlChan); - defer close(recordChan); + appDataChan, requestChan, controlChan, recordChan, handshakeChan := setup() + defer close(requestChan) + defer close(controlChan) + defer close(recordChan) // Test that the application data is forwarded after a successful Finished message. - send1 := script.NewEvent("send 1", nil, script.Send{recordChan, &record{recordTypeHandshake, 0, 0, fromHex("1400000c000000000000000000000000")}}); - recv1 := script.NewEvent("recv finished", []*script.Event{send1}, script.Recv{handshakeChan, &finishedMsg{fromHex("1400000c000000000000000000000000"), fromHex("000000000000000000000000")}}); - send2 := script.NewEvent("send connState", []*script.Event{recv1}, script.Send{controlChan, ConnectionState{true, "", 0}}); - send3 := script.NewEvent("send 2", []*script.Event{send2}, script.Send{recordChan, &record{recordTypeApplicationData, 0, 0, fromHex("0102")}}); - recv2 := script.NewEvent("recv data", []*script.Event{send3}, script.Recv{appDataChan, []byte{0x01, 0x02}}); + send1 := script.NewEvent("send 1", nil, script.Send{recordChan, &record{recordTypeHandshake, 0, 0, fromHex("1400000c000000000000000000000000")}}) + recv1 := script.NewEvent("recv finished", []*script.Event{send1}, script.Recv{handshakeChan, &finishedMsg{fromHex("1400000c000000000000000000000000"), fromHex("000000000000000000000000")}}) + send2 := script.NewEvent("send connState", []*script.Event{recv1}, script.Send{controlChan, ConnectionState{true, "", 0}}) + send3 := script.NewEvent("send 2", []*script.Event{send2}, script.Send{recordChan, &record{recordTypeApplicationData, 0, 0, fromHex("0102")}}) + recv2 := script.NewEvent("recv data", []*script.Event{send3}, script.Recv{appDataChan, []byte{0x01, 0x02}}) - err := script.Perform(0, []*script.Event{send1, recv1, send2, send3, recv2}); + err := script.Perform(0, []*script.Event{send1, recv1, send2, send3, recv2}) if err != nil { t.Errorf("Got error: %s", err) } } func TestInvalidChangeCipherSpec(t *testing.T) { - appDataChan, requestChan, controlChan, recordChan, handshakeChan := setup(); - defer close(requestChan); - defer close(controlChan); - defer close(recordChan); - - send1 := script.NewEvent("send 1", nil, script.Send{recordChan, &record{recordTypeChangeCipherSpec, 0, 0, []byte{1}}}); - recv1 := script.NewEvent("recv 1", []*script.Event{send1}, script.Recv{handshakeChan, changeCipherSpec{}}); - send2 := script.NewEvent("send 2", []*script.Event{recv1}, script.Send{controlChan, ConnectionState{false, "", 42}}); - close := script.NewEvent("close 1", []*script.Event{send2}, script.Closed{appDataChan}); - close2 := script.NewEvent("close 2", []*script.Event{send2}, script.Closed{handshakeChan}); - - err := script.Perform(0, []*script.Event{send1, recv1, send2, close, close2}); + appDataChan, requestChan, controlChan, recordChan, handshakeChan := setup() + defer close(requestChan) + defer close(controlChan) + defer close(recordChan) + + send1 := script.NewEvent("send 1", nil, script.Send{recordChan, &record{recordTypeChangeCipherSpec, 0, 0, []byte{1}}}) + recv1 := script.NewEvent("recv 1", []*script.Event{send1}, script.Recv{handshakeChan, changeCipherSpec{}}) + send2 := script.NewEvent("send 2", []*script.Event{recv1}, script.Send{controlChan, ConnectionState{false, "", 42}}) + close := script.NewEvent("close 1", []*script.Event{send2}, script.Closed{appDataChan}) + close2 := script.NewEvent("close 2", []*script.Event{send2}, script.Closed{handshakeChan}) + + err := script.Perform(0, []*script.Event{send1, recv1, send2, close, close2}) if err != nil { t.Errorf("Got error: %s", err) } |