content getting int test

This commit is contained in:
xis 2023-10-16 16:50:36 +02:00
parent 5c54067cdb
commit e7332d94b3
4 changed files with 35 additions and 17 deletions

View file

@ -1,26 +1,40 @@
package net.schowek.nextclouddlna.controller package net.schowek.nextclouddlna.controller
import net.schowek.nextclouddlna.nextcloud.content.ContentTreeProvider
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.HttpStatus import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity import org.springframework.http.ResponseEntity
import support.IntegrationSpecification import support.IntegrationSpecification
class ContentControllerIntTest extends IntegrationSpecification { class ContentControllerIntTest extends IntegrationSpecification {
@Autowired
ContentTreeProvider contentTreeProvider
def "should serve nextcloud files"() {
given:
def items = contentTreeProvider.tree.items
def "should process GET request for content"() {
when: when:
ResponseEntity<byte[]> response = restTemplate().getForEntity(urlWithPort("/c/16"), byte[]); Map<Integer, ResponseEntity<byte[]>> results = items.keySet().collectEntries() {
[Integer.valueOf(it), restTemplate().getForEntity(urlWithPort("/c/$it"), byte[])]
}
then: then:
response.statusCode == HttpStatus.OK items.values().each { item ->
with(response.headers.each { it.key.toLowerCase() }) { assert results.containsKey(item.id)
assert it['content-type'] == ['image/jpeg'] with(results.get(item.id)) { response ->
assert it['accept-ranges'] == ["bytes"] response.statusCode == HttpStatus.OK
assert it.containsKey('contentfeatures.dlna.org') with(response.headers.each { it.key.toLowerCase() }) {
assert it.containsKey('transfermode.dlna.org') assert it['content-type'] == [item.format.mime]
assert it.containsKey('realtimeinfo.dlna.org') assert it['accept-ranges'] == ["bytes"]
assert it.containsKey('contentfeatures.dlna.org')
assert it.containsKey('transfermode.dlna.org')
assert it.containsKey('realtimeinfo.dlna.org')
}
response.body.length == item.fileLength
}
} }
response.body.length == 593508
} }
def "should return 404 if content does not exist"() { def "should return 404 if content does not exist"() {

View file

@ -29,6 +29,10 @@ class IntegrationSpecification extends Specification {
@Autowired @Autowired
private ServerInfoProvider serverInfoProvider private ServerInfoProvider serverInfoProvider
def setup() {
System.err.println("SETUP PARENT")
}
protected String urlWithPort(String uri = "") { protected String urlWithPort(String uri = "") {
return "http://localhost:" + serverInfoProvider.port + uri; return "http://localhost:" + serverInfoProvider.port + uri;
} }

View file

@ -43,11 +43,11 @@ INSERT INTO `oc_filecache` VALUES
(155,2,'appdata_integration/preview/c/5/1/c/e/4/1/14','bb5cbf8f27a56a12e83245d5532d0381',271,'14',2,1,107111,1696697008,1696697008,0,0,'',31,''), (155,2,'appdata_integration/preview/c/5/1/c/e/4/1/14','bb5cbf8f27a56a12e83245d5532d0381',271,'14',2,1,107111,1696697008,1696697008,0,0,'',31,''),
(164,2,'appdata_integration/preview/c/5/1/c/e/4/1/14/500-500-max.png','15b68a8c62dab8e7c3773ce0d1ac4f43',155,'500-500-max.png',11,10,50545,1695737792,1695737792,0,0,'',27,''), (164,2,'appdata_integration/preview/c/5/1/c/e/4/1/14/500-500-max.png','15b68a8c62dab8e7c3773ce0d1ac4f43',155,'500-500-max.png',11,10,50545,1695737792,1695737792,0,0,'',27,''),
(803,2,'appdata_integration/preview/c/7/4/d/9/7/b/16','71e9a2780187bcba09819c38341af594',271,'16',2,1,129292,1696698525,1696698525,0,0,'',31,''), (803,2,'appdata_integration/preview/c/5/1/c/e/4/1/16','71e9a2780187bcba09819c38341af594',271,'16',2,1,129292,1696698525,1696698525,0,0,'',31,''),
(804,2,'appdata_integration/preview/c/7/4/d/9/7/b/16/1000-667-max.jpg','c6df2f52ea6e2bce26b0c0c9cb99b7a5',803,'1000-667-max.jpg',12,10,81421,1696698525,1696698525,0,0,'',27,''), (804,2,'appdata_integration/preview/c/5/1/c/e/4/1/16/1000-667-max.jpg','c6df2f52ea6e2bce26b0c0c9cb99b7a5',803,'1000-667-max.jpg',12,10,81421,1696698525,1696698525,0,0,'',27,''),
(811,2,'appdata_integration/preview/7/0/e/f/d/f/2/17','9fbd157aa2c41b17eb7ec32e9f93551f',271,'17',2,1,84401,1696698525,1696698525,0,0,'',31,''), (811,2,'appdata_integration/preview/c/5/1/c/e/4/1/17','9fbd157aa2c41b17eb7ec32e9f93551f',271,'17',2,1,84401,1696698525,1696698525,0,0,'',31,''),
(812,2,'appdata_integration/preview/7/0/e/f/d/f/2/17/1000-667-max.jpg','351f42173986513e412dbcc450bd4b19',811,'1000-667-max.jpg',12,10,53672,1696698525,1696698525,0,0,'',27,''); (812,2,'appdata_integration/preview/c/5/1/c/e/4/1/17/1000-667-max.jpg','351f42173986513e412dbcc450bd4b19',811,'1000-667-max.jpg',12,10,53672,1696698525,1696698525,0,0,'',27,'');
INSERT INTO `oc_group_folders` VALUES INSERT INTO `oc_group_folders` VALUES
(1,'family folder',-3,0); (1,'family folder',-3,0);

View file

@ -35,11 +35,11 @@ class ContentController(
): ResponseEntity<FileSystemResource> { ): ResponseEntity<FileSystemResource> {
return contentTreeProvider.getItem(id)?.let { item -> return contentTreeProvider.getItem(id)?.let { item ->
if (!request.getHeaders("range").hasMoreElements()) { if (!request.getHeaders("range").hasMoreElements()) {
logger.info("Serving content {} {}", request.method, id) logger.info("Serving content ${request.method} $id")
} }
val fileSystemResource = FileSystemResource(item.path) val fileSystemResource = FileSystemResource(item.path)
if (!fileSystemResource.exists()) { if (!fileSystemResource.exists()) {
logger.info("Could not find file for item id: {}", id) logger.info("Could not find file ${fileSystemResource.path} for item id: $id")
ResponseEntity(HttpStatus.NOT_FOUND) ResponseEntity(HttpStatus.NOT_FOUND)
} else { } else {
response.addHeader("Content-Type", item.format.mime) response.addHeader("Content-Type", item.format.mime)
@ -49,7 +49,7 @@ class ContentController(
ResponseEntity(fileSystemResource, HttpStatus.OK) ResponseEntity(fileSystemResource, HttpStatus.OK)
} }
} ?: let { } ?: let {
logger.info("Could not find item id: {}", id) logger.info("Could not find item id: $id")
ResponseEntity(HttpStatus.NOT_FOUND) ResponseEntity(HttpStatus.NOT_FOUND)
} }
} }