package com.neverwinterdp.scribengin.storage.s3;
import java.util.UUID;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import com.neverwinterdp.scribengin.Record;
import com.neverwinterdp.scribengin.storage.StorageDescriptor;
import com.neverwinterdp.scribengin.storage.s3.S3Client;
import com.neverwinterdp.scribengin.storage.s3.sink.S3Sink;
import com.neverwinterdp.scribengin.storage.sink.SinkStream;
import com.neverwinterdp.scribengin.storage.sink.SinkStreamWriter;
public class S3SinkSourceIntegrationTest {
static public String BUCKET_NAME ;
static public String STORAGE_PATH = "database";
static S3Client s3Client ;
@BeforeClass
static public void beforeClass() {
BUCKET_NAME = "sink-source-test-" + UUID.randomUUID();
s3Client = new S3Client() ;
s3Client.onInit();
if(s3Client.hasBucket(BUCKET_NAME)) {
s3Client.deleteBucket(BUCKET_NAME, true);
}
s3Client.createBucket(BUCKET_NAME);
s3Client.createS3Folder(BUCKET_NAME, STORAGE_PATH);
//TODO: You may need to remove this and really create a stream with some data
//in order the source can work properly
s3Client.createS3Folder(BUCKET_NAME, STORAGE_PATH + "/stream-0");
s3Client.createS3Folder(BUCKET_NAME, STORAGE_PATH + "/stream-1");
}
@AfterClass
static public void afterClass() {
s3Client.deleteBucket(BUCKET_NAME, true);
s3Client.onDestroy();
}
@Test
public void testSink() throws Exception {
StorageDescriptor sinkDescriptor = new StorageDescriptor() ;
sinkDescriptor.attribute("s3.bucket.name", BUCKET_NAME);
sinkDescriptor.attribute("s3.storage.path", STORAGE_PATH);
S3Sink sink = new S3Sink(s3Client, sinkDescriptor);
Assert.assertNotNull(sink.getSinkFolder());
SinkStream stream3 = sink.newStream() ;
SinkStream[] streams = sink.getStreams() ;
Assert.assertEquals(3, streams.length);
for(int i = 0; i < 3; i++) {
SinkStreamWriter writer = stream3.getWriter();
for(int j = 0; j < 100; j ++) {
String key = "stream=" + stream3.getDescriptor().getId() +",buffer=" + i + ",record=" + j;
writer.append(Record.create(key, key));
}
writer.commit();
writer.close() ;
}
}
}