/*
* Copyright (c) 2004, PostgreSQL Global Development Group
* See the LICENSE file in the project root for more information.
*/
package org.postgresql.test.util;
import java.io.FileNotFoundException;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;
/**
* {@link InputStream} implementation that reads less data than is provided in the destination
* array. This allows to stress test {@link org.postgresql.copy.CopyManager} or other consumers.
*/
public class StrangeInputStream extends FilterInputStream {
private Random rand; // generator of fun events
public StrangeInputStream(InputStream is) throws FileNotFoundException {
super(is);
rand = new Random();
long seed = Long.getLong("StrangeInputStream.seed", System.currentTimeMillis());
System.out
.println("Using seed = " + seed + " for StrangeInputStream. Set -DStrangeInputStream.seed="
+ seed + " to reproduce the test");
rand.setSeed(seed);
}
@Override
public int read(byte[] b) throws IOException {
int maxRead = rand.nextInt(b.length);
return super.read(b, 0, maxRead);
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
int maxRead = rand.nextInt(len);
return super.read(b, off, maxRead);
}
}