### Question:
ClientTlsSession { public byte[] startHandshake() { if (clientHello != null) { throw new IllegalStateException("Already started"); } final ClientHello ch = ClientHello.defaults(kek, transportParameters); clientHello = Bytes.write(bb -> ch.write(bb, true)); return clientHello; } ClientTlsSession(
      final AEAD initialAEAD,
      final TransportParameters transportParameters,
      final CertificateValidator certificateValidator); byte[] startHandshake(); AEAD handleServerHello(final byte[] msg); synchronized Optional<HandshakeResult> handleHandshake(final byte[] msg); boolean available(final EncryptionLevel encLevel); AEAD getAEAD(final EncryptionLevel level); void setHandshakeAead(final AEAD handshakeAead); void setOneRttAead(final AEAD oneRttAead); void unsetInitialAead(); void unsetHandshakeAead();  }### Answer:
@Test public void handshake() { final byte[] ch = engine.startHandshake(); final ClientHello hello = ClientHello.parse(ch, false); assertEquals(32, hello.getClientRandom().length); assertEquals(0, hello.getSessionId().length); assertEquals(List.of(TLS_AES_128_GCM_SHA256), hello.getCipherSuites()); assertEquals( 32, ((KeyShare) hello.getExtension(ExtensionType.KEY_SHARE).get()) .getKey(Group.X25519) .get() .length); assertEquals( List.of(Group.X25519), ((SupportedGroups) hello.getExtension(ExtensionType.SUPPORTED_GROUPS).get()).getGroups()); assertEquals( List.of(SupportedVersion.TLS13), ((SupportedVersions) hello.getExtension(ExtensionType.SUPPORTED_VERSIONS).get()) .getVersions()); final TransportParameters tps = (TransportParameters) hello.getExtension(ExtensionType.QUIC).get(); assertEquals(TestUtil.tps(), tps); }