mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +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 android.net.Uri;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import com.google.android.exoplayer2.C;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
@ -31,108 +32,183 @@ import org.junit.runner.RunWith;
|
||||||
public class DataSpecTest {
|
public class DataSpecTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void createDataSpec_withDefaultValues_setsEmptyHttpRequestParameters() {
|
public void createDataSpec_withDefaultValues() {
|
||||||
Uri uri = Uri.parse("www.google.com");
|
Uri uri = Uri.parse("www.google.com");
|
||||||
|
|
||||||
DataSpec dataSpec = new DataSpec(uri);
|
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);
|
dataSpec = new DataSpec(uri, /* position= */ 0, C.LENGTH_UNSET, /* key= */ null);
|
||||||
assertThat(dataSpec.httpRequestHeaders.isEmpty()).isTrue();
|
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 =
|
dataSpec =
|
||||||
new DataSpec(
|
new DataSpec(
|
||||||
uri,
|
uri,
|
||||||
/* httpMethod= */ 0,
|
|
||||||
/* httpBody= */ new byte[] {0, 0, 0, 0},
|
|
||||||
/* absoluteStreamPosition= */ 0,
|
/* absoluteStreamPosition= */ 0,
|
||||||
/* position= */ 0,
|
/* position= */ 0,
|
||||||
/* length= */ 1,
|
/* length= */ C.LENGTH_UNSET,
|
||||||
/* key= */ "key",
|
null,
|
||||||
/* flags= */ 0);
|
/* 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
|
@Test
|
||||||
public void createDataSpec_setsHttpRequestParameters() {
|
public void createDataSpec_setsCustomValues() {
|
||||||
Map<String, String> httpRequestParameters = new HashMap<>();
|
Uri uri = Uri.parse("www.google.com");
|
||||||
httpRequestParameters.put("key1", "value1");
|
|
||||||
httpRequestParameters.put("key2", "value2");
|
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(3);
|
||||||
httpRequestParameters.put("key3", "value3");
|
|
||||||
|
byte[] httpBody = new byte[] {0, 1, 2, 3};
|
||||||
|
|
||||||
DataSpec dataSpec =
|
DataSpec dataSpec =
|
||||||
new DataSpec(
|
new DataSpec(
|
||||||
Uri.parse("www.google.com"),
|
uri,
|
||||||
/* httpMethod= */ 0,
|
DataSpec.HTTP_METHOD_POST,
|
||||||
/* httpBody= */ new byte[] {0, 0, 0, 0},
|
httpBody,
|
||||||
/* absoluteStreamPosition= */ 0,
|
/* absoluteStreamPosition= */ 200,
|
||||||
/* position= */ 0,
|
/* position= */ 150,
|
||||||
/* length= */ 1,
|
/* length= */ 5,
|
||||||
/* key= */ "key",
|
/* key= */ "key",
|
||||||
/* flags= */ 0,
|
/* flags= */ DataSpec.FLAG_ALLOW_GZIP,
|
||||||
httpRequestParameters);
|
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
|
@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 =
|
DataSpec dataSpec =
|
||||||
new DataSpec(
|
new DataSpec(
|
||||||
Uri.parse("www.google.com"),
|
uri,
|
||||||
/* httpMethod= */ 0,
|
postBody,
|
||||||
/* httpBody= */ new byte[] {0, 0, 0, 0},
|
|
||||||
/* absoluteStreamPosition= */ 0,
|
/* absoluteStreamPosition= */ 0,
|
||||||
/* position= */ 0,
|
/* position= */ 0,
|
||||||
/* length= */ 1,
|
/* length= */ C.LENGTH_UNSET,
|
||||||
/* key= */ "key",
|
/* key= */ null,
|
||||||
/* flags= */ 0,
|
/* flags= */ 0);
|
||||||
/* httpRequestHeaders= */ new HashMap<>());
|
assertThat(dataSpec.httpMethod).isEqualTo(DataSpec.HTTP_METHOD_POST);
|
||||||
|
assertThat(dataSpec.httpBody).isEqualTo(postBody);
|
||||||
|
|
||||||
try {
|
postBody = new byte[0];
|
||||||
dataSpec.httpRequestHeaders.put("key", "value");
|
dataSpec =
|
||||||
fail();
|
new DataSpec(
|
||||||
} catch (UnsupportedOperationException expected) {
|
uri,
|
||||||
// Expected
|
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
|
@Test
|
||||||
public void withUri_copiesHttpRequestHeaders() {
|
public void withUri_copiesHttpRequestHeaders() {
|
||||||
Map<String, String> httpRequestProperties = createRequestProperties(5);
|
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
|
||||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
|
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
|
||||||
|
|
||||||
DataSpec dataSpecCopy = dataSpec.withUri(Uri.parse("www.new-uri.com"));
|
DataSpec dataSpecCopy = dataSpec.withUri(Uri.parse("www.new-uri.com"));
|
||||||
|
|
||||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestProperties);
|
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestHeaders);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void subrange_copiesHttpRequestHeaders() {
|
public void subrange_copiesHttpRequestHeaders() {
|
||||||
Map<String, String> httpRequestProperties = createRequestProperties(5);
|
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
|
||||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
|
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
|
||||||
|
|
||||||
DataSpec dataSpecCopy = dataSpec.subrange(2);
|
DataSpec dataSpecCopy = dataSpec.subrange(2);
|
||||||
|
|
||||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestProperties);
|
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestHeaders);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void subrange_withOffsetAndLength_copiesHttpRequestHeaders() {
|
public void subrange_withOffsetAndLength_copiesHttpRequestHeaders() {
|
||||||
Map<String, String> httpRequestProperties = createRequestProperties(5);
|
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
|
||||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
|
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
|
||||||
|
|
||||||
DataSpec dataSpecCopy = dataSpec.subrange(2, 2);
|
DataSpec dataSpecCopy = dataSpec.subrange(2, 2);
|
||||||
|
|
||||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestProperties);
|
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(httpRequestHeaders);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void withRequestHeaders_setsCorrectHeaders() {
|
public void withRequestHeaders_setsCorrectHeaders() {
|
||||||
Map<String, String> httpRequestProperties = createRequestProperties(5);
|
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
|
||||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
|
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
|
||||||
|
|
||||||
Map<String, String> newRequestHeaders = createRequestProperties(5, 10);
|
Map<String, String> newRequestHeaders = createHttpRequestHeaders(5, 10);
|
||||||
DataSpec dataSpecCopy = dataSpec.withRequestHeaders(newRequestHeaders);
|
DataSpec dataSpecCopy = dataSpec.withRequestHeaders(newRequestHeaders);
|
||||||
|
|
||||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(newRequestHeaders);
|
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(newRequestHeaders);
|
||||||
|
|
@ -140,13 +216,13 @@ public class DataSpecTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void withAdditionalHeaders_setsCorrectHeaders() {
|
public void withAdditionalHeaders_setsCorrectHeaders() {
|
||||||
Map<String, String> httpRequestProperties = createRequestProperties(5);
|
Map<String, String> httpRequestHeaders = createHttpRequestHeaders(5);
|
||||||
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestProperties);
|
DataSpec dataSpec = createDataSpecWithHeaders(httpRequestHeaders);
|
||||||
Map<String, String> additionalHeaders = createRequestProperties(5, 10);
|
Map<String, String> additionalHeaders = createHttpRequestHeaders(5, 10);
|
||||||
// additionalHeaders may overwrite a header key
|
// additionalHeaders may overwrite a header key
|
||||||
String existingKey = httpRequestProperties.keySet().iterator().next();
|
String existingKey = httpRequestHeaders.keySet().iterator().next();
|
||||||
additionalHeaders.put(existingKey, "overwritten");
|
additionalHeaders.put(existingKey, "overwritten");
|
||||||
Map<String, String> expectedHeaders = new HashMap<>(httpRequestProperties);
|
Map<String, String> expectedHeaders = new HashMap<>(httpRequestHeaders);
|
||||||
expectedHeaders.putAll(additionalHeaders);
|
expectedHeaders.putAll(additionalHeaders);
|
||||||
|
|
||||||
DataSpec dataSpecCopy = dataSpec.withAdditionalHeaders(additionalHeaders);
|
DataSpec dataSpecCopy = dataSpec.withAdditionalHeaders(additionalHeaders);
|
||||||
|
|
@ -154,11 +230,11 @@ public class DataSpecTest {
|
||||||
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(expectedHeaders);
|
assertThat(dataSpecCopy.httpRequestHeaders).isEqualTo(expectedHeaders);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<String, String> createRequestProperties(int howMany) {
|
private static Map<String, String> createHttpRequestHeaders(int howMany) {
|
||||||
return createRequestProperties(0, 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);
|
assertThat(from).isLessThan(to);
|
||||||
|
|
||||||
Map<String, String> httpRequestParameters = new HashMap<>();
|
Map<String, String> httpRequestParameters = new HashMap<>();
|
||||||
|
|
@ -169,7 +245,7 @@ public class DataSpecTest {
|
||||||
return httpRequestParameters;
|
return httpRequestParameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DataSpec createDataSpecWithHeaders(Map<String, String> httpRequestProperties) {
|
private static DataSpec createDataSpecWithHeaders(Map<String, String> httpRequestHeaders) {
|
||||||
return new DataSpec(
|
return new DataSpec(
|
||||||
Uri.parse("www.google.com"),
|
Uri.parse("www.google.com"),
|
||||||
/* httpMethod= */ 0,
|
/* httpMethod= */ 0,
|
||||||
|
|
@ -179,6 +255,30 @@ public class DataSpecTest {
|
||||||
/* length= */ 1,
|
/* length= */ 1,
|
||||||
/* key= */ "key",
|
/* key= */ "key",
|
||||||
/* flags= */ 0,
|
/* 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