• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tomdesair / tus-java-server / 29440737940

15 Jul 2026 06:29PM UTC coverage: 95.627% (+0.7%) from 94.883%
29440737940

Pull #105

github

web-flow
Merge 5236e49f9 into fd04a6140
Pull Request #105: WIP feat: Implement IETF Resumable Uploads for HTTP (RUFH) Protocol

1180 of 1292 branches covered (91.33%)

Branch coverage included in aggregate %.

770 of 781 new or added lines in 42 files covered. (98.59%)

4 existing lines in 2 files now uncovered.

2712 of 2778 relevant lines covered (97.62%)

6.37 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

78.79
/src/main/java/me/desair/tus/server/creationwithupload/CreationWithUploadPostRequestHandler.java
1
package me.desair.tus.server.creationwithupload;
2

3
import java.io.IOException;
4
import java.io.InputStream;
5
import me.desair.tus.server.HttpHeader;
6
import me.desair.tus.server.HttpMethod;
7
import me.desair.tus.server.exception.TusException;
8
import me.desair.tus.server.upload.UploadInfo;
9
import me.desair.tus.server.upload.UploadLockingService;
10
import me.desair.tus.server.upload.UploadStorageService;
11
import me.desair.tus.server.util.AbstractRequestHandler;
12
import me.desair.tus.server.util.InterruptibleInputStream;
13
import me.desair.tus.server.util.TusServletRequest;
14
import me.desair.tus.server.util.TusServletResponse;
15
import me.desair.tus.server.util.Utils;
16
import org.slf4j.Logger;
17
import org.slf4j.LoggerFactory;
18

19
/** Request handler to process the POST request body for the creation-with-upload extension. */
20
public class CreationWithUploadPostRequestHandler extends AbstractRequestHandler {
6✔
21

22
  private static final Logger log =
4✔
23
      LoggerFactory.getLogger(CreationWithUploadPostRequestHandler.class);
4✔
24

25
  @Override
26
  public boolean supports(HttpMethod method) {
27
    return HttpMethod.POST.equals(method);
8✔
28
  }
29

30
  @Override
31
  public void process(
32
      HttpMethod method,
33
      TusServletRequest servletRequest,
34
      TusServletResponse servletResponse,
35
      UploadStorageService uploadStorageService,
36
      String ownerKey)
37
      throws IOException, TusException {
38

39
    Long contentLength = Utils.getLongHeader(servletRequest, HttpHeader.CONTENT_LENGTH);
4✔
40
    if (contentLength != null && contentLength > 0) {
7✔
41
      String location = servletResponse.getHeader(HttpHeader.LOCATION);
4✔
42
      if (location != null) {
2!
43
        UploadInfo uploadInfo = uploadStorageService.getUploadInfo(location, ownerKey);
5✔
44
        if (uploadInfo != null && uploadInfo.isUploadInProgress()) {
5!
45
          InputStream stream = servletRequest.getContentInputStream();
3✔
46
          UploadLockingService lockingService =
2✔
47
              (UploadLockingService)
48
                  servletRequest.getAttribute("me.desair.tus.uploadLockingService");
3✔
49
          if (lockingService != null) {
2!
UNCOV
50
            InterruptibleInputStream interruptibleStream = new InterruptibleInputStream(stream);
×
UNCOV
51
            lockingService.registerInputStream(location, interruptibleStream);
×
UNCOV
52
            stream = interruptibleStream;
×
53
          }
54

55
          uploadInfo = uploadStorageService.append(uploadInfo, stream);
5✔
56

57
          servletResponse.setHeader(
4✔
58
              HttpHeader.UPLOAD_OFFSET, String.valueOf(uploadInfo.getOffset()));
2✔
59
        }
60
      }
61
    }
62
  }
1✔
63
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc