mirror of
https://github.com/samsonjs/media.git
synced 2026-04-03 10:55:48 +00:00
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
This commit is contained in:
parent
829282fa12
commit
39c65c658e
1 changed files with 159 additions and 59 deletions
|
|
@ -21,6 +21,7 @@ import static junit.framework.TestCase.fail;
|
|||
|
||||
import android.net.Uri;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import org.junit.Test;
|
||||
|
|
@ -31,108 +32,183 @@ import org.junit.runner.RunWith;
|
|||
public class DataSpecTest {
|
||||
|
||||
@Test
|
||||
public void createDataSpec_withDefaultValues_setsEmptyHttpRequestParameters() {
|
||||
public void createDataSpec_withDefaultValues() {
|
||||
Uri uri = Uri.parse("www.google.com");
|
||||
|
||||
DataSpec dataSpec = new DataSpec(uri);
|
||||
assertDefaultDataSpec(dataSpec, uri);
|
||||
|
||||
assertThat(dataSpec.httpRequestHeaders.isEmpty()).isTrue();
|
||||
dataSpec = new DataSpec(uri, /* flags= */ 0);
|
||||
assertDefaultDataSpec(dataSpec, uri);
|
||||
|
||||
dataSpec = new DataSpec(uri, /*flags= */ 0);
|
||||
assertThat(dataSpec.httpRequestHeaders.isEmpty()).isTrue();
|
||||
dataSpec = new DataSpec(uri, /* position= */ 0, C.LENGTH_UNSET, /* key= */ null);
|
||||
assertDefaultDataSpec(dataSpec, uri);
|
||||
|
||||
dataSpec =
|
||||
new DataSpec(uri, /* position= */ 0, C.LENGTH_UNSET, /* key= */ null, /* flags= */ 0);
|
||||
assertDefaultDataSpec(dataSpec, uri);
|
||||
|
||||
dataSpec =
|
||||
new DataSpec(
|
||||
uri,
|
||||
/* position= */ 0,
|
||||
/* length= */ C.LENGTH_UNSET,
|
||||
/* key= */ null,
|
||||
/* flags= */ 0,
|
||||
new HashMap<>());
|
||||
assertDefaultDataSpec(dataSpec, uri);
|
||||
|
||||
dataSpec =
|
||||
new DataSpec(
|
||||
uri,
|
||||
/* httpMethod= */ 0,
|
||||
/* httpBody= */ new byte[] {0, 0, 0, 0},
|
||||
/* absoluteStreamPosition= */ 0,
|
||||
/* position= */ 0,
|
||||
/* length= */ 1,
|
||||
/* key= */ "key",
|
||||
/* length= */ C.LENGTH_UNSET,
|
||||
null,
|
||||
/* flags= */ 0);
|
||||
assertThat(dataSpec.httpRequestHeaders.isEmpty()).isTrue();
|
||||
assertDefaultDataSpec(dataSpec, uri);
|
||||
|
||||
dataSpec =
|
||||
new DataSpec(
|
||||
uri,
|
||||
DataSpec.HTTP_METHOD_GET,
|
||||
/* httpBody= */ null,
|
||||
/* absoluteStreamPosition= */ 0,
|
||||
/* position= */ 0,
|
||||
/* length= */ C.LENGTH_UNSET,
|
||||
/* key= */ null,
|
||||
/* flags= */ 0);
|
||||
assertDefaultDataSpec(dataSpec, uri);
|
||||
|
||||
dataSpec =
|
||||
new DataSpec(
|
||||
uri,
|
||||
DataSpec.HTTP_METHOD_GET,
|
||||
/* httpBody= */ null,
|
||||
/* absoluteStreamPosition= */ 0,
|
||||
/* position= */ 0,
|
||||
/* length= */ C.LENGTH_UNSET,
|
||||
/* key= */ null,
|
||||
/* flags= */ 0,
|
||||
new HashMap<>());
|
||||
assertDefaultDataSpec(dataSpec, uri);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void createDataSpec_setsHttpRequestParameters() {
|
||||
Map<String, String> httpRequestParameters = new HashMap<>();
|
||||
httpRequestParameters.put("key1", "value1");
|
||||
httpRequestParameters.put("key2", "value2");
|
||||
httpRequestParameters.put("key3", "value3");
|
||||
public void createDataSpec_setsCustomValues() {
|
||||
Uri uri = Uri.parse("www.google.com");
|
||||
|
||||
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(3);
|
||||
|
||||
byte[] httpBody = new byte[] {0, 1, 2, 3};
|
||||
|
||||
DataSpec dataSpec =
|
||||
new DataSpec(
|
||||
Uri.parse("www.google.com"),
|
||||
/* httpMethod= */ 0,
|
||||
/* httpBody= */ new byte[] {0, 0, 0, 0},
|
||||
/* absoluteStreamPosition= */ 0,
|
||||
/* position= */ 0,
|
||||
/* length= */ 1,
|
||||
uri,
|
||||
DataSpec.HTTP_METHOD_POST,
|
||||
httpBody,
|
||||
/* absoluteStreamPosition= */ 200,
|
||||
/* position= */ 150,
|
||||
/* length= */ 5,
|
||||
/* key= */ "key",
|
||||
/* flags= */ 0,
|
||||
httpRequestParameters);
|
||||
/* flags= */ DataSpec.FLAG_ALLOW_GZIP,
|
||||
httpRequestHeaders);
|
||||
|
||||
assertThat(dataSpec.httpRequestHeaders).isEqualTo(httpRequestParameters);
|
||||
assertThat(dataSpec.uri).isEqualTo(uri);
|
||||
// uriPositionOffset = absoluteStreamPosition - position
|
||||
assertThat(dataSpec.uriPositionOffset).isEqualTo(50);
|
||||
assertThat(dataSpec.httpMethod).isEqualTo(DataSpec.HTTP_METHOD_POST);
|
||||
assertThat(dataSpec.httpBody).isEqualTo(httpBody);
|
||||
assertThat(dataSpec.httpRequestHeaders).isEqualTo(httpRequestHeaders);
|
||||
assertThat(dataSpec.absoluteStreamPosition).isEqualTo(200);
|
||||
assertThat(dataSpec.position).isEqualTo(150);
|
||||
assertThat(dataSpec.length).isEqualTo(5);
|
||||
assertThat(dataSpec.key).isEqualTo("key");
|
||||
assertThat(dataSpec.flags).isEqualTo(DataSpec.FLAG_ALLOW_GZIP);
|
||||
assertHttpRequestHeadersReadOnly(dataSpec);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void httpRequestParameters_areReadOnly() {
|
||||
public void createDataSpec_setsHttpMethodAndPostBody() {
|
||||
Uri uri = Uri.parse("www.google.com");
|
||||
|
||||
byte[] postBody = new byte[] {0, 1, 2, 3};
|
||||
DataSpec dataSpec =
|
||||
new DataSpec(
|
||||
Uri.parse("www.google.com"),
|
||||
/* httpMethod= */ 0,
|
||||
/* httpBody= */ new byte[] {0, 0, 0, 0},
|
||||
uri,
|
||||
postBody,
|
||||
/* absoluteStreamPosition= */ 0,
|
||||
/* position= */ 0,
|
||||
/* length= */ 1,
|
||||
/* key= */ "key",
|
||||
/* flags= */ 0,
|
||||
/* httpRequestHeaders= */ new HashMap<>());
|
||||
/* length= */ C.LENGTH_UNSET,
|
||||
/* key= */ null,
|
||||
/* flags= */ 0);
|
||||
assertThat(dataSpec.httpMethod).isEqualTo(DataSpec.HTTP_METHOD_POST);
|
||||
assertThat(dataSpec.httpBody).isEqualTo(postBody);
|
||||
|
||||
try {
|
||||
dataSpec.httpRequestHeaders.put("key", "value");
|
||||
fail();
|
||||
} catch (UnsupportedOperationException expected) {
|
||||
// Expected
|
||||
}
|
||||
postBody = new byte[0];
|
||||
dataSpec =
|
||||
new DataSpec(
|
||||
uri,
|
||||
postBody,
|
||||
/* absoluteStreamPosition= */ 0,
|
||||
/* position= */ 0,
|
||||
/* length= */ C.LENGTH_UNSET,
|
||||
/* key= */ null,
|
||||
/* flags= */ 0);
|
||||
assertThat(dataSpec.httpMethod).isEqualTo(DataSpec.HTTP_METHOD_POST);
|
||||
assertThat(dataSpec.httpBody).isNull();
|
||||
|
||||
postBody = null;
|
||||
dataSpec =
|
||||
new DataSpec(
|
||||
uri,
|
||||
postBody,
|
||||
/* absoluteStreamPosition= */ 0,
|
||||
/* position= */ 0,
|
||||
/* length= */ C.LENGTH_UNSET,
|
||||
/* key= */ null,
|
||||
/* flags= */ 0);
|
||||
assertThat(dataSpec.httpMethod).isEqualTo(DataSpec.HTTP_METHOD_GET);
|
||||
assertThat(dataSpec.httpBody).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withUri_copiesHttpRequestHeaders() {
|
||||
Map<String, String> httpRequestProperties = createRequestProperties(5);
|
||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
|
||||
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
|
||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
|
||||
|
||||
DataSpec dataSpecCopy = dataSpec.withUri(Uri.parse("www.new-uri.com"));
|
||||
|
||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestProperties);
|
||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestHeaders);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void subrange_copiesHttpRequestHeaders() {
|
||||
Map<String, String> httpRequestProperties = createRequestProperties(5);
|
||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
|
||||
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
|
||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
|
||||
|
||||
DataSpec dataSpecCopy = dataSpec.subrange(2);
|
||||
|
||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestProperties);
|
||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestHeaders);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void subrange_withOffsetAndLength_copiesHttpRequestHeaders() {
|
||||
Map<String, String> httpRequestProperties = createRequestProperties(5);
|
||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
|
||||
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
|
||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
|
||||
|
||||
DataSpec dataSpecCopy = dataSpec.subrange(2, 2);
|
||||
|
||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestProperties);
|
||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestHeaders);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withRequestHeaders_setsCorrectHeaders() {
|
||||
Map<String, String> httpRequestProperties = createRequestProperties(5);
|
||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
|
||||
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
|
||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
|
||||
|
||||
Map<String, String> newRequestHeaders = createRequestProperties(5, 10);
|
||||
Map<String, String> newRequestHeaders = createHttpRequestHeaders(5, 10);
|
||||
DataSpec dataSpecCopy = dataSpec.withRequestHeaders(newRequestHeaders);
|
||||
|
||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(newRequestHeaders);
|
||||
|
|
@ -140,13 +216,13 @@ public class DataSpecTest {
|
|||
|
||||
@Test
|
||||
public void withAdditionalHeaders_setsCorrectHeaders() {
|
||||
Map<String, String> httpRequestProperties = createRequestProperties(5);
|
||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
|
||||
Map<String, String> additionalHeaders = createRequestProperties(5, 10);
|
||||
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
|
||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
|
||||
Map<String, String> additionalHeaders = createHttpRequestHeaders(5, 10);
|
||||
// additionalHeaders may overwrite a header key
|
||||
String existingKey = httpRequestProperties.keySet().iterator().next();
|
||||
String existingKey = httpRequestHeaders.keySet().iterator().next();
|
||||
additionalHeaders.put(existingKey, "overwritten");
|
||||
Map<String, String> expectedHeaders = new HashMap<>(httpRequestProperties);
|
||||
Map<String, String> expectedHeaders = new HashMap<>(httpRequestHeaders);
|
||||
expectedHeaders.putAll(additionalHeaders);
|
||||
|
||||
DataSpec dataSpecCopy = dataSpec.withAdditionalHeaders(additionalHeaders);
|
||||
|
|
@ -154,11 +230,11 @@ public class DataSpecTest {
|
|||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(expectedHeaders);
|
||||
}
|
||||
|
||||
private static Map<String, String> createRequestProperties(int howMany) {
|
||||
return createRequestProperties(0, howMany);
|
||||
private static Map<String, String> createHttpRequestHeaders(int howMany) {
|
||||
return createHttpRequestHeaders(0, howMany);
|
||||
}
|
||||
|
||||
private static Map<String, String> createRequestProperties(int from, int to) {
|
||||
private static Map<String, String> createHttpRequestHeaders(int from, int to) {
|
||||
assertThat(from).isLessThan(to);
|
||||
|
||||
Map<String, String> httpRequestParameters = new HashMap<>();
|
||||
|
|
@ -169,7 +245,7 @@ public class DataSpecTest {
|
|||
return httpRequestParameters;
|
||||
}
|
||||
|
||||
private static DataSpec createDataSpecWithHeaders(Map<String, String> httpRequestProperties) {
|
||||
private static DataSpec createDataSpecWithHeaders(Map<String, String> httpRequestHeaders) {
|
||||
return new DataSpec(
|
||||
Uri.parse("www.google.com"),
|
||||
/* httpMethod= */ 0,
|
||||
|
|
@ -179,6 +255,30 @@ public class DataSpecTest {
|
|||
/* length= */ 1,
|
||||
/* key= */ "key",
|
||||
/* flags= */ 0,
|
||||
httpRequestProperties);
|
||||
httpRequestHeaders);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private static void assertDefaultDataSpec(DataSpec dataSpec, Uri uri) {
|
||||
assertThat(dataSpec.uri).isEqualTo(uri);
|
||||
assertThat(dataSpec.uriPositionOffset).isEqualTo(0);
|
||||
assertThat(dataSpec.httpMethod).isEqualTo(DataSpec.HTTP_METHOD_GET);
|
||||
assertThat(dataSpec.httpBody).isNull();
|
||||
assertThat(dataSpec.httpRequestHeaders).isEmpty();
|
||||
assertThat(dataSpec.absoluteStreamPosition).isEqualTo(0);
|
||||
assertThat(dataSpec.position).isEqualTo(0);
|
||||
assertThat(dataSpec.length).isEqualTo(C.LENGTH_UNSET);
|
||||
assertThat(dataSpec.key).isNull();
|
||||
assertThat(dataSpec.flags).isEqualTo(0);
|
||||
assertHttpRequestHeadersReadOnly(dataSpec);
|
||||
}
|
||||
|
||||
private static void assertHttpRequestHeadersReadOnly(DataSpec dataSpec) {
|
||||
try {
|
||||
dataSpec.httpRequestHeaders.put("key", "value");
|
||||
fail();
|
||||
} catch (UnsupportedOperationException expected) {
|
||||
// Expected
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue