Program: 10905
Project: 10905
Buggy source:
@Test public void testStream() throws InterruptedException {
  final Semaphore sem=new Semaphore(0);
  mediaPipeline.createRtpEndPoint(new Continuation<RtpEndPoint>(){
    @Override public void onSuccess(    RtpEndPoint result){
      System.out.println("String_Node_Str");
      RtpEndPoint stream=result;
      final Semaphore semCont=new Semaphore(0);
      try {
        stream.generateOffer(new Continuation<String>(){
          @Override public void onSuccess(          String result){
            System.out.println("String_Node_Str" + result);
            semCont.release();
          }
          @Override public void onError(          Throwable cause){
            System.out.println("String_Node_Str");
          }
        }
);
        Assert.assertTrue(semCont.tryAcquire(500,TimeUnit.MILLISECONDS));
        releaseMediaObject(stream);
        sem.release();
      }
 catch (      InterruptedException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
catch (      KurentoMediaFrameworkException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
      try {
        stream.processOffer("String_Node_Str",new Continuation<String>(){
          @Override public void onSuccess(          String result){
            System.out.println("String_Node_Str" + result);
            semCont.release();
          }
          @Override public void onError(          Throwable cause){
            System.out.println("String_Node_Str");
          }
        }
);
        Assert.assertTrue(semCont.tryAcquire(500,TimeUnit.MILLISECONDS));
        releaseMediaObject(stream);
        sem.release();
      }
 catch (      InterruptedException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
catch (      KurentoMediaFrameworkException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
      try {
        stream.processAnswer("String_Node_Str",new Continuation<String>(){
          @Override public void onSuccess(          String result){
            System.out.println("String_Node_Str" + result);
            semCont.release();
          }
          @Override public void onError(          Throwable cause){
            System.out.println("String_Node_Str");
          }
        }
);
        Assert.assertTrue(semCont.tryAcquire(500,TimeUnit.MILLISECONDS));
        releaseMediaObject(stream);
        sem.release();
      }
 catch (      InterruptedException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
catch (      KurentoMediaFrameworkException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
      try {
        stream.getLocalSessionDescriptor(new Continuation<String>(){
          @Override public void onSuccess(          String result){
            System.out.println("String_Node_Str" + result);
            semCont.release();
          }
          @Override public void onError(          Throwable cause){
            System.out.println("String_Node_Str");
          }
        }
);
        Assert.assertTrue(semCont.tryAcquire(500,TimeUnit.MILLISECONDS));
        releaseMediaObject(stream);
        sem.release();
      }
 catch (      InterruptedException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
catch (      KurentoMediaFrameworkException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
      try {
        stream.getRemoteSessionDescriptor(new Continuation<String>(){
          @Override public void onSuccess(          String result){
            System.out.println("String_Node_Str" + result);
            semCont.release();
          }
          @Override public void onError(          Throwable cause){
            System.out.println("String_Node_Str");
          }
        }
);
        Assert.assertTrue(semCont.tryAcquire(500,TimeUnit.MILLISECONDS));
        releaseMediaObject(stream);
        sem.release();
      }
 catch (      InterruptedException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
catch (      KurentoMediaFrameworkException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
    }
    @Override public void onError(    Throwable cause){
      System.out.println("String_Node_Str");
    }
  }
);
  Assert.assertTrue(sem.tryAcquire(500,TimeUnit.MILLISECONDS));
}

Fixed version (ground truth):
@Ignore @Test public void testStream() throws InterruptedException {
  final Semaphore sem=new Semaphore(0);
  mediaPipeline.createRtpEndPoint(new Continuation<RtpEndPoint>(){
    @Override public void onSuccess(    RtpEndPoint result){
      System.out.println("String_Node_Str");
      RtpEndPoint stream=result;
      final Semaphore semCont=new Semaphore(0);
      try {
        stream.generateOffer(new Continuation<String>(){
          @Override public void onSuccess(          String result){
            System.out.println("String_Node_Str" + result);
            semCont.release();
          }
          @Override public void onError(          Throwable cause){
            System.out.println("String_Node_Str");
          }
        }
);
        Assert.assertTrue(semCont.tryAcquire(5000,TimeUnit.MILLISECONDS));
        releaseMediaObject(stream);
        sem.release();
      }
 catch (      InterruptedException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
catch (      KurentoMediaFrameworkException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
      try {
        stream.processOffer("String_Node_Str",new Continuation<String>(){
          @Override public void onSuccess(          String result){
            System.out.println("String_Node_Str" + result);
            semCont.release();
          }
          @Override public void onError(          Throwable cause){
            System.out.println("String_Node_Str");
          }
        }
);
        Assert.assertTrue(semCont.tryAcquire(500,TimeUnit.MILLISECONDS));
        releaseMediaObject(stream);
        sem.release();
      }
 catch (      InterruptedException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
catch (      KurentoMediaFrameworkException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
      try {
        stream.processAnswer("String_Node_Str",new Continuation<String>(){
          @Override public void onSuccess(          String result){
            System.out.println("String_Node_Str" + result);
            semCont.release();
          }
          @Override public void onError(          Throwable cause){
            System.out.println("String_Node_Str");
          }
        }
);
        Assert.assertTrue(semCont.tryAcquire(500,TimeUnit.MILLISECONDS));
        releaseMediaObject(stream);
        sem.release();
      }
 catch (      InterruptedException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
catch (      KurentoMediaFrameworkException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
      try {
        stream.getLocalSessionDescriptor(new Continuation<String>(){
          @Override public void onSuccess(          String result){
            System.out.println("String_Node_Str" + result);
            semCont.release();
          }
          @Override public void onError(          Throwable cause){
            System.out.println("String_Node_Str");
          }
        }
);
        Assert.assertTrue(semCont.tryAcquire(500,TimeUnit.MILLISECONDS));
        releaseMediaObject(stream);
        sem.release();
      }
 catch (      InterruptedException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
catch (      KurentoMediaFrameworkException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
      try {
        stream.getRemoteSessionDescriptor(new Continuation<String>(){
          @Override public void onSuccess(          String result){
            System.out.println("String_Node_Str" + result);
            semCont.release();
          }
          @Override public void onError(          Throwable cause){
            System.out.println("String_Node_Str");
          }
        }
);
        Assert.assertTrue(semCont.tryAcquire(500,TimeUnit.MILLISECONDS));
        releaseMediaObject(stream);
        sem.release();
      }
 catch (      InterruptedException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
catch (      KurentoMediaFrameworkException e) {
        e.printStackTrace();
        Assert.fail(e.getMessage());
      }
    }
    @Override public void onError(    Throwable cause){
      System.out.println("String_Node_Str");
    }
  }
);
  Assert.assertTrue(sem.tryAcquire(50000,TimeUnit.MILLISECONDS));
}