@@ -63,6 +63,26 @@ app5.use(staticCache({
63
63
} ) )
64
64
var server5 = http . createServer ( app5 . callback ( ) )
65
65
66
+ var app6 = new Koa ( )
67
+ app6 . use ( staticCache ( path . join ( __dirname , '..' ) , {
68
+ buffer : true ,
69
+ brotli : true ,
70
+ filter ( file ) {
71
+ return ! file . includes ( 'node_modules' )
72
+ }
73
+ } ) )
74
+ var server6 = http . createServer ( app6 . callback ( ) )
75
+
76
+ var app7 = new Koa ( )
77
+ var files7 = { }
78
+ app7 . use ( staticCache ( path . join ( __dirname , '..' ) , {
79
+ brotli : true ,
80
+ filter ( file ) {
81
+ return ! file . includes ( 'node_modules' )
82
+ }
83
+ } , files7 ) )
84
+ var server7 = http . createServer ( app7 . callback ( ) )
85
+
66
86
describe ( 'Static Cache' , function ( ) {
67
87
68
88
it ( 'should dir priority than options.dir' , function ( done ) {
@@ -601,4 +621,85 @@ describe('Static Cache', function () {
601
621
. expect ( 404 )
602
622
. end ( done )
603
623
} )
624
+
625
+ it ( 'should serve files with brotli buffer' , function ( done ) {
626
+ var index = fs . readFileSync ( 'index.js' )
627
+ zlib . brotliCompress ( index , function ( err , content ) {
628
+ request ( server6 )
629
+ . get ( '/index.js' )
630
+ . set ( 'Accept-Encoding' , 'br' )
631
+ . responseType ( 'arraybuffer' )
632
+ . expect ( 200 )
633
+ . expect ( 'Cache-Control' , 'public, max-age=0' )
634
+ . expect ( 'Content-Encoding' , 'br' )
635
+ . expect ( 'Content-Type' , / j a v a s c r i p t / )
636
+ . expect ( 'Content-Length' , String ( content . length ) )
637
+ . expect ( 'Vary' , 'Accept-Encoding' )
638
+ . expect ( function ( res ) {
639
+ return res . body . toString ( 'hex' ) === content . toString ( 'hex' )
640
+ } )
641
+ . end ( function ( err , res ) {
642
+ if ( err )
643
+ return done ( err )
644
+ res . should . have . header ( 'Content-Length' )
645
+ res . should . have . header ( 'Last-Modified' )
646
+ res . should . have . header ( 'ETag' )
647
+
648
+ etag = res . headers . etag
649
+
650
+ done ( )
651
+ } )
652
+ } )
653
+ } )
654
+
655
+ it ( 'should not serve files with brotli buffer when accept encoding not include br' ,
656
+ function ( done ) {
657
+ var index = fs . readFileSync ( 'index.js' )
658
+ request ( server6 )
659
+ . get ( '/index.js' )
660
+ . set ( 'Accept-Encoding' , '' )
661
+ . expect ( 200 )
662
+ . expect ( 'Cache-Control' , 'public, max-age=0' )
663
+ . expect ( 'Content-Type' , / j a v a s c r i p t / )
664
+ . expect ( 'Content-Length' , String ( index . length ) )
665
+ . expect ( 'Vary' , 'Accept-Encoding' )
666
+ . expect ( index . toString ( ) )
667
+ . end ( function ( err , res ) {
668
+ if ( err )
669
+ return done ( err )
670
+ res . should . not . have . header ( 'Content-Encoding' )
671
+ res . should . have . header ( 'Content-Length' )
672
+ res . should . have . header ( 'Last-Modified' )
673
+ res . should . have . header ( 'ETag' )
674
+ done ( )
675
+ } )
676
+ } )
677
+
678
+ it ( 'should serve files with brotli stream' , function ( done ) {
679
+ var index = fs . readFileSync ( 'index.js' )
680
+ zlib . brotliCompress ( index , function ( err , content ) {
681
+ request ( server7 )
682
+ . get ( '/index.js' )
683
+ . set ( 'Accept-Encoding' , 'br' )
684
+ . expect ( 200 )
685
+ . expect ( 'Cache-Control' , 'public, max-age=0' )
686
+ . expect ( 'Content-Encoding' , 'br' )
687
+ . expect ( 'Content-Type' , / j a v a s c r i p t / )
688
+ . expect ( 'Vary' , 'Accept-Encoding' )
689
+ . expect ( function ( res ) {
690
+ return res . body . toString ( 'hex' ) === content . toString ( 'hex' )
691
+ } )
692
+ . end ( function ( err , res ) {
693
+ if ( err )
694
+ return done ( err )
695
+ res . should . not . have . header ( 'Content-Length' )
696
+ res . should . have . header ( 'Last-Modified' )
697
+ res . should . have . header ( 'ETag' )
698
+
699
+ etag = res . headers . etag
700
+
701
+ done ( )
702
+ } )
703
+ } )
704
+ } )
604
705
} )
0 commit comments