@@ -731,6 +731,91 @@ func Test_CacheInvalidation(t *testing.T) {
731
731
require .NotEqual (t , body , bodyInvalidate )
732
732
}
733
733
734
+ func Test_CacheInvalidation_noCacheEntry (t * testing.T ) {
735
+ t .Parallel ()
736
+ t .Run ("Cache Invalidator should not be called if no cache entry exist " , func (t * testing.T ) {
737
+ t .Parallel ()
738
+ app := fiber .New ()
739
+ cacheInvalidatorExecuted := false
740
+ app .Use (New (Config {
741
+ CacheControl : true ,
742
+ CacheInvalidator : func (c fiber.Ctx ) bool {
743
+ cacheInvalidatorExecuted = true
744
+ return fiber .Query [bool ](c , "invalidate" )
745
+ },
746
+ MaxBytes : 10 * 1024 * 1024 ,
747
+ }))
748
+ _ , err := app .Test (httptest .NewRequest (fiber .MethodGet , "/?invalidate=true" , nil ))
749
+ require .NoError (t , err )
750
+ require .False (t , cacheInvalidatorExecuted )
751
+ })
752
+ }
753
+
754
+ func Test_CacheInvalidation_removeFromHeap (t * testing.T ) {
755
+ t .Parallel ()
756
+ t .Run ("Invalidate and remove from the heap" , func (t * testing.T ) {
757
+ t .Parallel ()
758
+ app := fiber .New ()
759
+ app .Use (New (Config {
760
+ CacheControl : true ,
761
+ CacheInvalidator : func (c fiber.Ctx ) bool {
762
+ return fiber .Query [bool ](c , "invalidate" )
763
+ },
764
+ MaxBytes : 10 * 1024 * 1024 ,
765
+ }))
766
+
767
+ app .Get ("/" , func (c fiber.Ctx ) error {
768
+ return c .SendString (time .Now ().String ())
769
+ })
770
+
771
+ resp , err := app .Test (httptest .NewRequest (fiber .MethodGet , "/" , nil ))
772
+ require .NoError (t , err )
773
+ body , err := io .ReadAll (resp .Body )
774
+ require .NoError (t , err )
775
+
776
+ respCached , err := app .Test (httptest .NewRequest (fiber .MethodGet , "/" , nil ))
777
+ require .NoError (t , err )
778
+ bodyCached , err := io .ReadAll (respCached .Body )
779
+ require .NoError (t , err )
780
+ require .True (t , bytes .Equal (body , bodyCached ))
781
+ require .NotEmpty (t , respCached .Header .Get (fiber .HeaderCacheControl ))
782
+
783
+ respInvalidate , err := app .Test (httptest .NewRequest (fiber .MethodGet , "/?invalidate=true" , nil ))
784
+ require .NoError (t , err )
785
+ bodyInvalidate , err := io .ReadAll (respInvalidate .Body )
786
+ require .NoError (t , err )
787
+ require .NotEqual (t , body , bodyInvalidate )
788
+ })
789
+ }
790
+
791
+ func Test_CacheStorage_CustomHeaders (t * testing.T ) {
792
+ t .Parallel ()
793
+ app := fiber .New ()
794
+ app .Use (New (Config {
795
+ CacheControl : true ,
796
+ Storage : memory .New (),
797
+ MaxBytes : 10 * 1024 * 1024 ,
798
+ }))
799
+
800
+ app .Get ("/" , func (c fiber.Ctx ) error {
801
+ c .Response ().Header .Set ("Content-Type" , "text/xml" )
802
+ c .Response ().Header .Set ("Content-Encoding" , "utf8" )
803
+ return c .Send ([]byte ("<xml><value>Test</value></xml>" ))
804
+ })
805
+
806
+ resp , err := app .Test (httptest .NewRequest (fiber .MethodGet , "/" , nil ))
807
+ require .NoError (t , err )
808
+ body , err := io .ReadAll (resp .Body )
809
+ require .NoError (t , err )
810
+
811
+ respCached , err := app .Test (httptest .NewRequest (fiber .MethodGet , "/" , nil ))
812
+ require .NoError (t , err )
813
+ bodyCached , err := io .ReadAll (respCached .Body )
814
+ require .NoError (t , err )
815
+ require .True (t , bytes .Equal (body , bodyCached ))
816
+ require .NotEmpty (t , respCached .Header .Get (fiber .HeaderCacheControl ))
817
+ }
818
+
734
819
// Because time points are updated once every X milliseconds, entries in tests can often have
735
820
// equal expiration times and thus be in an random order. This closure hands out increasing
736
821
// time intervals to maintain strong ascending order of expiration
0 commit comments