Advertisement
Guest User

PipeSanityCheckTest.java

a guest
Jan 21st, 2025
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.86 KB | Source Code | 0 0
  1. import lombok.extern.slf4j.Slf4j;
  2. import org.junit.jupiter.api.RepeatedTest;
  3.  
  4. import java.io.IOException;
  5. import java.nio.ByteBuffer;
  6. import java.nio.channels.Pipe;
  7. import java.util.concurrent.locks.ReentrantLock;
  8.  
  9. @Slf4j
  10. class PipeSanityCheckTest {
  11.  
  12.   @RepeatedTest(1000)
  13.   void test() throws IOException, InterruptedException {
  14.     var pipe = Pipe.open();
  15.     var sink = pipe.sink();
  16.     var source = pipe.source();
  17.     ReentrantLock sinkCloseLock = new ReentrantLock();
  18.     var writeThread = new Thread(() -> {
  19.       while (true) {
  20.         try {
  21.           sinkCloseLock.lock();
  22.           if (!sink.isOpen()) {
  23.             return;
  24.           }
  25.           log.info("before write");
  26.           int bytesWritten = sink.write(ByteBuffer.wrap("test".getBytes()));
  27.           log.info("after write {}", bytesWritten);
  28.         } catch (IOException e) {
  29.           log.error("error", e);
  30.           throw new RuntimeException(e);
  31.         } finally {
  32.           sinkCloseLock.unlock();
  33.         }
  34.       }
  35.     }, "Write Thread");
  36.     var readThread = new Thread(() -> {
  37.       int bytesRead;
  38.       do {
  39.         try {
  40.           log.info("before read");
  41.           bytesRead = source.read(ByteBuffer.allocate(1000));
  42.           log.info("after read {}", bytesRead);
  43.         } catch (IOException e) {
  44.           log.error("error", e);
  45.           throw new RuntimeException(e);
  46.         }
  47.       } while (bytesRead != -1);
  48.     }, "Read Thread");
  49.  
  50.     writeThread.start();
  51.     readThread.start();
  52.  
  53.     long sleepTime = (long) (Math.random() * 100);
  54.     log.info("sleep time {}", sleepTime);
  55.     Thread.sleep(sleepTime);
  56.     log.info("before close");
  57.     try {
  58.       sinkCloseLock.lock();
  59.       sink.close();
  60.     } finally {
  61.       sinkCloseLock.unlock();
  62.     }
  63.     log.info("after close");
  64.  
  65.     writeThread.join();
  66.     readThread.join();
  67.  
  68.     source.close();
  69.   }
  70.  
  71. }
  72.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement