Skip to content

Commit 39c65c6

Browse files
committed
DataSpec: Make DataSpecTest more useful
- Replace tests specific to HTTP request headers with tests that more generally test constructor correctness. - Add test specifically around the constructor that infers the HTTP method from postBody, since that's a non-trivial bit of constructor logic. Note: In general, I'm not sure this type of test (i.e., testing a bit of trivial copying through a constructor) is worth the cost of writing and maintaining them. That said, checking the new uriPositionOffset is calculated correctly is non-trivial, as is the HTTP method inference, so keeping them for now. PiperOrigin-RevId: 294488684
1 parent 829282f commit 39c65c6

File tree

1 file changed

+160
-60
lines changed

1 file changed

+160
-60
lines changed

library/common/src/test/java/com/google/android/exoplayer2/upstream/DataSpecTest.java

+160-60
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import android.net.Uri;
2323
import androidx.test.ext.junit.runners.AndroidJUnit4;
24+
import com.google.android.exoplayer2.C;
2425
import java.util.HashMap;
2526
import java.util.Map;
2627
import org.junit.Test;
@@ -31,134 +32,209 @@
3132
public class DataSpecTest {
3233

3334
@Test
34-
public void createDataSpec_withDefaultValues_setsEmptyHttpRequestParameters() {
35+
public void createDataSpec_withDefaultValues() {
3536
Uri uri = Uri.parse("www.google.com");
37+
3638
DataSpec dataSpec = new DataSpec(uri);
39+
assertDefaultDataSpec(dataSpec, uri);
40+
41+
dataSpec = new DataSpec(uri, /* flags= */ 0);
42+
assertDefaultDataSpec(dataSpec, uri);
3743

38-
assertThat(dataSpec.httpRequestHeaders.isEmpty()).isTrue();
44+
dataSpec = new DataSpec(uri, /* position= */ 0, C.LENGTH_UNSET, /* key= */ null);
45+
assertDefaultDataSpec(dataSpec, uri);
3946

40-
dataSpec = new DataSpec(uri, /*flags= */ 0);
41-
assertThat(dataSpec.httpRequestHeaders.isEmpty()).isTrue();
47+
dataSpec =
48+
new DataSpec(uri, /* position= */ 0, C.LENGTH_UNSET, /* key= */ null, /* flags= */ 0);
49+
assertDefaultDataSpec(dataSpec, uri);
50+
51+
dataSpec =
52+
new DataSpec(
53+
uri,
54+
/* position= */ 0,
55+
/* length= */ C.LENGTH_UNSET,
56+
/* key= */ null,
57+
/* flags= */ 0,
58+
new HashMap<>());
59+
assertDefaultDataSpec(dataSpec, uri);
4260

4361
dataSpec =
4462
new DataSpec(
4563
uri,
46-
/* httpMethod= */ 0,
47-
/* httpBody= */ new byte[] {0, 0, 0, 0},
4864
/* absoluteStreamPosition= */ 0,
4965
/* position= */ 0,
50-
/* length= */ 1,
51-
/* key= */ "key",
66+
/* length= */ C.LENGTH_UNSET,
67+
null,
5268
/* flags= */ 0);
53-
assertThat(dataSpec.httpRequestHeaders.isEmpty()).isTrue();
54-
}
69+
assertDefaultDataSpec(dataSpec, uri);
5570

56-
@Test
57-
public void createDataSpec_setsHttpRequestParameters() {
58-
Map<String, String> httpRequestParameters = new HashMap<>();
59-
httpRequestParameters.put("key1", "value1");
60-
httpRequestParameters.put("key2", "value2");
61-
httpRequestParameters.put("key3", "value3");
71+
dataSpec =
72+
new DataSpec(
73+
uri,
74+
DataSpec.HTTP_METHOD_GET,
75+
/* httpBody= */ null,
76+
/* absoluteStreamPosition= */ 0,
77+
/* position= */ 0,
78+
/* length= */ C.LENGTH_UNSET,
79+
/* key= */ null,
80+
/* flags= */ 0);
81+
assertDefaultDataSpec(dataSpec, uri);
6282

63-
DataSpec dataSpec =
83+
dataSpec =
6484
new DataSpec(
65-
Uri.parse("www.google.com"),
66-
/* httpMethod= */ 0,
67-
/* httpBody= */ new byte[] {0, 0, 0, 0},
85+
uri,
86+
DataSpec.HTTP_METHOD_GET,
87+
/* httpBody= */ null,
6888
/* absoluteStreamPosition= */ 0,
6989
/* position= */ 0,
70-
/* length= */ 1,
71-
/* key= */ "key",
90+
/* length= */ C.LENGTH_UNSET,
91+
/* key= */ null,
7292
/* flags= */ 0,
73-
httpRequestParameters);
93+
new HashMap<>());
94+
assertDefaultDataSpec(dataSpec, uri);
95+
}
7496

75-
assertThat(dataSpec.httpRequestHeaders).isEqualTo(httpRequestParameters);
97+
@SuppressWarnings("deprecation")
98+
@Test
99+
public void createDataSpec_setsCustomValues() {
100+
Uri uri = Uri.parse("www.google.com");
101+
102+
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(3);
103+
104+
byte[] httpBody = new byte[] {0, 1, 2, 3};
105+
106+
DataSpec dataSpec =
107+
new DataSpec(
108+
uri,
109+
DataSpec.HTTP_METHOD_POST,
110+
httpBody,
111+
/* absoluteStreamPosition= */ 200,
112+
/* position= */ 150,
113+
/* length= */ 5,
114+
/* key= */ "key",
115+
/* flags= */ DataSpec.FLAG_ALLOW_GZIP,
116+
httpRequestHeaders);
117+
118+
assertThat(dataSpec.uri).isEqualTo(uri);
119+
// uriPositionOffset = absoluteStreamPosition - position
120+
assertThat(dataSpec.uriPositionOffset).isEqualTo(50);
121+
assertThat(dataSpec.httpMethod).isEqualTo(DataSpec.HTTP_METHOD_POST);
122+
assertThat(dataSpec.httpBody).isEqualTo(httpBody);
123+
assertThat(dataSpec.httpRequestHeaders).isEqualTo(httpRequestHeaders);
124+
assertThat(dataSpec.absoluteStreamPosition).isEqualTo(200);
125+
assertThat(dataSpec.position).isEqualTo(150);
126+
assertThat(dataSpec.length).isEqualTo(5);
127+
assertThat(dataSpec.key).isEqualTo("key");
128+
assertThat(dataSpec.flags).isEqualTo(DataSpec.FLAG_ALLOW_GZIP);
129+
assertHttpRequestHeadersReadOnly(dataSpec);
76130
}
77131

78132
@Test
79-
public void httpRequestParameters_areReadOnly() {
133+
public void createDataSpec_setsHttpMethodAndPostBody() {
134+
Uri uri = Uri.parse("www.google.com");
135+
136+
byte[] postBody = new byte[] {0, 1, 2, 3};
80137
DataSpec dataSpec =
81138
new DataSpec(
82-
Uri.parse("www.google.com"),
83-
/* httpMethod= */ 0,
84-
/* httpBody= */ new byte[] {0, 0, 0, 0},
139+
uri,
140+
postBody,
85141
/* absoluteStreamPosition= */ 0,
86142
/* position= */ 0,
87-
/* length= */ 1,
88-
/* key= */ "key",
89-
/* flags= */ 0,
90-
/* httpRequestHeaders= */ new HashMap<>());
143+
/* length= */ C.LENGTH_UNSET,
144+
/* key= */ null,
145+
/* flags= */ 0);
146+
assertThat(dataSpec.httpMethod).isEqualTo(DataSpec.HTTP_METHOD_POST);
147+
assertThat(dataSpec.httpBody).isEqualTo(postBody);
91148

92-
try {
93-
dataSpec.httpRequestHeaders.put("key", "value");
94-
fail();
95-
} catch (UnsupportedOperationException expected) {
96-
// Expected
97-
}
149+
postBody = new byte[0];
150+
dataSpec =
151+
new DataSpec(
152+
uri,
153+
postBody,
154+
/* absoluteStreamPosition= */ 0,
155+
/* position= */ 0,
156+
/* length= */ C.LENGTH_UNSET,
157+
/* key= */ null,
158+
/* flags= */ 0);
159+
assertThat(dataSpec.httpMethod).isEqualTo(DataSpec.HTTP_METHOD_POST);
160+
assertThat(dataSpec.httpBody).isNull();
161+
162+
postBody = null;
163+
dataSpec =
164+
new DataSpec(
165+
uri,
166+
postBody,
167+
/* absoluteStreamPosition= */ 0,
168+
/* position= */ 0,
169+
/* length= */ C.LENGTH_UNSET,
170+
/* key= */ null,
171+
/* flags= */ 0);
172+
assertThat(dataSpec.httpMethod).isEqualTo(DataSpec.HTTP_METHOD_GET);
173+
assertThat(dataSpec.httpBody).isNull();
98174
}
99175

100176
@Test
101177
public void withUri_copiesHttpRequestHeaders() {
102-
Map<String, String> httpRequestProperties = createRequestProperties(5);
103-
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
178+
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
179+
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
104180

105181
DataSpec dataSpecCopy = dataSpec.withUri(Uri.parse("www.new-uri.com"));
106182

107-
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestProperties);
183+
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestHeaders);
108184
}
109185

110186
@Test
111187
public void subrange_copiesHttpRequestHeaders() {
112-
Map<String, String> httpRequestProperties = createRequestProperties(5);
113-
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
188+
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
189+
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
114190

115191
DataSpec dataSpecCopy = dataSpec.subrange(2);
116192

117-
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestProperties);
193+
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestHeaders);
118194
}
119195

120196
@Test
121197
public void subrange_withOffsetAndLength_copiesHttpRequestHeaders() {
122-
Map<String, String> httpRequestProperties = createRequestProperties(5);
123-
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
198+
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
199+
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
124200

125201
DataSpec dataSpecCopy = dataSpec.subrange(2, 2);
126202

127-
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestProperties);
203+
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestHeaders);
128204
}
129205

130206
@Test
131207
public void withRequestHeaders_setsCorrectHeaders() {
132-
Map<String, String> httpRequestProperties = createRequestProperties(5);
133-
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
208+
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
209+
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
134210

135-
Map<String, String> newRequestHeaders = createRequestProperties(5, 10);
211+
Map<String, String> newRequestHeaders = createHttpRequestHeaders(5, 10);
136212
DataSpec dataSpecCopy = dataSpec.withRequestHeaders(newRequestHeaders);
137213

138214
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(newRequestHeaders);
139215
}
140216

