public void testAddIP() throws Exception {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    // try a ping which doesn't ask for ip

    PingRequest noRequest = pingRequestFactory.createPingRequest((byte) 1);
    assertFalse(noRequest.requestsIP());

    noRequest.write(baos);
    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
    PingRequest fromNet = (PingRequest) messageFactory.read(bais, Network.TCP);

    assertFalse(fromNet.requestsIP());

    // try a ping without any other ggeps except the ip request
    byte[] guid = GUID.makeGuid();

    PingRequest noPayload = pingRequestFactory.createPingRequest(guid, (byte) 1, (byte) 0);

    assertFalse(noPayload.requestsIP());

    noPayload.addIPRequest();
    assertTrue(noPayload.requestsIP());

    baos = new ByteArrayOutputStream();
    noPayload.write(baos);
    bais = new ByteArrayInputStream(baos.toByteArray());
    fromNet = (PingRequest) messageFactory.read(bais, Network.TCP);

    assertTrue(fromNet.requestsIP());

    // now try a ping with locale
    String original = ApplicationSettings.LANGUAGE.get();
    ApplicationSettings.LANGUAGE.set("zz");
    PingRequest withLocale = pingRequestFactory.createPingRequest((byte) 1);
    ApplicationSettings.LANGUAGE.set(original);

    withLocale.addIPRequest();

    baos = new ByteArrayOutputStream();
    withLocale.write(baos);
    bais = new ByteArrayInputStream(baos.toByteArray());
    fromNet = (PingRequest) messageFactory.read(bais, Network.TCP);
    assertTrue(fromNet.requestsIP());
    assertEquals("zz", fromNet.getLocale());

    assertFalse(fromNet.supportsCachedPongs());
    assertNull(fromNet.getSupportsCachedPongData());
  }
 public void testQueryKeyPing() throws Exception {
   PingRequest pr = pingRequestFactory.createQueryKeyRequest();
   assertFalse(pr.isQueryKeyRequest()); // hasn't been hopped yet
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   pr.write(baos);
   ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
   PingRequest prRead = (PingRequest) messageFactory.read(bais, Network.TCP);
   prRead.hop();
   assertTrue(prRead.isQueryKeyRequest());
 }
  public void testBigPing() throws Exception {
    byte[] buffer = new byte[23 + 16]; // Headers plus payload(16 bytes)
    // Note: We choose a size of 16 to make sure it does not create a
    // group ping,
    byte[] guid = GUID.makeGuid(); // get a GUID
    System.arraycopy(guid, 0, buffer, 0, guid.length); // copy GUID
    int currByte = guid.length;
    buffer[currByte] = Message.F_PING;
    currByte++;
    buffer[currByte] = 0x0004; // TTL
    currByte++;
    buffer[currByte] = 0x0000; // Hops
    currByte++;
    buffer[currByte] = 0x0010; // 1st byte = 16, A thro' P
    currByte++;
    buffer[currByte] = 0x0000; // 2nd byte = 0
    currByte++;
    buffer[currByte] = 0x0000; // 3rd byte = 0
    currByte++;
    buffer[currByte] = 0x0000; // 4th byte = 0 - remember it's little endian
    currByte++;
    byte c = 65; // "A"
    byte[] payload = new byte[16]; // to be used to test constrcutor
    for (int i = 0; i < 16; i++) {
      buffer[currByte] = c;
      payload[i] = buffer[currByte];
      currByte++;
      c++;
    }
    // OK, Big ping ready
    ByteArrayInputStream stream = new ByteArrayInputStream(buffer);
    Message m;
    m = messageFactory.read(stream, Network.TCP);
    PingRequest pr;
    pr = (PingRequest) m;
    ByteArrayOutputStream outBuffer = new ByteArrayOutputStream();
    pr.write(outBuffer);
    byte[] outb = outBuffer.toByteArray();
    String out = StringUtils.getASCIIString(outb, 23, outb.length - 23);
    assertEquals("Wrong payload", "ABCDEFGHIJKLMNOP", out);

    // Test the new constructor for big pings read from the network

    PingRequest bigPing =
        pingRequestFactory.createFromNetwork(
            GUID.makeGuid(), (byte) 7, (byte) 0, payload, Network.UNKNOWN);
    assertEquals(0, bigPing.getHops());
    assertEquals(7, bigPing.getTTL());
    assertEquals("bad length", 16, bigPing.getLength());
    // Came this far means its all OK
  }
  public void testUDPPingRequest() {
    PingRequest pr = pingRequestFactory.createUDPPing();
    assertTrue(pr.supportsCachedPongs());

    // Test +UP +TLS
    UltrapeerSettings.MIN_CONNECT_TIME.setValue(0);
    UltrapeerSettings.FORCE_ULTRAPEER_MODE.setValue(true);
    ConnectionSettings.EVER_ACCEPTED_INCOMING.setValue(true);
    ConnectionSettings.LOCAL_IS_PRIVATE.setValue(false);
    UltrapeerSettings.EVER_ULTRAPEER_CAPABLE.setValue(true);
    UltrapeerSettings.NEED_MIN_CONNECT_TIME.setValue(false);
    tlsManager.setIncomingTLSEnabled(true);
    assertTrue(connectionServices.isSupernode());
    pr = pingRequestFactory.createUDPPing();
    assertFalse(pr.requestsIP());
    byte[] data = pr.getSupportsCachedPongData();
    assertEquals(0x1, data[0] & 0x1);
    assertEquals(0x2, data[0] & 0x2);

    // +UP -TLS
    tlsManager.setIncomingTLSEnabled(false);
    assertTrue(connectionServices.isSupernode());
    pr = pingRequestFactory.createUDPPing();
    assertFalse(pr.requestsIP());
    data = pr.getSupportsCachedPongData();
    assertEquals(0x1, data[0] & 0x1);
    assertEquals(0x0, data[0] & 0x2);

    // Test -UP +TLS
    UltrapeerSettings.DISABLE_ULTRAPEER_MODE.setValue(true);
    UltrapeerSettings.FORCE_ULTRAPEER_MODE.setValue(false);
    tlsManager.setIncomingTLSEnabled(true);
    assertFalse(connectionServices.isSupernode());
    pr = pingRequestFactory.createUDPPing();
    assertFalse(pr.requestsIP());
    data = pr.getSupportsCachedPongData();
    assertEquals(0x0, data[0] & 0x1);
    assertEquals(0x2, data[0] & 0x2);

    // Test -UP -TLS
    tlsManager.setIncomingTLSEnabled(false);
    assertFalse(connectionServices.isSupernode());
    pr = pingRequestFactory.createUDPPing();
    assertFalse(pr.requestsIP());
    data = pr.getSupportsCachedPongData();
    assertEquals(0x0, data[0] & 0x1);
    assertEquals(0x0, data[0] & 0x2);

    ConnectionSettings.EVER_ACCEPTED_INCOMING.setValue(false);
    pr = pingRequestFactory.createUDPPing();
    assertTrue(pr.requestsIP());
  }