Program: 4539
Project: 4539
Buggy source:
public void testAdvancedGuidance2() throws Exception {
  Message m=null;
  for (int i=0; i < testUPs.length; i++)   drain(testUPs[i]);
  GUID queryGuid=new GUID(rs.newQueryGUID());
  rs.query(queryGuid.bytes(),"String_Node_Str");
  for (int i=0; i < testUPs.length; i++) {
    QueryRequest qr=getFirstQueryRequest(testUPs[i]);
    assertNotNull(qr);
    assertEquals(new GUID(qr.getGUID()),queryGuid);
  }
  Response[] res=new Response[REPORT_INTERVAL * 4];
  for (int j=0; j < res.length; j++)   res[j]=new Response(10,10,"String_Node_Str" + j);
  m=new QueryReply(queryGuid.bytes(),(byte)1,6355,myIP(),0,res,GUID.makeGuid(),new byte[0],false,false,true,true,false,false,null);
  testUPs[0].send(m);
  testUPs[0].flush();
  for (int i=0; i < testUPs.length; i++) {
    QueryStatusResponse stat=getFirstQueryStatus(testUPs[i]);
    assertNotNull(stat);
    assertEquals(new GUID(stat.getGUID()),queryGuid);
    assertEquals(REPORT_INTERVAL,stat.getNumResults());
  }
  res=new Response[REPORT_INTERVAL - 1];
  for (int j=0; j < res.length; j++)   res[j]=new Response(10,10,"String_Node_Str" + j);
  m=new QueryReply(queryGuid.bytes(),(byte)1,6355,myIP(),0,res,GUID.makeGuid(),new byte[0],false,false,true,true,false,false,null);
  testUPs[2].send(m);
  testUPs[2].flush();
  for (int i=0; i < testUPs.length; i++) {
    QueryStatusResponse stat=getFirstQueryStatus(testUPs[i]);
    assertNull(stat);
  }
  res=new Response[2];
  for (int j=0; j < res.length; j++)   res[j]=new Response(10,10,"String_Node_Str" + j);
  m=new QueryReply(queryGuid.bytes(),(byte)1,6355,myIP(),0,res,GUID.makeGuid(),new byte[0],false,false,true,true,false,false,null);
  testUPs[1].send(m);
  testUPs[1].flush();
  for (int i=0; i < testUPs.length; i++) {
    QueryStatusResponse stat=getFirstQueryStatus(testUPs[i]);
    assertNotNull(stat);
    assertEquals(new GUID(stat.getGUID()),queryGuid);
    assertEquals(REPORT_INTERVAL + ((REPORT_INTERVAL + 1) / 4),stat.getNumResults());
  }
  rs.stopQuery(queryGuid);
  for (int i=0; i < testUPs.length; i++) {
    QueryStatusResponse stat=getFirstQueryStatus(testUPs[i]);
    assertNotNull(stat);
    assertEquals(new GUID(stat.getGUID()),queryGuid);
    assertEquals(65535,stat.getNumResults());
  }
  res=new Response[REPORT_INTERVAL * 2];
  for (int j=0; j < res.length; j++)   res[j]=new Response(10,10,"String_Node_Str" + j);
  m=new QueryReply(queryGuid.bytes(),(byte)1,6355,myIP(),0,res,GUID.makeGuid(),new byte[0],false,false,true,true,false,false,null);
  testUPs[0].send(m);
  testUPs[0].flush();
  for (int i=0; i < testUPs.length; i++) {
    final int index=i;
    Thread newThread=new Thread(){
      public void run(){
        try {
          QueryStatusResponse stat=getFirstQueryStatus(testUPs[index]);
          assertNull(stat);
        }
 catch (        Exception e) {
          assertNull(e);
        }
      }
    }
;
    newThread.start();
  }
}

Fixed version (ground truth):
public void testAdvancedGuidance2() throws Exception {
  Message m=null;
  for (int i=0; i < testUPs.length; i++)   drain(testUPs[i]);
  GUID queryGuid=new GUID(RouterService.newQueryGUID());
  RouterService.query(queryGuid.bytes(),"String_Node_Str");
  for (int i=0; i < testUPs.length; i++) {
    QueryRequest qr=getFirstQueryRequest(testUPs[i]);
    assertNotNull(qr);
    assertEquals(new GUID(qr.getGUID()),queryGuid);
  }
  Response[] res=new Response[REPORT_INTERVAL * 4];
  for (int j=0; j < res.length; j++)   res[j]=new Response(10,10,"String_Node_Str" + j);
  m=new QueryReply(queryGuid.bytes(),(byte)1,6355,myIP(),0,res,GUID.makeGuid(),new byte[0],false,false,true,true,false,false,null);
  testUPs[0].send(m);
  testUPs[0].flush();
  for (int i=0; i < testUPs.length; i++) {
    QueryStatusResponse stat=getFirstQueryStatus(testUPs[i]);
    assertNotNull(stat);
    assertEquals(new GUID(stat.getGUID()),queryGuid);
    assertEquals(REPORT_INTERVAL,stat.getNumResults());
  }
  res=new Response[REPORT_INTERVAL - 1];
  for (int j=0; j < res.length; j++)   res[j]=new Response(10,10,"String_Node_Str" + j);
  m=new QueryReply(queryGuid.bytes(),(byte)1,6355,myIP(),0,res,GUID.makeGuid(),new byte[0],false,false,true,true,false,false,null);
  testUPs[2].send(m);
  testUPs[2].flush();
  for (int i=0; i < testUPs.length; i++) {
    QueryStatusResponse stat=getFirstQueryStatus(testUPs[i]);
    assertNull(stat);
  }
  res=new Response[2];
  for (int j=0; j < res.length; j++)   res[j]=new Response(10,10,"String_Node_Str" + j);
  m=new QueryReply(queryGuid.bytes(),(byte)1,6355,myIP(),0,res,GUID.makeGuid(),new byte[0],false,false,true,true,false,false,null);
  testUPs[1].send(m);
  testUPs[1].flush();
  for (int i=0; i < testUPs.length; i++) {
    QueryStatusResponse stat=getFirstQueryStatus(testUPs[i]);
    assertNotNull(stat);
    assertEquals(new GUID(stat.getGUID()),queryGuid);
    assertEquals(REPORT_INTERVAL + ((REPORT_INTERVAL + 1) / 4),stat.getNumResults());
  }
  RouterService.stopQuery(queryGuid);
  for (int i=0; i < testUPs.length; i++) {
    QueryStatusResponse stat=getFirstQueryStatus(testUPs[i]);
    assertNotNull(stat);
    assertEquals(new GUID(stat.getGUID()),queryGuid);
    assertEquals(65535,stat.getNumResults());
  }
  res=new Response[REPORT_INTERVAL * 2];
  for (int j=0; j < res.length; j++)   res[j]=new Response(10,10,"String_Node_Str" + j);
  m=new QueryReply(queryGuid.bytes(),(byte)1,6355,myIP(),0,res,GUID.makeGuid(),new byte[0],false,false,true,true,false,false,null);
  testUPs[0].send(m);
  testUPs[0].flush();
  for (int i=0; i < testUPs.length; i++) {
    final int index=i;
    Thread newThread=new Thread(){
      public void run(){
        try {
          QueryStatusResponse stat=getFirstQueryStatus(testUPs[index]);
          assertNull(stat);
        }
 catch (        Exception e) {
          assertNull(e);
        }
      }
    }
;
    newThread.start();
  }
}