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

tomdesair / tus-java-server / 28704942481

04 Jul 2026 11:35AM UTC coverage: 92.355%. First build
28704942481

Pull #105

github

web-flow
Merge 94b11f46d into e8bbe6ae5
Pull Request #105: feat: Implement IETF Resumable Uploads for HTTP (RUFH) Protocol

866 of 1022 branches covered (84.74%)

Branch coverage included in aggregate %.

443 of 496 new or added lines in 24 files covered. (89.31%)

2263 of 2366 relevant lines covered (95.65%)

6.24 hits per line

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

83.33
/src/main/java/me/desair/tus/server/rufh/ResumableUploadsForHttpProtocol.java
1
package me.desair.tus.server.rufh;
2

3
import java.util.Arrays;
4
import java.util.Collection;
5
import java.util.List;
6
import me.desair.tus.server.HttpMethod;
7
import me.desair.tus.server.ProtocolVersion;
8
import me.desair.tus.server.RequestHandler;
9
import me.desair.tus.server.RequestValidator;
10
import me.desair.tus.server.rufh.handler.RufhAppendPatchRequestHandler;
11
import me.desair.tus.server.rufh.handler.RufhCreationPostRequestHandler;
12
import me.desair.tus.server.rufh.handler.RufhDeleteRequestHandler;
13
import me.desair.tus.server.rufh.handler.RufhErrorHandler;
14
import me.desair.tus.server.rufh.handler.RufhHeadRequestHandler;
15
import me.desair.tus.server.rufh.handler.RufhOptionsRequestHandler;
16
import me.desair.tus.server.rufh.validation.RufhAppendValidator;
17
import me.desair.tus.server.rufh.validation.RufhCreationValidator;
18
import me.desair.tus.server.rufh.validation.RufhHeadHeaderValidator;
19
import me.desair.tus.server.rufh.validation.RufhSafePathValidator;
20
import me.desair.tus.server.rufh.validation.RufhUploadExistsValidator;
21
import me.desair.tus.server.util.AbstractTusExtension;
22

23
/**
24
 * Protocol extension implementing the official IETF Resumable Uploads for HTTP specification
25
 * (draft-ietf-httpbis-resumable-upload:
26
 * https://datatracker.ietf.org/doc/draft-ietf-httpbis-resumable-upload/).
27
 *
28
 * <p>Delegates validation and request processing to modular {@link RequestValidator} and {@link
29
 * RequestHandler} implementations registered during initialization.
30
 */
31
public class ResumableUploadsForHttpProtocol extends AbstractTusExtension {
32

33
  public static final String EXTENSION_NAME = "resumable-uploads-for-http";
34

35
  private InterimResponseStrategy interimResponseStrategy = new NoOpInterimResponseStrategy();
10✔
36

37
  /** Construct a default ResumableUploadsForHttpProtocol extension instance. */
38
  public ResumableUploadsForHttpProtocol() {
39
    super();
4✔
40
  }
2✔
41

42
  /**
43
   * Configure an optional interim response strategy (e.g. for HTTP 104 interim responses).
44
   *
45
   * @param interimResponseStrategy The interim response strategy to use
46
   * @return Current extension instance for method chaining
47
   */
48
  public ResumableUploadsForHttpProtocol withInterimResponseStrategy(
49
      InterimResponseStrategy interimResponseStrategy) {
NEW
50
    if (interimResponseStrategy != null) {
×
NEW
51
      this.interimResponseStrategy = interimResponseStrategy;
×
52
    }
NEW
53
    return this;
×
54
  }
55

56
  @Override
57
  public String getName() {
58
    return EXTENSION_NAME;
4✔
59
  }
60

61
  @Override
62
  public Collection<HttpMethod> getMinimalSupportedHttpMethods() {
63
    return Arrays.asList(
48✔
64
        HttpMethod.OPTIONS, HttpMethod.HEAD, HttpMethod.POST, HttpMethod.PATCH, HttpMethod.DELETE);
65
  }
66

67
  @Override
68
  public boolean isApplicable(HttpMethod method, ProtocolVersion version) {
69
    if (HttpMethod.OPTIONS.equals(method)) {
8✔
70
      return true;
2✔
71
    }
72
    return version == ProtocolVersion.RUFH;
12✔
73
  }
74

75
  @Override
76
  protected void initValidators(List<RequestValidator> requestValidators) {
77
    requestValidators.add(new RufhSafePathValidator());
12✔
78
    requestValidators.add(new RufhUploadExistsValidator());
12✔
79
    requestValidators.add(new RufhHeadHeaderValidator());
12✔
80
    requestValidators.add(new RufhCreationValidator());
12✔
81
    requestValidators.add(new RufhAppendValidator());
12✔
82
  }
2✔
83

84
  @Override
85
  protected void initRequestHandlers(List<RequestHandler> requestHandlers) {
86
    requestHandlers.add(new RufhOptionsRequestHandler());
12✔
87
    requestHandlers.add(new RufhHeadRequestHandler());
12✔
88
    requestHandlers.add(new RufhCreationPostRequestHandler(interimResponseStrategy));
16✔
89
    requestHandlers.add(new RufhAppendPatchRequestHandler());
12✔
90
    requestHandlers.add(new RufhDeleteRequestHandler());
12✔
91
    requestHandlers.add(new RufhErrorHandler());
12✔
92
  }
2✔
93
}
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