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

tomdesair / tus-java-server / 29038944497

09 Jul 2026 05:58PM UTC coverage: 94.883% (+0.07%) from 94.813%
29038944497

Pull #108

github

web-flow
Merge bf65a119c into e32c2e5b3
Pull Request #108: Implement creation-with-upload, CORS, and protocol compliance fixes

721 of 816 branches covered (88.36%)

Branch coverage included in aggregate %.

155 of 156 new or added lines in 19 files covered. (99.36%)

1 existing line in 1 file now uncovered.

1986 of 2037 relevant lines covered (97.5%)

6.66 hits per line

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

95.12
/src/main/java/me/desair/tus/server/util/TusServletResponse.java
1
package me.desair.tus.server.util;
2

3
import jakarta.servlet.http.HttpServletResponse;
4
import jakarta.servlet.http.HttpServletResponseWrapper;
5
import java.util.HashMap;
6
import java.util.LinkedList;
7
import java.util.List;
8
import java.util.Map;
9
import java.util.Objects;
10
import org.apache.commons.lang3.StringUtils;
11

12
/**
13
 * {@link HttpServletResponseWrapper} to capture header values set on the current {@link
14
 * HttpServletResponse}.
15
 */
16
public class TusServletResponse extends HttpServletResponseWrapper {
17

18
  private Map<String, List<String>> headers = new HashMap<>();
10✔
19

20
  /**
21
   * Constructs a response adaptor wrapping the given response.
22
   *
23
   * @param response The response that has to be wrapped
24
   * @throws IllegalArgumentException if the response is null
25
   */
26
  public TusServletResponse(HttpServletResponse response) {
27
    super(response);
6✔
28
  }
2✔
29

30
  @Override
31
  public void setDateHeader(String name, long date) {
32
    super.setDateHeader(name, date);
8✔
33
    overwriteHeader(name, Objects.toString(date));
12✔
34
  }
2✔
35

36
  @Override
37
  public void addDateHeader(String name, long date) {
38
    super.addDateHeader(name, date);
4✔
39
    recordHeader(name, Objects.toString(date));
6✔
40
  }
1✔
41

42
  @Override
43
  public void setHeader(String name, String value) {
44
    String sanitizedValue = sanitizeHeaderValue(value);
8✔
45
    super.setHeader(name, sanitizedValue);
8✔
46
    overwriteHeader(name, sanitizedValue);
8✔
47
  }
2✔
48

49
  @Override
50
  public void addHeader(String name, String value) {
51
    String sanitizedValue = sanitizeHeaderValue(value);
4✔
52
    super.addHeader(name, sanitizedValue);
4✔
53
    recordHeader(name, sanitizedValue);
4✔
54
  }
1✔
55

56
  @Override
57
  public void setIntHeader(String name, int value) {
58
    super.setIntHeader(name, value);
4✔
59
    overwriteHeader(name, Objects.toString(value));
6✔
60
  }
1✔
61

62
  @Override
63
  public void addIntHeader(String name, int value) {
64
    super.addIntHeader(name, value);
4✔
65
    recordHeader(name, Objects.toString(value));
6✔
66
  }
1✔
67

68
  @Override
69
  public String getHeader(String name) {
70
    String value;
71
    if (headers.containsKey(name)) {
10✔
72
      value = headers.get(name).get(0);
20✔
73
    } else {
74
      value = super.getHeader(name);
8✔
75
    }
76
    return StringUtils.trimToNull(value);
6✔
77
  }
78

79
  private void recordHeader(String name, String value) {
80
    List<String> values = headers.computeIfAbsent(name, k -> new LinkedList<>());
11✔
81
    values.add(value);
4✔
82
  }
1✔
83

84
  private void overwriteHeader(String name, String value) {
85
    List<String> values = new LinkedList<>();
8✔
86
    values.add(value);
8✔
87
    headers.put(name, values);
12✔
88
  }
2✔
89

90
  private String sanitizeHeaderValue(String value) {
91
    if (value == null) {
4!
UNCOV
92
      return null;
×
93
    }
94
    return value.replaceAll("[\r\n]", "");
10✔
95
  }
96
}
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