@@ -151,7 +151,7 @@ impl<T> Stream<T> {
151151 & self . platform_id
152152 }
153153
154- pub fn appraisal_status ( & self ) -> bool {
154+ pub fn appraisal_success ( & self ) -> bool {
155155 self . corpus_appraisal_success
156156 }
157157}
@@ -505,4 +505,84 @@ mod tests {
505505 // message
506506 let _ = done_rx. await ;
507507 }
508+
509+ #[ tokio:: test]
510+ async fn unattested_client ( ) {
511+ let mut pki_keydir = Utf8PathBuf :: from ( env ! ( "CARGO_MANIFEST_DIR" ) ) ;
512+ pki_keydir. push ( "test-keys" ) ;
513+ let log = logger ( ) ;
514+
515+ let addr: SocketAddrV6 = SocketAddrV6 :: from_str ( "[::1]:46459" ) . unwrap ( ) ;
516+
517+ let server_config = keys:: SprocketsConfig {
518+ attest : keys:: AttestConfig :: Local {
519+ priv_key : pki_keydir. join ( "test-alias-1.key.pem" ) ,
520+ cert_chain : pki_keydir. join ( "test-alias-1.certlist.pem" ) ,
521+ log : pki_keydir. join ( "log.bin" ) ,
522+ } ,
523+ roots : vec ! [ pki_keydir. join( "test-root-a.cert.pem" ) ] ,
524+ resolve : keys:: ResolveSetting :: Local {
525+ priv_key : pki_keydir. join ( "test-sprockets-auth-1.key.pem" ) ,
526+ cert_chain : pki_keydir
527+ . join ( "test-sprockets-auth-1.certlist.pem" ) ,
528+ } ,
529+ } ;
530+
531+ // Message to send over TLS
532+ const MSG : & str = "Hello Joe" ;
533+
534+ let ( done_tx, done_rx) = tokio:: sync:: oneshot:: channel :: < ( ) > ( ) ;
535+ let log2 = log. clone ( ) ;
536+ let corpus = vec ! [
537+ pki_keydir. join( "corim-rot.cbor" ) ,
538+ pki_keydir. join( "corim-sp.cbor" ) ,
539+ ] ;
540+
541+ let handle = tokio:: spawn ( async move {
542+ let mut server = Server :: new ( server_config, addr, log2. clone ( ) )
543+ . await
544+ . unwrap ( ) ;
545+
546+ // We never expect this to succeed
547+ let _ = match server. accept ( corpus. as_slice ( ) ) . await {
548+ Ok ( _) => panic ! ( "This should not succed" ) ,
549+ Err ( _) => done_tx. send ( ( ) ) ,
550+ } ;
551+ } ) ;
552+
553+ let client_config = client:: Client :: new_tls_local_client_config (
554+ pki_keydir. join ( "test-sprockets-auth-2.key.pem" ) ,
555+ pki_keydir. join ( "test-sprockets-auth-2.certlist.pem" ) ,
556+ vec ! [ pki_keydir. join( "test-root-a.cert.pem" ) ] ,
557+ log,
558+ )
559+ . unwrap ( ) ;
560+
561+ let dnsname =
562+ rustls:: pki_types:: ServerName :: try_from ( "unknown.com" ) . unwrap ( ) ;
563+
564+ let connector = tokio_rustls:: TlsConnector :: from ( std:: sync:: Arc :: new (
565+ client_config,
566+ ) ) ;
567+ let stream = loop {
568+ if let Ok ( s) = tokio:: net:: TcpStream :: connect ( addr) . await {
569+ break s;
570+ } ;
571+ sleep ( Duration :: from_millis ( 1 ) ) . await ;
572+ } ;
573+
574+ let mut stream = connector. connect ( dnsname, stream) . await . unwrap ( ) ;
575+
576+ stream. write_all ( MSG . as_bytes ( ) ) . await . unwrap ( ) ;
577+
578+ // Trigger an EOF so that `read_to_string` in the acceptor task
579+ // completes.
580+ stream. shutdown ( ) . await . unwrap ( ) ;
581+
582+ // Wait for the other side of the connection to receive and assert the
583+ // message
584+ let _ = done_rx. await ;
585+
586+ handle. await . unwrap ( ) ;
587+ }
508588}
0 commit comments