@@ -86,6 +86,9 @@ impl RustwideBuilder {
86
86
if let Some ( custom_image) = & config. local_docker_image {
87
87
builder = builder. sandbox_image ( SandboxImage :: local ( & custom_image) ?) ;
88
88
}
89
+ if cfg ! ( test) {
90
+ builder = builder. fast_init ( true ) ;
91
+ }
89
92
90
93
let workspace = builder. init ( ) ?;
91
94
workspace. purge_all_build_dirs ( ) ?;
@@ -752,3 +755,102 @@ pub(crate) struct BuildResult {
752
755
pub ( crate ) docsrs_version : String ,
753
756
pub ( crate ) successful : bool ,
754
757
}
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