@@ -86,6 +86,9 @@ impl RustwideBuilder {
8686 if let Some ( custom_image) = & config. local_docker_image {
8787 builder = builder. sandbox_image ( SandboxImage :: local ( & custom_image) ?) ;
8888 }
89+ if cfg ! ( test) {
90+ builder = builder. fast_init ( true ) ;
91+ }
8992
9093 let workspace = builder. init ( ) ?;
9194 workspace. purge_all_build_dirs ( ) ?;
@@ -752,3 +755,102 @@ pub(crate) struct BuildResult {
752755 pub ( crate ) docsrs_version : String ,
753756 pub ( crate ) successful : bool ,
754757}
758+
759+ #[ cfg( test) ]
760+ mod tests {
761+ use super :: * ;
762+ use crate :: test:: { assert_redirect, assert_success, wrapper} ;
763+
764+ #[ test]
765+ #[ ignore]
766+ fn test_build_crate ( ) {
767+ wrapper ( |env| {
768+ let crate_ = DUMMY_CRATE_NAME ;
769+ let crate_path = crate_. replace ( "-" , "_" ) ;
770+ let version = DUMMY_CRATE_VERSION ;
771+ let default_target = "x86_64-unknown-linux-gnu" ;
772+
773+ assert_eq ! ( env. config( ) . include_default_targets, true ) ;
774+
775+ let mut builder = RustwideBuilder :: init ( env) . unwrap ( ) ;
776+ builder
777+ . build_package ( crate_, version, PackageKind :: CratesIo )
778+ . map ( |_| ( ) ) ?;
779+
780+ // check release record in the db (default and other targets)
781+ let mut conn = env. db ( ) . conn ( ) ;
782+ let rows = conn
783+ . query (
784+ "SELECT
785+ r.rustdoc_status,
786+ r.default_target,
787+ r.doc_targets
788+ FROM
789+ crates as c
790+ INNER JOIN releases AS r ON c.id = r.crate_id
791+ WHERE
792+ c.name = $1 AND
793+ r.version = $2" ,
794+ & [ & crate_, & version] ,
795+ )
796+ . unwrap ( ) ;
797+ let row = rows. get ( 0 ) . unwrap ( ) ;
798+
799+ assert_eq ! ( row. get:: <_, bool >( "rustdoc_status" ) , true ) ;
800+ assert_eq ! ( row. get:: <_, String >( "default_target" ) , default_target) ;
801+
802+ let mut targets: Vec < String > = row
803+ . get :: < _ , Value > ( "doc_targets" )
804+ . as_array ( )
805+ . unwrap ( )
806+ . iter ( )
807+ . map ( |v| v. as_str ( ) . unwrap ( ) . to_owned ( ) )
808+ . collect ( ) ;
809+ targets. sort ( ) ;
810+ assert_eq ! (
811+ targets,
812+ vec![
813+ "i686-pc-windows-msvc" ,
814+ "i686-unknown-linux-gnu" ,
815+ "x86_64-apple-darwin" ,
816+ "x86_64-pc-windows-msvc" ,
817+ "x86_64-unknown-linux-gnu" ,
818+ ]
819+ ) ;
820+
821+ let storage = env. storage ( ) ;
822+ let web = env. frontend ( ) ;
823+
824+ let base = format ! ( "rustdoc/{}/{}" , crate_, version) ;
825+
826+ // default target was built and is accessible
827+ assert ! ( storage. exists( & format!( "{}/{}/index.html" , base, crate_path) ) ?) ;
828+ assert_success ( & format ! ( "/{}/{}/{}" , crate_, version, crate_path) , web) ?;
829+
830+ // other targets too
831+ for target in DEFAULT_TARGETS {
832+ let target_docs_present =
833+ storage. exists ( & format ! ( "{}/{}/{}/index.html" , base, target, crate_path) ) ?;
834+
835+ let target_url = format ! (
836+ "/{}/{}/{}/{}/index.html" ,
837+ crate_, version, target, crate_path
838+ ) ;
839+
840+ if target == & default_target {
841+ assert ! ( !target_docs_present) ;
842+ assert_redirect (
843+ & target_url,
844+ & format ! ( "/{}/{}/{}/index.html" , crate_, version, crate_path) ,
845+ web,
846+ ) ?;
847+ } else {
848+ assert ! ( target_docs_present) ;
849+ assert_success ( & target_url, web) ?;
850+ }
851+ }
852+
853+ Ok ( ( ) )
854+ } )
855+ }
856+ }
0 commit comments