/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.openstack.atlas.api.validation.validators;
import org.openstack.atlas.docs.loadbalancers.api.v1.HealthMonitor;
import org.openstack.atlas.docs.loadbalancers.api.v1.HealthMonitorType;
import org.openstack.atlas.api.validation.results.ValidatorResult;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import static org.openstack.atlas.docs.loadbalancers.api.v1.HealthMonitorType.CONNECT;
import static org.openstack.atlas.docs.loadbalancers.api.v1.HealthMonitorType.HTTP;
import static org.openstack.atlas.api.helpers.ResultMessage.resultMessage;
import static org.openstack.atlas.api.validation.context.HttpRequestType.POST;
import static org.openstack.atlas.api.validation.context.HttpRequestType.PUT;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@RunWith(Enclosed.class)
public class HealthMonitorValidatorTest {
public static class whenValidatingPut {
private final int MAXSTR = 128;
private HealthMonitorValidator hmv;
private HealthMonitor hm;
private ValidatorResult result;
private final String bigStr = getBigStr(MAXSTR);
public static Integer intornull(String int_str) {
return (int_str == null) ? null : Integer.parseInt(int_str);
}
public static HealthMonitor initHealthMonitor(String i, HealthMonitorType type, String d, String to, String abd, String p, String sr, String br) {
HealthMonitor nhm = new HealthMonitor();
nhm.setId(intornull(i));
nhm.setType(type);
nhm.setDelay(intornull(d));
nhm.setTimeout(intornull(to));
nhm.setAttemptsBeforeDeactivation(intornull(abd));
nhm.setPath(p);
nhm.setStatusRegex(sr);
nhm.setBodyRegex(br);
return nhm;
}
private String getBigStr(int size) {
int i;
StringBuilder sb = new StringBuilder();
for (i = 0; i <= size; i++) {
sb.append("X");
}
return sb.toString();
}
@Before
public void setup() {
int i;
hmv = new HealthMonitorValidator();
hm = new HealthMonitor();
}
@Test
public void shouldRejectInvalidStatusRegex() {
hm = initHealthMonitor(null, HTTP, "10", null, null, "/", "^*****[234][0-9][0-9]$", null);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidStatusRegex() {
hm = initHealthMonitor(null, HTTP, "10", null, null, "/", "^[234][0-9][0-9]$", null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectInvalidBodyRegex() {
hm = initHealthMonitor(null, HTTP, "10", null, null, "/", null, "^*****[234][0-9][0-9]$");
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidBodyRegex() {
hm = initHealthMonitor(null, HTTP, "10", null, null, "/", null, "^[234][0-9][0-9]$");
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidPath() {
hm = initHealthMonitor(null, HTTP, "10", null, null, "/", null, null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidPathWithLongPath() {
hm = initHealthMonitor(null, HTTP, "10", null, null, "/fail/this/should/not/fail", null, null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectInalidPath() {
hm = initHealthMonitor(null, HTTP, "10", null, null, "FAIL", null, null);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidPathPost() {
hm = initHealthMonitor(null, HTTP, "10", null, null, "/", null, null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, POST), result.passedValidation());
}
@Test
public void shouldAcceptValidPathWithLongPathPost() {
hm = initHealthMonitor(null, HTTP, "10", null, null, "/fail/this/should/not/fail", null, null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, POST), result.passedValidation());
}
@Test
public void shouldRejectInalidPathPost() {
hm = initHealthMonitor(null, HTTP, "10", null, null, "FAIL", null, null);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, POST), result.passedValidation());
}
@Test
public void ShouldAcceptValidPutConnectDelay() {
hm = initHealthMonitor(null, CONNECT, "10", null, null, null, null, null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void ShouldAcceptValidConnectPutTimeout() {
hm = initHealthMonitor(null, CONNECT, null, "12", null, null, null, null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void ShouldAcceptValidConnectPutABD() {
hm = initHealthMonitor(null, CONNECT, null, null, "10", null, null, null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void ShouldRejectConnectionPutWithNoConnectionAttributes() {
hm = initHealthMonitor(null, CONNECT, null, null, null, null, null, null);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectConnectionPutwithOutRegEx() {
hm = initHealthMonitor(null, CONNECT, "10", "20", "10", "/mnt/pfft", null, null);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectConnectionPutwithoutPathOrBodyRegEx() {
hm = initHealthMonitor(null, CONNECT, "10", "20", "10", null, ".*", null);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectConnectionPutwithoutBodyRegEx() {
hm = initHealthMonitor(null, CONNECT, "10", "20", "10", "/mnt/pfft", null, ".*");
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidHTTP() {
hm = initHealthMonitor(null, HTTP, "10", "20", "10", "/mnt/pfft", ".*", ".*");
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectBlankType() {
hm = initHealthMonitor(null, null, "10", "20", "10", "/mnt/pfft", ".*", ".*");
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidPutHttpDelay() {
hm = initHealthMonitor(null, HTTP, "10", null, null, null, null, null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidPutHttpTimeout() {
hm = initHealthMonitor(null, HTTP, null, "30", null, null, null, null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidPutHttpABD() {
hm = initHealthMonitor(null, HTTP, null, null, "10", null, null, null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidPutHttpPath() {
hm = initHealthMonitor(null, HTTP, null, null, null, "/mnt/haha", null, null);
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidPutHttpStatusRegex() {
hm = initHealthMonitor(null, HTTP, null, null, null, null, ".*", ".*");
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldAcceptValidPutHttpBodyRegex() {
hm = initHealthMonitor(null, HTTP, null, null, null, null, null, ".*");
result = hmv.validate(hm, PUT);
assertTrue(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectPutWithNoHttpAttributes() {
hm = initHealthMonitor(null, HTTP, null, null, null, null, null, null);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectPutConnesWithOutType() {
hm = initHealthMonitor(null, null, "10", "20", "10", null, null, null);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectPutHttpssWithOutType() {
hm = initHealthMonitor(null, null, "10", "20", "10", "/mnt/pfft", ".*", ".*");
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectInvalidDelayRangeMin() {
hm.setDelay(0);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectInvalidDelayRangeMax() {
hm.setDelay(3601);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectInvalidTimeoutRangeMin() {
hm.setDelay(0);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectInvalidTimeoutRangeMax() {
hm.setDelay(301);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectInvalidAttemptsBeforeDeactivationRangeMin() {
hm.setDelay(0);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectInvalidAttemptsBeforeDeactivationRangeMax() {
hm.setDelay(11);
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectPathBiggerthen128Chars() {
hm = initHealthMonitor(null, HTTP, "10", "20", "10", bigStr, ".*", ".*");
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
@Test
public void shouldRejectBodyRegExBiggerthen128Chars() {
hm = initHealthMonitor(null, HTTP, "10", "20", "10", "/mnt/pfft", bigStr, ".*");
result = hmv.validate(hm, PUT);
assertFalse(resultMessage(result, PUT), result.passedValidation());
}
}
}