@@ -80,6 +80,37 @@ public function testRequests($requestRange, $offset, $length, $responseRange)
8080 $ this ->assertEquals ($ responseRange , $ response ->headers ->get ('Content-Range ' ));
8181 }
8282
83+ /**
84+ * @dataProvider provideRanges
85+ */
86+ public function testRequestsWithoutEtag ($ requestRange , $ offset , $ length , $ responseRange )
87+ {
88+ $ response = BinaryFileResponse::create (__DIR__ .'/File/Fixtures/test.gif ' , 200 , array ('Content-Type ' => 'application/octet-stream ' ));
89+
90+ // do a request to get the LastModified
91+ $ request = Request::create ('/ ' );
92+ $ response ->prepare ($ request );
93+ $ lastModified = $ response ->headers ->get ('Last-Modified ' );
94+
95+ // prepare a request for a range of the testing file
96+ $ request = Request::create ('/ ' );
97+ $ request ->headers ->set ('If-Range ' , $ lastModified );
98+ $ request ->headers ->set ('Range ' , $ requestRange );
99+
100+ $ file = fopen (__DIR__ .'/File/Fixtures/test.gif ' , 'r ' );
101+ fseek ($ file , $ offset );
102+ $ data = fread ($ file , $ length );
103+ fclose ($ file );
104+
105+ $ this ->expectOutputString ($ data );
106+ $ response = clone $ response ;
107+ $ response ->prepare ($ request );
108+ $ response ->sendContent ();
109+
110+ $ this ->assertEquals (206 , $ response ->getStatusCode ());
111+ $ this ->assertEquals ($ responseRange , $ response ->headers ->get ('Content-Range ' ));
112+ }
113+
83114 public function provideRanges ()
84115 {
85116 return array (
@@ -91,6 +122,25 @@ public function provideRanges()
91122 );
92123 }
93124
125+ public function testRangeRequestsWithoutLastModifiedDate ()
126+ {
127+ // prevent auto last modified
128+ $ response = BinaryFileResponse::create (__DIR__ .'/File/Fixtures/test.gif ' , 200 , array ('Content-Type ' => 'application/octet-stream ' ), true , null , false , false );
129+
130+ // prepare a request for a range of the testing file
131+ $ request = Request::create ('/ ' );
132+ $ request ->headers ->set ('If-Range ' , date ('D, d M Y H:i:s ' ).' GMT ' );
133+ $ request ->headers ->set ('Range ' , 'bytes=1-4 ' );
134+
135+ $ this ->expectOutputString (file_get_contents (__DIR__ .'/File/Fixtures/test.gif ' ));
136+ $ response = clone $ response ;
137+ $ response ->prepare ($ request );
138+ $ response ->sendContent ();
139+
140+ $ this ->assertEquals (200 , $ response ->getStatusCode ());
141+ $ this ->assertNull ($ response ->headers ->get ('Content-Range ' ));
142+ }
143+
94144 /**
95145 * @dataProvider provideFullFileRanges
96146 */
0 commit comments