141217
@Test
142218
public void withAdditionalHeaders_setsCorrectHeaders() {
143-
Map<String, String> httpRequestProperties = createRequestProperties(5);
144-
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
145-
Map<String, String> additionalHeaders = createRequestProperties(5, 10);
219+
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
220+
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
221+
Map<String, String> additionalHeaders = createHttpRequestHeaders(5, 10);
146222
// additionalHeaders may overwrite a header key
147-
String existingKey = httpRequestProperties.keySet().iterator().next();
223+
String existingKey = httpRequestHeaders.keySet().iterator().next();
148224
additionalHeaders.put(existingKey, "overwritten");
149-
Map<String, String> expectedHeaders = new HashMap<>(httpRequestProperties);
225+
Map<String, String> expectedHeaders = new HashMap<>(httpRequestHeaders);
150226
expectedHeaders.putAll(additionalHeaders);
151227

152228
DataSpec dataSpecCopy = dataSpec.withAdditionalHeaders(additionalHeaders);
153229

154230
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(expectedHeaders);
155231
}
156232

157-
private static Map<String, String> createRequestProperties(int howMany) {
158-
return createRequestProperties(0, howMany);
233+
private static Map<String, String> createHttpRequestHeaders(int howMany) {
234+
return createHttpRequestHeaders(0, howMany);
159235
}
160236

161-
private static Map<String, String> createRequestProperties(int from, int to) {
237+
private static Map<String, String> createHttpRequestHeaders(int from, int to) {
162238
assertThat(from).isLessThan(to);
163239

164240
Map<String, String> httpRequestParameters = new HashMap<>();
@@ -169,7 +245,7 @@ private static Map<String, String> createRequestProperties(int from, int to) {
169245
return httpRequestParameters;
170246
}
171247

172-
private static DataSpec createDataSpecWithHeaders(Map<String, String> httpRequestProperties) {
248+
private static DataSpec createDataSpecWithHeaders(Map<String, String> httpRequestHeaders) {
173249
return new DataSpec(
174250
Uri.parse("www.google.com"),
175251
/* httpMethod= */ 0,
@@ -179,6 +255,30 @@ private static DataSpec createDataSpecWithHeaders(Map<String, String> httpReques
179255
/* length= */ 1,
180256
/* key= */ "key",
181257
/* flags= */ 0,
182-
httpRequestProperties);
258+
httpRequestHeaders);
259+
}
260+
261+
@SuppressWarnings("deprecation")
262+
private static void assertDefaultDataSpec(DataSpec dataSpec, Uri uri) {
263+
assertThat(dataSpec.uri).isEqualTo(uri);
264+
assertThat(dataSpec.uriPositionOffset).isEqualTo(0);
265+
assertThat(dataSpec.httpMethod).isEqualTo(DataSpec.HTTP_METHOD_GET);
266+
assertThat(dataSpec.httpBody).isNull();
267+
assertThat(dataSpec.httpRequestHeaders).isEmpty();
268+
assertThat(dataSpec.absoluteStreamPosition).isEqualTo(0);
269+
assertThat(dataSpec.position).isEqualTo(0);
270+
assertThat(dataSpec.length).isEqualTo(C.LENGTH_UNSET);
271+
assertThat(dataSpec.key).isNull();
272+
assertThat(dataSpec.flags).isEqualTo(0);
273+
assertHttpRequestHeadersReadOnly(dataSpec);
274+
}
275+
276+
private static void assertHttpRequestHeadersReadOnly(DataSpec dataSpec) {
277+
try {
278+
dataSpec.httpRequestHeaders.put("key", "value");
279+
fail();
280+
} catch (UnsupportedOperationException expected) {
281+
// Expected
282+
}
183283
}
184284
}

0 commit comments

Comments
 (0)