package com.neverwinterdp.scribengin.dataflow.test;
import com.beust.jcommander.Parameter;
import com.neverwinterdp.scribengin.Record;
import com.neverwinterdp.scribengin.ScribenginClient;
import com.neverwinterdp.scribengin.storage.StorageDescriptor;
import com.neverwinterdp.tool.message.Message;
import com.neverwinterdp.tool.message.MessageExtractor;
import com.neverwinterdp.util.JSONSerializer;
abstract public class DataflowSinkValidator implements Runnable {
@Parameter(names = "--sink-name", required=true, description = "The storage sink name, usually the database name or dir name of the storage")
protected String sinkName ;
@Parameter(names = "--sink-expect-records", description = "The expect number of records in the sink")
protected long expectRecords = 100000;
public void setExpectRecords(long num) { this.expectRecords = num ; }
abstract public StorageDescriptor getSinkDescriptor() ;
abstract public void init(ScribenginClient scribenginClient) ;
abstract public void run() ;
abstract public void runInBackground() ;
abstract public boolean waitForTermination() throws InterruptedException;
abstract public boolean waitForTermination(long timeout) throws InterruptedException;
abstract public void populate(DataflowTestReport report) ;
static public class RecordMessageExtractor implements MessageExtractor {
@Override
public Message extract(byte[] message) {
Record record = JSONSerializer.INSTANCE.fromBytes(message, Record.class) ;
return MessageExtractor.DEFAULT_MESSAGE_EXTRACTOR.extract(record.getData()) ;
}
}
}