1fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy/* 2fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * Copyright (C) 2011 The Android Open Source Project 3fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * 4fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * Licensed under the Apache License, Version 2.0 (the "License"); 5fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * you may not use this file except in compliance with the License. 6fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * You may obtain a copy of the License at 7fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * 8fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * http://www.apache.org/licenses/LICENSE-2.0 9fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * 10fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * Unless required by applicable law or agreed to in writing, software 11fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * distributed under the License is distributed on an "AS IS" BASIS, 12fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * See the License for the specific language governing permissions and 14fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * limitations under the License. 15fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy */ 16fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 17fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedypackage com.android.emailcommon.provider; 18fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 199b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantlerimport android.os.Parcel; 20fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedyimport android.test.AndroidTestCase; 219b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantlerimport android.test.mock.MockContext; 22fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedyimport android.test.suitebuilder.annotation.SmallTest; 23fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 249250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieuximport org.json.JSONException; 259250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieuximport org.json.JSONObject; 269250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux 279250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieuximport java.util.Arrays; 289250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux 29fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy/** 30fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * Unit tests for the HostAuth inner class. 31fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * These tests must be locally complete - no server(s) required. 32fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy */ 33fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy@SmallTest 34fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedypublic class HostAuthTests extends AndroidTestCase { 35fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 36fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy /** 37fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * Test user name and password are set correctly 38fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy */ 39fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy public void testSetLogin() { 40fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy HostAuth ha = new HostAuth(); 41fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin("user:password"); 42fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals("user", ha.mLogin); 43fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals("password", ha.mPassword); 44fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 45fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy // special characters are not removed during insertion 46fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin("%20us%20er%20:password"); 47fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals("%20us%20er%20", ha.mLogin); 48fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals("password", ha.mPassword); 49fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 50fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy // special characters are not removed during insertion 51fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin("user:%20pass%20word%20"); 52fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals("user", ha.mLogin); 53fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals("%20pass%20word%20", ha.mPassword); 54fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 55fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin("user:"); 56fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals("user", ha.mLogin); 57fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals("", ha.mPassword); 58fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 59fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin(":password"); 60fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals("", ha.mLogin); 61fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals("password", ha.mPassword); 62fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 63fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin(""); 64fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertNull(ha.mLogin); 65fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertNull(ha.mPassword); 66fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 67fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin(null); 68fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertNull(ha.mLogin); 69fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertNull(ha.mPassword); 70fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 71fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin("userpassword"); 72fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals("userpassword", ha.mLogin); 73fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertNull(ha.mPassword); 74fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy } 75fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 76fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy /** 77fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * Test the authentication flag is set correctly when setting user name and password 78fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy */ 79fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy public void testSetLoginAuthenticate() { 80fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy HostAuth ha = new HostAuth(); 81fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 82fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.mFlags = 0x00000000; 83fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin("user", "password"); 84fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(HostAuth.FLAG_AUTHENTICATE, ha.mFlags); 85fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 86fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.mFlags = 0x00000000; 87fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin("user", ""); 88fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(HostAuth.FLAG_AUTHENTICATE, ha.mFlags); 89fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 90951eb080f98e86d50cb549ee52fb72d8f07196c3Tony Mantler ha.mFlags = 0xffffffff; 91fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin("", "password"); 92951eb080f98e86d50cb549ee52fb72d8f07196c3Tony Mantler assertEquals(~HostAuth.FLAG_AUTHENTICATE, ha.mFlags); 93fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 94fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.mFlags = 0x00000000; 95fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin("user", null); 96fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(HostAuth.FLAG_AUTHENTICATE, ha.mFlags); 97fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 98fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.mFlags = 0xffffffff; 99fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin(null, "password"); 100fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(~HostAuth.FLAG_AUTHENTICATE, ha.mFlags); 101fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 102fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.mFlags = 0xffffffff; 103fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setLogin(null, null); 104fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(~HostAuth.FLAG_AUTHENTICATE, ha.mFlags); 105fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy } 106fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 107fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy /** 108fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy * Test setting the connection using a protocol and flags 109fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy */ 110fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy public void testSetConnectionFlags() { 111fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy HostAuth ha = new HostAuth(); 112fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 113fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy // Different port types don't affect flags 114fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setConnection("imap", "server", 123, 0); 115fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(0, ha.mFlags); 116fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setConnection("imap", "server", -1, 0); 117fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(0, ha.mFlags); 118fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 119fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy // Different protocol types don't affect flags 120fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setConnection("pop3", "server", 123, 0); 121fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(0, ha.mFlags); 122fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setConnection("pop3", "server", -1, 0); 123fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(0, ha.mFlags); 124fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setConnection("eas", "server", 123, 0); 125fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(0, ha.mFlags); 126fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setConnection("eas", "server", -1, 0); 127fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(0, ha.mFlags); 128fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setConnection("smtp", "server", 123, 0); 129fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(0, ha.mFlags); 130fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy ha.setConnection("smtp", "server", -1, 0); 131fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(0, ha.mFlags); 132fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 133fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy // Sets SSL flag 134313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo ha.setConnection("imap", "server", HostAuth.PORT_UNKNOWN, HostAuth.FLAG_SSL); 135fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(HostAuth.FLAG_SSL, ha.mFlags); 136fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 137fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy // Sets SSL+Trusted flags 138313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo ha.setConnection("imap", "server", HostAuth.PORT_UNKNOWN, 139313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL); 140fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, ha.mFlags); 141fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 142fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy // Sets TLS flag 143313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo ha.setConnection("imap", "server", HostAuth.PORT_UNKNOWN, HostAuth.FLAG_TLS); 144fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(HostAuth.FLAG_TLS, ha.mFlags); 145fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 146fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy // Sets TLS+Trusted flags 147313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo ha.setConnection("imap", "server", HostAuth.PORT_UNKNOWN, 148313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL); 149fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL, ha.mFlags); 150fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 151fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy // Test other defined flags; should not affect mFlags 152313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo ha.setConnection("imap", "server", HostAuth.PORT_UNKNOWN, HostAuth.FLAG_AUTHENTICATE); 153fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy assertEquals(0, ha.mFlags); 154fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 155fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy // Test every other bit; should not affect mFlags 1567037a0bd3d8e925a9115f475f5c0d05ddae2eeeeJerry Xie // mFlag is evalutated to the following: 1577037a0bd3d8e925a9115f475f5c0d05ddae2eeeeJerry Xie // mFlag = (0 & (some operation)) | (0xfffffff4 & 0x1b) 1587037a0bd3d8e925a9115f475f5c0d05ddae2eeeeJerry Xie // mFlag = 0 | 0x10 1597037a0bd3d8e925a9115f475f5c0d05ddae2eeeeJerry Xie // mFlag = 0x10 160313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo ha.setConnection("imap", "server", HostAuth.PORT_UNKNOWN, 0xfffffff4); 1617037a0bd3d8e925a9115f475f5c0d05ddae2eeeeJerry Xie assertEquals(0x10, ha.mFlags); 162fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy } 163fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 164313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo public void testSetConnectionWithCerts() { 165313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo HostAuth ha = new HostAuth(); 166313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo 167313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo ha.setConnection("eas", "server", HostAuth.PORT_UNKNOWN, HostAuth.FLAG_SSL, "client-cert"); 168313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo assertEquals(HostAuth.FLAG_SSL, ha.mFlags); 169313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo assertEquals("client-cert", ha.mClientCertAlias); 170313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo 171313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo ha.setConnection("eas", "server", HostAuth.PORT_UNKNOWN, HostAuth.FLAG_TLS, "client-cert"); 172313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo assertEquals(HostAuth.FLAG_TLS, ha.mFlags); 173313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo assertEquals("client-cert", ha.mClientCertAlias); 174313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo 175313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo // Note that we can still trust all server certificates, even if we present a client 176313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo // user certificate. 177313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo ha.setConnection("eas", "server", HostAuth.PORT_UNKNOWN, 178313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, "client-cert"); 179313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo assertEquals(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, ha.mFlags); 180313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo assertEquals("client-cert", ha.mClientCertAlias); 181313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo 182313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo try { 183313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo ha.setConnection( 184313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo "eas", "server", HostAuth.PORT_UNKNOWN, 0 /* no flags */, "client-cert"); 185313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo fail("Shouldn't be able to set a client certificate on an unsecure connection"); 186313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo } catch (IllegalArgumentException expected) { 1879b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler // ignore 188313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo } 189313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo } 1909b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler 1919b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler public void testParceling() { 1929b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler final HostAuth orig = new HostAuth(); 1939b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler // Fill in some data 1949b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler orig.mPort = 993; 1959b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler orig.mProtocol = "imap"; 1969b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler orig.mAddress = "example.com"; 1979b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler orig.mLogin = "user"; 1989b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler orig.mPassword = "supersecret"; 1999b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler orig.mDomain = "domain"; 2009b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler orig.mClientCertAlias = "certalias"; 2019b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler 2029b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler final Parcel p1 = Parcel.obtain(); 2039b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler orig.writeToParcel(p1, 0); 2049b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler p1.setDataPosition(0); 2059b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler final HostAuth unparceled1 = new HostAuth(p1); 2069b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler p1.recycle(); 2079b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler assertEquals(orig, unparceled1); 2089b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler assertEquals(orig.mCredentialKey, unparceled1.mCredentialKey); 2099b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler assertEquals(orig.mCredential, unparceled1.mCredential); 2109b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler 2119b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler orig.getOrCreateCredential(new MockContext()); 2129b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler 2139b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler final Parcel p2 = Parcel.obtain(); 2149b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler orig.writeToParcel(p2, 0); 2159b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler p2.setDataPosition(0); 2169b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler final HostAuth unparceled2 = new HostAuth(p2); 2179b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler p2.recycle(); 2189b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler assertEquals(orig, unparceled2); 2199b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler assertEquals(orig.mCredentialKey, unparceled2.mCredentialKey); 2209b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler assertEquals(orig.mCredential, unparceled2.mCredential); 2219b8dafe23aed2c50cab349aec0e20c3a7a28ec31Tony Mantler } 2229250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux 2239250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux public void testDeserializeFromJSON() throws JSONException { 2249250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux final JSONObject json = new JSONObject(); 2259250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux json.put(EmailContent.HostAuthColumns.PROTOCOL, "IMAP"); 2269250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux json.put(EmailContent.HostAuthColumns.ADDRESS, "dhoff@example.com"); 2279250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux json.put(EmailContent.HostAuthColumns.PORT, 1337); 2289250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux json.put(EmailContent.HostAuthColumns.FLAGS, 293847); 2299250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux json.put(EmailContent.HostAuthColumns.LOGIN, "dhoff"); 2309250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux json.put(EmailContent.HostAuthColumns.PASSWORD, "daknightrida"); 2319250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux json.put(EmailContent.HostAuthColumns.DOMAIN, "example.com"); 2329250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux json.put(EmailContent.HostAuthColumns.CLIENT_CERT_ALIAS, "I'm a client cert alias"); 2339250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux json.put(HostAuth.JSON_TAG_CREDENTIAL, Credential.EMPTY.toJson()); 2349250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux 2359250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux // deserialize the json 2369250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux final HostAuth ha = HostAuth.fromJson(json); 2379250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux 2389250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux // verify that all fields deserialized as expected 2399250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals("IMAP", ha.mProtocol); 2409250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals("dhoff@example.com", ha.mAddress); 2419250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(1337, ha.mPort); 2429250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(293847, ha.mFlags); 2439250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals("dhoff", ha.mLogin); 2449250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals("daknightrida", ha.mPassword); 2459250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals("example.com", ha.mDomain); 2469250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals("I'm a client cert alias", ha.mClientCertAlias); 2479250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(Credential.EMPTY, ha.mCredential); 2489250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux 2499250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertNull(ha.mServerCert); // server cert is not serialized; field defaults to null 2509250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(-1, ha.mCredentialKey); // cred key is not serialized; field defaults to -1 2519250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux } 2529250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux 2539250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux public void testSerializeAndDeserializeWithJSON() { 2549250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux final HostAuth before = new HostAuth(); 2559250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux before.mProtocol = "IMAP"; 2569250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux before.mAddress = "dhoff@example.com"; 2579250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux before.mPort = 1337; 2589250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux before.mFlags = 293847; 2599250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux before.setLogin("dhoff", "daknightrida"); 2609250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux before.mDomain = "example.com"; 2619250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux before.mClientCertAlias = "I'm a client cert alias"; 2629250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux before.mServerCert = new byte[] {(byte) 0xFF, (byte) 0xAA}; 2639250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux before.mCredentialKey = 9873425; 2649250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux before.mCredential = Credential.EMPTY; 2659250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux 2669250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux // this must be called before serialization occurs 2679250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux before.ensureLoaded(getContext()); 2689250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux 2699250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux // serialize and deserialize 2709250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux final HostAuth after = HostAuth.fromJson(before.toJson()); 2719250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux 2729250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(before.mProtocol, after.mProtocol); 2739250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(before.mAddress, after.mAddress); 2749250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(before.mPort, after.mPort); 2759250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(before.mFlags, after.mFlags); 2769250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertTrue(Arrays.equals(before.getLogin(), after.getLogin())); 2779250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(before.mDomain, after.mDomain); 2789250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(before.mClientCertAlias, after.mClientCertAlias); 2799250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(before.mCredential, after.mCredential); 2809250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux 2819250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertNull(after.mServerCert); // server cert is not serialized; field defaults to null 2829250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux assertEquals(-1, after.mCredentialKey); // cred key is not serialized; field defaults to 0 2839250f4787222f8bc3afe539a2f351fd8d9875fbaJames Lemieux } 284fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy} 285fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy 286