package azkaban.jobcallback;
import static azkaban.jobcallback.JobCallbackConstants.DEFAULT_MAX_CALLBACK_COUNT;
import static azkaban.jobcallback.JobCallbackConstants.MAX_CALLBACK_COUNT_PROPERTY_KEY;
import static azkaban.jobcallback.JobCallbackConstants.MAX_POST_BODY_LENGTH_PROPERTY_KEY;
import java.util.HashSet;
import java.util.Set;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import azkaban.utils.Props;
public class JobCallbackValidatorTest {
private Props serverProps;
@Before
public void setup() {
serverProps = new Props();
serverProps
.put(MAX_CALLBACK_COUNT_PROPERTY_KEY, DEFAULT_MAX_CALLBACK_COUNT);
}
@Test
public void noJobCallbackProps() {
Props jobProps = new Props();
Set<String> errors = new HashSet<String>();
Assert.assertEquals(0, JobCallbackValidator.validate("bogusJob",
serverProps, jobProps, errors));
Assert.assertEquals(0, errors.size());
}
@Test
public void sequenceStartWithZeroProps() {
Props jobProps = new Props();
Set<String> errors = new HashSet<String>();
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".0.url",
"http://www.linkedin.com");
jobProps.put("job.notification."
+ JobCallbackStatusEnum.COMPLETED.name().toLowerCase() + ".1.url",
"http://www.linkedin.com");
Assert.assertEquals(1, JobCallbackValidator.validate("bogusJob",
serverProps, jobProps, errors));
Assert.assertEquals(1, errors.size());
}
@Test
public void oneGetJobCallback() {
Props jobProps = new Props();
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.url",
"http://www.linkedin.com");
Set<String> errors = new HashSet<String>();
Assert.assertEquals(1, JobCallbackValidator.validate("bogusJob",
serverProps, jobProps, errors));
Assert.assertEquals(0, errors.size());
}
@Test
public void onePostJobCallback() {
Props jobProps = new Props();
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.url",
"http://www.linkedin.com");
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.method",
JobCallbackConstants.HTTP_POST);
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.body",
"doc:id");
Set<String> errors = new HashSet<String>();
Assert.assertEquals(1, JobCallbackValidator.validate("bogusJob",
serverProps, jobProps, errors));
Assert.assertEquals(0, errors.size());
}
@Test
public void multiplePostJobCallbacks() {
Props jobProps = new Props();
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.url",
"http://www.linkedin.com");
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.method",
JobCallbackConstants.HTTP_POST);
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.body",
"doc:id");
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".2.url",
"http://www.linkedin2.com");
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".2.method",
JobCallbackConstants.HTTP_POST);
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".2.body",
"doc2:id");
Set<String> errors = new HashSet<String>();
Assert.assertEquals(2, JobCallbackValidator.validate("bogusJob",
serverProps, jobProps, errors));
Assert.assertEquals(0, errors.size());
}
@Test
public void noPostBodyJobCallback() {
Props jobProps = new Props();
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.url",
"http://www.linkedin.com");
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.method",
JobCallbackConstants.HTTP_POST);
Set<String> errors = new HashSet<String>();
Assert.assertEquals(0, JobCallbackValidator.validate("bogusJob",
serverProps, jobProps, errors));
Assert.assertEquals(1, errors.size());
System.out.println(errors);
}
@Test
public void multipleGetJobCallbacks() {
Props jobProps = new Props();
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.url",
"http://www.linkedin.com");
jobProps.put("job.notification."
+ JobCallbackStatusEnum.STARTED.name().toLowerCase() + ".1.url",
"http://www.linkedin.com");
Set<String> errors = new HashSet<String>();
Assert.assertEquals(2, JobCallbackValidator.validate("bogusJob",
serverProps, jobProps, errors));
Assert.assertEquals(0, errors.size());
}
@Test
public void multipleGetJobCallbackWithGap() {
Props jobProps = new Props();
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.url",
"http://www.linkedin.com");
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".2.url",
"http://www.linkedin.com");
jobProps.put("job.notification."
+ JobCallbackStatusEnum.STARTED.name().toLowerCase() + ".2.url",
"http://www.linkedin.com");
Set<String> errors = new HashSet<String>();
Assert.assertEquals(2, JobCallbackValidator.validate("bogusJob",
serverProps, jobProps, errors));
Assert.assertEquals(0, errors.size());
}
@Test
public void postBodyLengthTooLargeTest() {
Props jobProps = new Props();
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.url",
"http://www.linkedin.com");
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.method",
JobCallbackConstants.HTTP_POST);
String postBodyValue = "abcdefghijklmnopqrstuvwxyz";
int postBodyLength = 20;
Assert.assertTrue(postBodyValue.length() > postBodyLength);
jobProps.put("job.notification."
+ JobCallbackStatusEnum.FAILURE.name().toLowerCase() + ".1.body",
postBodyValue);
Props localServerProps = new Props();
localServerProps.put(MAX_POST_BODY_LENGTH_PROPERTY_KEY, postBodyLength);
Set<String> errors = new HashSet<String>();
Assert.assertEquals(0, JobCallbackValidator.validate("bogusJob",
localServerProps, jobProps, errors));
System.out.println(errors);
Assert.assertEquals(1, errors.size());
}
}