package com.crossbow.wear.core; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.test.suitebuilder.annotation.SmallTest; import com.android.volley.AuthFailureError; import com.android.volley.DefaultRetryPolicy; import com.android.volley.NetworkResponse; import com.android.volley.Request; import com.android.volley.Response; import com.crossbow.wear.BuildConfig; import com.crossbow.wear.core.WearDataRequest; import com.crossbow.wear.core.RequestSerialUtil; import com.crossbow.wear.core.ParamsBundle; import com.crossbow.wear.core.WearRequest; import junit.framework.TestCase; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.UUID; /** */ @RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class, sdk = 19) public class RequestSerializationTest { @Test @SmallTest public void testRequestSerialization() throws AuthFailureError, IOException { String uuid = UUID.randomUUID().toString(); TestRequest testRequest = new TestRequest(); byte[] serializedRequest = com.crossbow.wear.core.RequestSerialUtil.serializeRequest(uuid, testRequest); com.crossbow.wear.core.WearDataRequest dataRequest = RequestSerialUtil.deSerializeRequest(serializedRequest); Assert.assertTrue(Arrays.equals(testRequest.getBody(), dataRequest.getBody())); Assert.assertTrue(equalBundles(testRequest.getTransformerParams(), dataRequest.getTransformerArgs())); Assert.assertEquals(testRequest.getCacheKey(), dataRequest.getCacheKey()); Assert.assertEquals(testRequest.getUrl(), dataRequest.getUrl()); Assert.assertEquals(testRequest.getBodyContentType(), dataRequest.getBodyContentType()); Assert.assertEquals(testRequest.getPriority(), dataRequest.getPriority()); Assert.assertEquals(testRequest.getTransFormerKey(), dataRequest.getTransformerKey()); Assert.assertEquals(testRequest.getMethod(), dataRequest.getMethod()); Assert.assertEquals(testRequest.getHeaders(), dataRequest.getHeaders()); Assert.assertEquals(testRequest.getRetryPolicy().getCurrentRetryCount(), dataRequest.getRetryPolicy().getCurrentRetryCount()); Assert.assertEquals(testRequest.getRetryPolicy().getCurrentTimeout(), dataRequest.getRetryPolicy().getCurrentTimeout()); } public boolean equalBundles(ParamsBundle one, ParamsBundle two) { if(one.size() != two.size()) return false; Set<String> setOne = one.keySet(); Object valueOne; Object valueTwo; for(String key : setOne) { valueOne = one.get(key); valueTwo = two.get(key); if(valueOne == null) { if(valueTwo != null || !two.containsKey(key)) return false; } else if(!valueOne.equals(valueTwo)) return false; } return true; } private class TestRequest extends Request<Boolean> implements WearRequest { public TestRequest() { super(Method.PATCH, "https://api.github.com/users/twistedequations/repos", null); setRetryPolicy(new DefaultRetryPolicy(3600, 23, 2.0f)); } @Override protected Response<Boolean> parseNetworkResponse(NetworkResponse response) {return null;} @Override protected void deliverResponse(Boolean response) {} @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = new HashMap<>(); headers.put("Accept-Encoding", "gzip"); headers.put("cache-control", "private, max-age=31536000"); headers.put("expires", "Mon, 20 Jul 2015 21:21:22 GMT"); return headers; } @Override public String getBodyContentType() { return "body-content-type"; } @Override public String getCacheKey() { return "big-cache-key"; } @Override public byte[] getBody() throws AuthFailureError { return new byte[]{3,56,0x4,56,98,0x73}; } @Override public Priority getPriority() { return Priority.HIGH; } @NonNull @Override public ParamsBundle getTransformerParams() { ParamsBundle bundle = new ParamsBundle(); bundle.putInt("width", 1080); return bundle; } @Nullable @Override public String getTransFormerKey() { return "image_transformer"; } } }