Example #1
0
  private void assertIce(
      JSONObject mediaDescription, String ufrag, String password, IceCandidate... candidates) {
    JSONObject ice = mediaDescription.optJSONObject("ice");
    assertNotNull(ice);
    assertEquals(ufrag, ice.optString("ufrag"));
    assertEquals(password, ice.optString("password"));

    JSONArray jsonCandidates = ice.optJSONArray("candidates");

    if (candidates.length == 0) {
      assertTrue(jsonCandidates == null || jsonCandidates.length() == 0);
      return;
    }
    assertNotNull(jsonCandidates);
    assertEquals(candidates.length, jsonCandidates.length());
    LinkedList<IceCandidate> remainingCandidates = new LinkedList<>(Arrays.asList(candidates));

    for (int i = 0; i < jsonCandidates.length(); i++) {
      JSONObject jsonCandidate = jsonCandidates.optJSONObject(i);
      assertNotNull(jsonCandidate);

      IceCandidate chosenCandidate = null;
      for (IceCandidate candidate : remainingCandidates) {
        if (candidate.isMatch(jsonCandidate)) {
          chosenCandidate = candidate;
          break;
        }
      }
      assertNotNull(chosenCandidate);
      remainingCandidates.remove(chosenCandidate);
    }
  }
  @Test
  public void testHostCandidateHarvesting() throws IOException {
    // given
    FoundationsRegistry foundationsRegistry = new LiteFoundationsRegistry();
    HostCandidateHarvester harvester = new HostCandidateHarvester(foundationsRegistry);
    IceMediaStream mediaStream = new IceMediaStream("audio", true);

    Selector selector = Selector.open();

    // when
    try {
      PortManager portManager = new PortManager();
      portManager.setHighestPort(62000);
      portManager.setLowestPort(61000);
      harvester.harvest(portManager, mediaStream, selector);
    } catch (NoCandidatesGatheredException e) {
      fail();
    } catch (HarvestException e) {
      fail();
    }

    // then
    List<LocalCandidateWrapper> rtpCandidates = mediaStream.getRtpComponent().getLocalCandidates();
    List<LocalCandidateWrapper> rtcpCandidates =
        mediaStream.getRtcpComponent().getLocalCandidates();

    assertTrue(rtpCandidates.size() > 0);
    assertTrue(rtcpCandidates.size() > 0);
    // Evaluate RTP Candidates
    for (LocalCandidateWrapper candidateWrapper : rtpCandidates) {
      DatagramChannel udpChannel = candidateWrapper.getChannel();
      assertFalse(udpChannel.isBlocking());
      assertFalse(udpChannel.isConnected());
      assertTrue(udpChannel.isOpen());

      IceCandidate candidate = candidateWrapper.getCandidate();
      assertEquals(candidate, candidate.getBase());
      assertEquals(
          new InetSocketAddress(candidate.getAddress(), candidate.getPort()),
          udpChannel.getLocalAddress());
      assertNotNull(udpChannel.keyFor(selector));
    }
    // Evaluate RTCP candidates
    for (LocalCandidateWrapper candidateWrapper : rtcpCandidates) {
      DatagramChannel udpChannel = candidateWrapper.getChannel();
      assertFalse(udpChannel.isBlocking());
      assertFalse(udpChannel.isConnected());
      assertTrue(udpChannel.isOpen());

      IceCandidate candidate = candidateWrapper.getCandidate();
      assertEquals(candidate, candidate.getBase());
      assertEquals(
          new InetSocketAddress(candidate.getAddress(), candidate.getPort()),
          udpChannel.getLocalAddress());
      assertNotNull(udpChannel.keyFor(selector));
    }
  }