package co.nubetech.hiho.mapreduce.sf;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.junit.Test;
import co.nubetech.hiho.common.HIHOConf;
import co.nubetech.hiho.common.sf.SFHandler;
import com.sforce.async.AsyncApiException;
import com.sforce.async.BatchInfo;
import com.sforce.async.BulkConnection;
import com.sforce.async.JobInfo;
import com.sforce.ws.ConnectionException;
public class TestExportSalesforceMapper {
@Test
public final void testMapperForNullValues() throws IOException, InterruptedException, ConnectionException, AsyncApiException {
Mapper.Context context = mock(Mapper.Context.class);
SFHandler mockSFHandler = mock(SFHandler.class);
when(mockSFHandler.getBulkConnection(anyString(), anyString())).thenReturn(null);
BatchInfo batchInfo = new BatchInfo();
String id = "id";
batchInfo.setId(id);
when(mockSFHandler.createBatch(any(FSDataInputStream.class), any(BulkConnection.class), any(JobInfo.class))).thenReturn(
batchInfo);
ExportSalesforceMapper mapper = new ExportSalesforceMapper();
mapper.setSfHandler(mockSFHandler);
Text batchId = new Text(id);
mapper.setBatchId(batchId);
mapper.map(null, null, context);
}
@Test
public final void testSetup() throws IOException,
InterruptedException, ConnectionException, AsyncApiException {
Mapper.Context context = mock(Mapper.Context.class);
Configuration conf = new Configuration();
String user = "user";
String password = "pass";
String sObject = "Accounts";
conf.set(HIHOConf.SALESFORCE_USERNAME, user);
conf.set(HIHOConf.SALESFORCE_PASSWORD, password);
conf.set(HIHOConf.SALESFORCE_SOBJECTYPE, sObject);
when(context.getConfiguration()).thenReturn(conf);
SFHandler mockSFHandler = mock(SFHandler.class);
when(mockSFHandler.getBulkConnection(user, password)).thenReturn(null);
JobInfo info = new JobInfo();
String id = "id";
info.setId(id);
when(mockSFHandler.createJob(sObject, null)).thenReturn(info);
ExportSalesforceMapper mapper = new ExportSalesforceMapper();
mapper.setSfHandler(mockSFHandler);
mapper.setup(context);
verify(context, times(3)).getConfiguration();
verify(mockSFHandler, times(1)).getBulkConnection(user, password);
assertEquals(id, mapper.getJobId().toString());
}
/*
* conn=getConnection();
BatchInfo batch = sfHandler.createBatch(val, conn, job);
batchId.set(batch.getId());
context.write(jobId, batchId);
*/
@Test
public final void testMapper() throws IOException, InterruptedException, ConnectionException, AsyncApiException {
ExportSalesforceMapper mapper = new ExportSalesforceMapper();
BulkConnection conn = mock(BulkConnection.class);
SFHandler mockSFHandler = mock(SFHandler.class);
mapper.setConnection(conn);
mapper.setSfHandler(mockSFHandler);
Mapper.Context context = mock(Mapper.Context.class);
BatchInfo batchInfo = new BatchInfo();
String id = "id";
batchInfo.setId(id);
Text batchId = new Text();
mapper.setBatchId(batchId);
JobInfo info = new JobInfo();
String id1 = "id1";
info.setId(id1);
when(mockSFHandler.createBatch(any(FSDataInputStream.class), any(BulkConnection.class), any(JobInfo.class))).thenReturn(
batchInfo);
mapper.setSfHandler(mockSFHandler);
mapper.setJob(info);
mapper.setJobId(new Text(id1));
mapper.map(new Text("abc"), mock(FSDataInputStream.class), context);
assertEquals(id, batchId.toString());
verify(context, times(1)).write(new Text(info.getId()), batchId);
}
}