1 /// These tests are intended to provide coverage and
2 /// check panic-safety of relatively unused values.
3 use super::codec::Codec;
4 use super::enums::*;
5
get8<T: Codec>(enum_value: &T) -> u86 fn get8<T: Codec>(enum_value: &T) -> u8 {
7 let enc = enum_value.get_encoding();
8 assert_eq!(enc.len(), 1);
9 enc[0]
10 }
11
get16<T: Codec>(enum_value: &T) -> u1612 fn get16<T: Codec>(enum_value: &T) -> u16 {
13 let enc = enum_value.get_encoding();
14 assert_eq!(enc.len(), 2);
15 (enc[0] as u16 >> 8) | (enc[1] as u16)
16 }
17
test_enum16<T: Codec>(first: T, last: T)18 fn test_enum16<T: Codec>(first: T, last: T) {
19 let first_v = get16(&first);
20 let last_v = get16(&last);
21
22 for val in first_v..last_v + 1 {
23 let mut buf = Vec::new();
24 val.encode(&mut buf);
25 assert_eq!(buf.len(), 2);
26
27 let t = T::read_bytes(&buf).unwrap();
28 assert_eq!(val, get16(&t));
29 }
30 }
31
test_enum8<T: Codec>(first: T, last: T)32 fn test_enum8<T: Codec>(first: T, last: T) {
33 let first_v = get8(&first);
34 let last_v = get8(&last);
35
36 for val in first_v..last_v + 1 {
37 let mut buf = Vec::new();
38 val.encode(&mut buf);
39 assert_eq!(buf.len(), 1);
40
41 let t = T::read_bytes(&buf).unwrap();
42 assert_eq!(val, get8(&t));
43 }
44 }
45
46 #[test]
test_enums()47 fn test_enums() {
48 test_enum16::<ProtocolVersion>(ProtocolVersion::SSLv2, ProtocolVersion::TLSv1_3);
49 test_enum8::<HashAlgorithm>(HashAlgorithm::NONE, HashAlgorithm::SHA512);
50 test_enum8::<SignatureAlgorithm>(SignatureAlgorithm::Anonymous, SignatureAlgorithm::ECDSA);
51 test_enum8::<ClientCertificateType>(
52 ClientCertificateType::RSASign,
53 ClientCertificateType::ECDSAFixedECDH,
54 );
55 test_enum8::<Compression>(Compression::Null, Compression::LSZ);
56 test_enum8::<ContentType>(ContentType::ChangeCipherSpec, ContentType::Heartbeat);
57 test_enum8::<HandshakeType>(HandshakeType::HelloRequest, HandshakeType::MessageHash);
58 test_enum8::<AlertLevel>(AlertLevel::Warning, AlertLevel::Fatal);
59 test_enum8::<AlertDescription>(
60 AlertDescription::CloseNotify,
61 AlertDescription::NoApplicationProtocol,
62 );
63 test_enum8::<HeartbeatMessageType>(
64 HeartbeatMessageType::Request,
65 HeartbeatMessageType::Response,
66 );
67 test_enum16::<ExtensionType>(ExtensionType::ServerName, ExtensionType::RenegotiationInfo);
68 test_enum8::<ServerNameType>(ServerNameType::HostName, ServerNameType::HostName);
69 test_enum16::<NamedCurve>(
70 NamedCurve::sect163k1,
71 NamedCurve::arbitrary_explicit_char2_curves,
72 );
73 test_enum16::<NamedGroup>(NamedGroup::secp256r1, NamedGroup::FFDHE8192);
74 test_enum16::<CipherSuite>(
75 CipherSuite::TLS_NULL_WITH_NULL_NULL,
76 CipherSuite::SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA,
77 );
78 test_enum8::<ECPointFormat>(
79 ECPointFormat::Uncompressed,
80 ECPointFormat::ANSIX962CompressedChar2,
81 );
82 test_enum8::<HeartbeatMode>(
83 HeartbeatMode::PeerAllowedToSend,
84 HeartbeatMode::PeerNotAllowedToSend,
85 );
86 test_enum8::<ECCurveType>(ECCurveType::ExplicitPrime, ECCurveType::NamedCurve);
87 test_enum16::<SignatureScheme>(SignatureScheme::RSA_PKCS1_SHA1, SignatureScheme::ED448);
88 test_enum8::<PSKKeyExchangeMode>(PSKKeyExchangeMode::PSK_KE, PSKKeyExchangeMode::PSK_DHE_KE);
89 test_enum8::<KeyUpdateRequest>(
90 KeyUpdateRequest::UpdateNotRequested,
91 KeyUpdateRequest::UpdateRequested,
92 );
93 test_enum8::<CertificateStatusType>(CertificateStatusType::OCSP, CertificateStatusType::OCSP);
94 }
95
96 #[test]
test_string_macro()97 fn test_string_macro() {
98 let suite = CipherSuite::TLS13_AES_256_GCM_SHA384;
99 let s = suite.as_str().unwrap();
100 assert_eq!(s, "TLS13_AES_256_GCM_SHA384")
101 }
102