1cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera/* 2cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * Copyright (C) 2016 The Android Open Source Project 3cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * 4cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * Licensed under the Apache License, Version 2.0 (the "License"); 5cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * you may not use this file except in compliance with the License. 6cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * You may obtain a copy of the License at 7cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * 8cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * http://www.apache.org/licenses/LICENSE-2.0 9cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * 10cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * Unless required by applicable law or agreed to in writing, software 11cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * distributed under the License is distributed on an "AS IS" BASIS, 12cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * See the License for the specific language governing permissions and 14cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera * limitations under the License 15cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera */ 16cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 17cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmerapackage libcore.java.nio.channels; 18cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 19cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport junit.framework.TestCase; 20cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 21cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.io.IOException; 22cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.net.Inet4Address; 23cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.net.Inet6Address; 24cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.net.InetAddress; 25cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.net.InetSocketAddress; 26cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.net.NetworkInterface; 27cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.net.StandardProtocolFamily; 28cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.net.StandardSocketOptions; 29cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.net.UnknownHostException; 30cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.nio.ByteBuffer; 31cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.nio.channels.DatagramChannel; 32cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmeraimport java.nio.channels.MembershipKey; 33cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 34cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmerapublic class MembershipKeyTest extends TestCase { 35cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 36cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera private MembershipKey key; 37cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera private final int PORT = 5000; 38cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera private final String TEST_MESSAGE = "hello"; 39cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera private DatagramChannel client; 40cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera private InetAddress sourceAddress = Inet4Address.LOOPBACK; 41cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera private final static InetAddress MULTICAST_ADDRESS = getMulticastAddress(); 42cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera private final static NetworkInterface NETWORK_INTERFACE = getNetworkInterface(); 43cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 4429cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer private void init(boolean withSource) throws Exception { 45cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera client = DatagramChannel.open(StandardProtocolFamily.INET) 46cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera .bind(new InetSocketAddress(Inet4Address.ANY, PORT)); 47cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera client.configureBlocking(false); 48cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 49cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera if (withSource) { 503b51268d4502356889956d46e2d3df997a85d089Shubham Ajmera key = client.join(MULTICAST_ADDRESS, NETWORK_INTERFACE, sourceAddress); 51cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } else { 52cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key = client.join(MULTICAST_ADDRESS, NETWORK_INTERFACE); 53cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 54cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 55cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 56cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera @Override 57cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void tearDown() throws IOException { 58cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera client.close(); 59cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key = null; 60cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 61cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 62cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_isValid_OnChannelCloseWithJoinWithoutSource() throws Exception { 6329cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(false); 6429cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer check_isValid(); 65cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 66cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 67cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_isValid_OnChannelCloseWithJoinWithSource() throws Exception { 6829cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(true); 6929cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer check_isValid(); 70cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 71cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 7229cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer private void check_isValid() throws IOException { 73cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertTrue(key.isValid()); 74cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera client.close(); 75cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertFalse(key.isValid()); 76cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 77cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 78cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_isValid_OnDropJoinWithoutSource() throws Exception { 7929cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(false); 8029cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer check_isValid_OnDrop(); 81cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 82cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 83cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_isValid_OnDropJoinWithSource() throws Exception { 8429cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(true); 8529cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer check_isValid_OnDrop(); 86cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 87cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 8829cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer private void check_isValid_OnDrop() { 89cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertTrue(key.isValid()); 90cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.drop(); 91cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertFalse(key.isValid()); 92cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 93cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 94cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_dropWithJoinWithoutSource() throws Exception { 9529cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(false); 9629cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer check_drop(); 97cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 98cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 99cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_dropWithJoinWithSource() throws Exception { 10029cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(true); 10129cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer check_drop(); 102cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 103cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 10429cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer private void check_drop() throws IOException { 105cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.drop(); 106cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try(DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)) { 107cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(TEST_MESSAGE.length(), dc 108cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera .bind(new InetSocketAddress(Inet4Address.LOOPBACK, 0)) 109cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera .send(ByteBuffer.wrap(TEST_MESSAGE.getBytes()), 110cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera new InetSocketAddress(MULTICAST_ADDRESS, PORT))); 111cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 112cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 113cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera ByteBuffer buffer = ByteBuffer.allocate(1048); 114cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera client.receive(buffer); 115cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera buffer.flip(); 116cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(0, buffer.limit()); 117cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 118cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 119cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_networkInterface() throws Exception { 12029cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(false); 121cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(NETWORK_INTERFACE, key.networkInterface()); 122cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera client.close(); 123cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(NETWORK_INTERFACE, key.networkInterface()); 124cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 125cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 126cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_sourceAddressWithJoinWithSource() throws Exception { 12729cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(true); 128cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(sourceAddress, key.sourceAddress()); 129cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 130cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 131cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_sourceAddressWithJoinWithoutSource() throws Exception { 13229cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(false); 133cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertNull(key.sourceAddress()); 134cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 135cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 136cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_groupWithJoinWithSource() throws Exception { 13729cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(true); 138cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(MULTICAST_ADDRESS, key.group()); 139cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 140cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 141cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_groupWithoutJoinWIthSource() throws Exception { 14229cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(false); 143cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(MULTICAST_ADDRESS, key.group()); 144cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 145cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 146cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_channelWithJoinWithSource() throws Exception { 14729cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(true); 148cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(client, key.channel()); 149cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.drop(); 150cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(client, key.channel()); 151cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 152cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 153cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_channelWithJoinWithoutSource() throws Exception { 15429cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(false); 155cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(client, key.channel()); 156cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.drop(); 157cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(client, key.channel()); 158cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 159cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 160cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_blockWithJoinWithSource() throws Exception { 16129cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(true); 162cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try { 163cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.block(sourceAddress); 164d4b7449574ca69c713a3f2230cb77c68ee642700Tobias Thierer fail(); 165cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } catch (IllegalStateException expected) {} 166cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 167cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 168cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_blockWithJoinWithoutSource() throws Exception { 16929cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(false); 170cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.block(sourceAddress); 171cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 172cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try (DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)) { 173cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(TEST_MESSAGE.length(), dc 174cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera .bind(new InetSocketAddress(Inet4Address.LOOPBACK, 0)) 175cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera .send(ByteBuffer.wrap(TEST_MESSAGE.getBytes()), 176cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera new InetSocketAddress(MULTICAST_ADDRESS, PORT))); 177cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 178cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 179cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera ByteBuffer buffer = ByteBuffer.allocate(1048); 180cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera client.receive(buffer); 181cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera buffer.flip(); 182cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(0, buffer.limit()); 183cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 184cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 185cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_block_Exception () throws Exception { 18629cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(false); 187cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 188cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera // Blocking a multicast channel 189cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try { 190cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.block(Inet4Address.getByName("224.0.0.10")); 1913b51268d4502356889956d46e2d3df997a85d089Shubham Ajmera fail(); 192cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } catch (IllegalArgumentException expected) {} 193cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 194cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera // Different address type than the group 195cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try { 196cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.block(Inet6Address.LOOPBACK); 1973b51268d4502356889956d46e2d3df997a85d089Shubham Ajmera fail(); 198cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } catch (IllegalArgumentException expected) {} 199cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 200cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.drop(); 201cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try { 202cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.block(sourceAddress); 2033b51268d4502356889956d46e2d3df997a85d089Shubham Ajmera fail(); 204cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } catch (IllegalStateException expected) {} 205cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 206cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 207cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_unblockWithJoinWithSource() throws Exception { 20829cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(true); 209cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try { 210cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.unblock(Inet4Address.getByName("127.0.0.2")); 2113b51268d4502356889956d46e2d3df997a85d089Shubham Ajmera fail(); 212cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } catch (IllegalStateException expected) {} 213cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 214cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 215cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_unblockWithJoinWithoutSource() throws Exception { 21629cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(false); 217cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 218cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.block(sourceAddress); 219cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.unblock(sourceAddress); 220cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 221cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try (DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)) { 222cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(TEST_MESSAGE.length(), dc 223cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera .bind(new InetSocketAddress(Inet4Address.LOOPBACK, 0)) 224cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera .setOption(StandardSocketOptions.IP_MULTICAST_LOOP, true /* enable loop */) 225cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera .send(ByteBuffer.wrap(TEST_MESSAGE.getBytes()), 226cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera new InetSocketAddress(MULTICAST_ADDRESS, PORT))); 227cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 228cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 229cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera ByteBuffer buffer = ByteBuffer.allocate(1048); 230cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera client.receive(buffer); 231cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera buffer.flip(); 232cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera int limits = buffer.limit(); 233cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera byte bytes[] = new byte[limits]; 234cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera buffer.get(bytes, 0, limits); 235cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera String receivedMessage = new String(bytes); 236cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera assertEquals(TEST_MESSAGE, receivedMessage); 237cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 238cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 239cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera public void test_unblock_Exception() throws Exception { 24029cb37bc4cf841bd4f120b7d595e1be9659fe23bTobias Thierer init(false); 241cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try { 242cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.unblock(sourceAddress); 2433b51268d4502356889956d46e2d3df997a85d089Shubham Ajmera fail(); 244cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } catch (IllegalStateException expected) {} 245cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 246cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.drop(); 247cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 248cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try { 249cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera key.unblock(sourceAddress); 2503b51268d4502356889956d46e2d3df997a85d089Shubham Ajmera fail(); 251cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } catch (IllegalStateException expected) {} 252cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 253cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 254cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera private static InetAddress getMulticastAddress() { 255cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try { 256cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera return InetAddress.getByName("239.255.0.1"); 257cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } catch (UnknownHostException exception) { 258cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera throw new RuntimeException(exception); 259cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 260cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 261cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera 262cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera private static NetworkInterface getNetworkInterface() { 263cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera try { 264cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera return NetworkInterface.getByName("lo"); 265cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } catch (Exception e) { 266cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera throw new RuntimeException(e); 267cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 268cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera } 269cf010dc7e50acebe436d11e44fe311e487843db8Shubham Ajmera} 270