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