Commit 39c65c65 by olly Committed by Oliver Woodman

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
parent 829282fa
...@@ -21,6 +21,7 @@ import static junit.framework.TestCase.fail; ...@@ -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; ...@@ -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);
dataSpec = new DataSpec(uri, /* flags= */ 0);
assertDefaultDataSpec(dataSpec, uri);
assertThat(dataSpec.httpRequestHeaders.isEmpty()).isTrue(); dataSpec = new DataSpec(uri, /* position= */ 0, C.LENGTH_UNSET, /* key= */ null);
assertDefaultDataSpec(dataSpec, uri);
dataSpec = new DataSpec(uri, /*flags= */ 0); dataSpec =
assertThat(dataSpec.httpRequestHeaders.isEmpty()).isTrue(); 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);
}
@Test dataSpec =
public void createDataSpec_setsHttpRequestParameters() { new DataSpec(
Map<String, String> httpRequestParameters = new HashMap<>(); uri,
httpRequestParameters.put("key1", "value1"); DataSpec.HTTP_METHOD_GET,
httpRequestParameters.put("key2", "value2"); /* httpBody= */ null,
httpRequestParameters.put("key3", "value3"); /* absoluteStreamPosition= */ 0,
/* position= */ 0,
/* length= */ C.LENGTH_UNSET,
/* key= */ null,
/* flags= */ 0);
assertDefaultDataSpec(dataSpec, uri);
DataSpec dataSpec = dataSpec =
new DataSpec( new DataSpec(
Uri.parse("www.google.com"), uri,
/* httpMethod= */ 0, DataSpec.HTTP_METHOD_GET,
/* httpBody= */ new byte[] {0, 0, 0, 0}, /* httpBody= */ null,
/* absoluteStreamPosition= */ 0, /* absoluteStreamPosition= */ 0,
/* position= */ 0, /* position= */ 0,
/* length= */ 1, /* length= */ C.LENGTH_UNSET,
/* key= */ "key", /* key= */ null,
/* flags= */ 0, /* flags= */ 0,
httpRequestParameters); new HashMap<>());
assertDefaultDataSpec(dataSpec, uri);
}
assertThat(dataSpec.httpRequestHeaders).isEqualTo(httpRequestParameters); @SuppressWarnings("deprecation")
@Test
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,
DataSpec.HTTP_METHOD_POST,
httpBody,
/* absoluteStreamPosition= */ 200,
/* position= */ 150,
/* length= */ 5,
/* key= */ "key",
/* flags= */ DataSpec.FLAG_ALLOW_GZIP,
httpRequestHeaders);
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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment