1package tlsutil
2
3import (
4	"crypto/tls"
5	"reflect"
6	"testing"
7)
8
9func TestParseCiphers(t *testing.T) {
10	testOk := "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305"
11	v, err := ParseCiphers(testOk)
12	if err != nil {
13		t.Fatal(err)
14	}
15	if len(v) != 17 {
16		t.Fatal("missed ciphers after parse")
17	}
18
19	testBad := "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,cipherX"
20	if _, err := ParseCiphers(testBad); err == nil {
21		t.Fatal("should fail on unsupported cipherX")
22	}
23
24	testOrder := "TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256"
25	v, _ = ParseCiphers(testOrder)
26	expected := []uint16{tls.TLS_RSA_WITH_AES_256_GCM_SHA384, tls.TLS_RSA_WITH_AES_128_GCM_SHA256}
27	if !reflect.DeepEqual(expected, v) {
28		t.Fatal("cipher order is not preserved")
29	}
30}
31
32func TestGetCipherName(t *testing.T) {
33	testOkCipherStr := "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
34	testOkCipher := tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
35	cipherStr, err := GetCipherName(testOkCipher)
36	if err != nil {
37		t.Fatal(err)
38	}
39	if cipherStr != testOkCipherStr {
40		t.Fatalf("cipher string should be %s but is %s", testOkCipherStr, cipherStr)
41	}
42
43	var testBadCipher uint16 = 0xC022
44	cipherStr, err = GetCipherName(testBadCipher)
45	if err == nil {
46		t.Fatal("should fail on unsupported cipher 0xC022")
47	}
48}
49