diff options
author | Christopher Lane <lanechr@google.com> | 2014-04-14 15:14:01 -0700 |
---|---|---|
committer | Christopher Lane <lanechr@google.com> | 2014-04-14 15:14:01 -0700 |
commit | 111db01a2668b7a1ec256a4166c322db061d1ddd (patch) | |
tree | 091affd0c8c9cef6e51f419aa81a1d0490138f9d /tests | |
parent | 72139a92ab7b4e7f986f57a3ac4134fd6c404968 (diff) | |
parent | 381ac080547ef8294edd871c5bb0b29d15f7158b (diff) | |
download | frameworks_base-111db01a2668b7a1ec256a4166c322db061d1ddd.zip frameworks_base-111db01a2668b7a1ec256a4166c322db061d1ddd.tar.gz frameworks_base-111db01a2668b7a1ec256a4166c322db061d1ddd.tar.bz2 |
resolved conflicts for merge of 381ac080 to master
Change-Id: I779c49c48980ba7737ee4e7b04a9e4c3e02fca21
Diffstat (limited to 'tests')
-rw-r--r-- | tests/CoreTests/android/core/NsdServiceInfoTest.java | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/tests/CoreTests/android/core/NsdServiceInfoTest.java b/tests/CoreTests/android/core/NsdServiceInfoTest.java new file mode 100644 index 0000000..5bf0167 --- /dev/null +++ b/tests/CoreTests/android/core/NsdServiceInfoTest.java @@ -0,0 +1,163 @@ +package android.core; + +import android.test.AndroidTestCase; + +import android.os.Bundle; +import android.os.Parcel; +import android.os.StrictMode; +import android.net.nsd.NsdServiceInfo; +import android.util.Log; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.net.InetAddress; +import java.net.UnknownHostException; + + +public class NsdServiceInfoTest extends AndroidTestCase { + + public final static InetAddress LOCALHOST; + static { + // Because test. + StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); + StrictMode.setThreadPolicy(policy); + + InetAddress _host = null; + try { + _host = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { } + LOCALHOST = _host; + } + + public void testLimits() throws Exception { + NsdServiceInfo info = new NsdServiceInfo(); + + // Non-ASCII keys. + boolean exceptionThrown = false; + try { + info.setAttribute("猫", "meow"); + } catch (IllegalArgumentException e) { + exceptionThrown = true; + } + assertTrue(exceptionThrown); + assertEmptyServiceInfo(info); + + // ASCII keys with '=' character. + exceptionThrown = false; + try { + info.setAttribute("kitten=", "meow"); + } catch (IllegalArgumentException e) { + exceptionThrown = true; + } + assertTrue(exceptionThrown); + assertEmptyServiceInfo(info); + + // Single key + value length too long. + exceptionThrown = false; + try { + String longValue = "loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" + + "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" + + "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" + + "ooooooooooooooooooooooooooooong"; // 248 characters. + info.setAttribute("longcat", longValue); // Key + value == 255 characters. + } catch (IllegalArgumentException e) { + exceptionThrown = true; + } + assertTrue(exceptionThrown); + assertEmptyServiceInfo(info); + + // Total TXT record length too long. + exceptionThrown = false; + int recordsAdded = 0; + try { + for (int i = 100; i < 300; ++i) { + // 6 char key + 5 char value + 2 bytes overhead = 13 byte record length. + String key = String.format("key%d", i); + info.setAttribute(key, "12345"); + recordsAdded++; + } + } catch (IllegalArgumentException e) { + exceptionThrown = true; + } + assertTrue(exceptionThrown); + assertTrue(100 == recordsAdded); + assertTrue(info.getTxtRecord().length == 1300); + } + + public void testParcel() throws Exception { + NsdServiceInfo emptyInfo = new NsdServiceInfo(); + checkParcelable(emptyInfo); + + NsdServiceInfo fullInfo = new NsdServiceInfo(); + fullInfo.setServiceName("kitten"); + fullInfo.setServiceType("_kitten._tcp"); + fullInfo.setPort(4242); + fullInfo.setHost(LOCALHOST); + checkParcelable(fullInfo); + + NsdServiceInfo noHostInfo = new NsdServiceInfo(); + noHostInfo.setServiceName("kitten"); + noHostInfo.setServiceType("_kitten._tcp"); + noHostInfo.setPort(4242); + checkParcelable(noHostInfo); + + NsdServiceInfo attributedInfo = new NsdServiceInfo(); + attributedInfo.setServiceName("kitten"); + attributedInfo.setServiceType("_kitten._tcp"); + attributedInfo.setPort(4242); + attributedInfo.setHost(LOCALHOST); + attributedInfo.setAttribute("color", "pink"); + attributedInfo.setAttribute("sound", (new String("にゃあ")).getBytes("UTF-8")); + attributedInfo.setAttribute("adorable", (String) null); + attributedInfo.setAttribute("sticky", "yes"); + attributedInfo.setAttribute("siblings", new byte[] {}); + attributedInfo.setAttribute("edge cases", new byte[] {0, -1, 127, -128}); + attributedInfo.removeAttribute("sticky"); + checkParcelable(attributedInfo); + + // Sanity check that we actually wrote attributes to attributedInfo. + assertTrue(attributedInfo.getAttributes().keySet().contains("adorable")); + String sound = new String(attributedInfo.getAttributes().get("sound"), "UTF-8"); + assertTrue(sound.equals("にゃあ")); + byte[] edgeCases = attributedInfo.getAttributes().get("edge cases"); + assertTrue(Arrays.equals(edgeCases, new byte[] {0, -1, 127, -128})); + assertFalse(attributedInfo.getAttributes().keySet().contains("sticky")); + } + + public void checkParcelable(NsdServiceInfo original) { + // Write to parcel. + Parcel p = Parcel.obtain(); + Bundle writer = new Bundle(); + writer.putParcelable("test_info", original); + writer.writeToParcel(p, 0); + + // Extract from parcel. + p.setDataPosition(0); + Bundle reader = p.readBundle(); + reader.setClassLoader(NsdServiceInfo.class.getClassLoader()); + NsdServiceInfo result = reader.getParcelable("test_info"); + + // Assert equality of base fields. + assertEquality(original.getServiceName(), result.getServiceName()); + assertEquality(original.getServiceType(), result.getServiceType()); + assertEquality(original.getHost(), result.getHost()); + assertTrue(original.getPort() == result.getPort()); + + // Assert equality of attribute map. + Map<String, byte[]> originalMap = original.getAttributes(); + Map<String, byte[]> resultMap = result.getAttributes(); + assertEquality(originalMap.keySet(), resultMap.keySet()); + for (String key : originalMap.keySet()) { + assertTrue(Arrays.equals(originalMap.get(key), resultMap.get(key))); + } + } + + public void assertEquality(Object expected, Object result) { + assertTrue(expected == result || expected.equals(result)); + } + + public void assertEmptyServiceInfo(NsdServiceInfo shouldBeEmpty) { + assertTrue(null == shouldBeEmpty.getTxtRecord()); + } +} |