package org.ovirt.engine.api.restapi.util;
import static org.ovirt.engine.api.restapi.util.FenceOptionsParser.parse;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import org.ovirt.engine.api.model.Agent;
import org.ovirt.engine.api.model.Option;
public class FenceOptionsParserTest extends Assert {
private static final String FENCE_OPTION = "apc:secure=secure,port=ipport,slot=port;apc_snmp:port=port,"
+ "encrypt_options=encrypt_options;bladecenter:secure=secure,port=ipport,slot=port;cisco_ucs:secure=ssl,"
+ "slot=port;drac5:secure=secure,slot=port;drac7:;eps:slot=port;hpblade:port=port;ilo:secure=ssl,"
+ "port=ipport;ipmilan:;ilo2:secure=ssl,port=ipport;ilo3:;ilo4:;rsa:secure=secure,port=ipport;rsb:;"
+ "wti:secure=secure,port=ipport,slot=port";
private static final String FENCE_OPTION_TYPES = "encrypt_options=bool,secure=bool,port=int,slot=int";
@Test
public void testParseEmpty() {
List<Agent> ret = parse("", "");
assertNotNull(ret);
assertEquals(0, ret.size());
}
@Test
public void testParseSingle() {
List<Agent> ret = parse("foo:one=1,two=2,three=3", "one=bool,two=int,three=bool");
assertNotNull(ret);
assertEquals(1, ret.size());
verifyResult(ret.get(0),
"foo",
"one", "bool", "1",
"two", "int", "2",
"three", "bool", "3");
}
@Test
public void testParseMultiple() {
List<Agent> ret = parse("foo:one=1,two=2,three=3;bar:ninetynine=99",
"one=bool,two=int,three=bool,ninetynine=int");
assertNotNull(ret);
assertEquals(2, ret.size());
verifyResult(ret.get(0),
"foo",
"one", "bool", "1",
"two", "int", "2",
"three", "bool", "3");
verifyResult(ret.get(1),
"bar",
"ninetynine", "int", "99");
}
@Test
public void testParseIngoreValues() {
List<Agent> ret = parse("foo:one=1,two=2,three=3", "one=bool,two=int,three=bool", true);
assertNotNull(ret);
assertEquals(1, ret.size());
verifyResult(ret.get(0),
"foo",
"one", "bool", null,
"two", "int", null,
"three", "bool", null);
}
@Test
public void testParseStraySemiColons() {
List<Agent> ret = parse(";;foo:one=1,two=2,three=3;;", "one=bool,two=int,three=bool");
assertNotNull(ret);
assertEquals(1, ret.size());
verifyResult(ret.get(0),
"foo",
"one", "bool", "1",
"two", "int", "2",
"three", "bool", "3");
}
@Test
public void testParseStrayCommas() {
List<Agent> ret = parse("foo:,,one=1,,,two=2,,three=3,,", "one=bool,two=int,three=bool");
assertNotNull(ret);
assertEquals(1, ret.size());
verifyResult(ret.get(0),
"foo",
"one", "bool", "1",
"two", "int", "2",
"three", "bool", "3");
}
@Test
public void testParseNoOptions() {
List<Agent> ret = parse("foo:", "");
assertNotNull(ret);
assertEquals(1, ret.size());
verifyResult(ret.get(0), "foo");
}
@Test
public void testParseSecureOptions() {
List<Agent> ret = parse(FENCE_OPTION, FENCE_OPTION_TYPES);
assertNotNull(ret);
assertEquals(16, ret.size());
verifyResult(ret.get(1), "apc_snmp", "port", "int", "port", "encrypt_options", "bool", "encrypt_options");
}
@Test
public void testParseMissingType() {
List<Agent> ret = parse("foo:one=1", "two=int");
assertNotNull(ret);
assertEquals(1, ret.size());
verifyResult(ret.get(0), "foo");
}
@Test
public void testParseStrayColons() {
List<Agent> ret = parse("foo:::one=1,two=2,three=3", "one=bool,two=int,three=bool");
assertNotNull(ret);
assertEquals(0, ret.size());
}
@Test
public void testParseInvalidOption() {
List<Agent> ret = parse("foo:one=1,two=2,three", "one=bool,two=int,three=bool");
assertNotNull(ret);
assertEquals(1, ret.size());
verifyResult(ret.get(0),
"foo",
"one", "bool", "1",
"two", "int", "2");
}
private void verifyResult(Agent result, String type, String... options) {
assertEquals(type, result.getType());
assertNotNull(result.getOptions());
assertEquals(options.length, result.getOptions().getOptions().size() * 3);
for (int i = 0; i < options.length; i += 3) {
Option opt = result.getOptions().getOptions().get(i/3);
assertEquals(options[i], opt.getName());
assertEquals(options[i+1], opt.getType());
assertEquals(options[i+2], opt.getValue());
}
}
}