/**
* Copyright (c) Istituto Nazionale di Fisica Nucleare, 2006-2014.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.italiangrid.voms.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import java.net.URISyntaxException;
import org.hamcrest.CoreMatchers;
import org.italiangrid.voms.VOMSError;
import org.italiangrid.voms.request.VOMSServerInfo;
import org.italiangrid.voms.request.impl.VOMSESLineParser;
import org.junit.Test;
public class TestVOMSESLineParser {
@Test
public void nullLineFailure() throws URISyntaxException {
String line = null;
try {
VOMSESLineParser p = new VOMSESLineParser();
p.parse(line);
fail("No error raised.");
} catch (VOMSError e) {
assertNotNull("Got a null error message", e.getMessage());
assertEquals("Cannot parse a null VOMSES line", e.getMessage());
}
}
@Test
public void emptyLineReturnsNull() throws URISyntaxException {
String line = "";
VOMSESLineParser p = new VOMSESLineParser();
VOMSServerInfo i = p.parse(line);
assertNull(i);
}
@Test
public void emptyAlias() {
String line = "\"\"";
try {
VOMSESLineParser p = new VOMSESLineParser();
p.parse(line);
fail("No error raised.");
} catch (VOMSError e) {
assertNotNull("Got a null error message", e.getMessage());
assertThat(e.getMessage(),
CoreMatchers
.containsString("Invalid VOMSES line: empty 'vo alias' field."));
}
}
@Test
public void incompleteAlias() {
String line = "\"incomplete-alias";
try {
VOMSESLineParser p = new VOMSESLineParser();
p.parse(line);
fail("No error raised.");
} catch (VOMSError e) {
assertNotNull("Got a null error message", e.getMessage());
assertThat(e.getMessage(),
CoreMatchers
.containsString("Invalid VOMSES line: incomplete 'vo alias' field."));
}
}
@Test
public void incompleteHost() {
String line = "\"alias\" \"voms.cnaf.infn.it";
try {
VOMSESLineParser p = new VOMSESLineParser();
p.parse(line);
fail("No error raised.");
} catch (VOMSError e) {
assertNotNull("Got a null error message", e.getMessage());
assertThat(e.getMessage(),
CoreMatchers
.containsString("Invalid VOMSES line: incomplete 'voms host' field."));
}
}
@Test
public void onlyAlias() {
String line = "\"ciccio\" ";
try {
VOMSESLineParser p = new VOMSESLineParser();
p.parse(line);
fail("No error raised.");
} catch (VOMSError e) {
assertNotNull("Got a null error message", e.getMessage());
assertThat(e.getMessage(),
CoreMatchers
.containsString("Invalid VOMSES line: incomplete information"));
}
}
@Test
public void minimumInfoFailure() {
String line = "\t\"a\" \"voms.cern.ch\" \t \"15000\" \"DN=Illo\"";
try {
VOMSESLineParser p = new VOMSESLineParser();
p.parse(line);
fail("No error raised.");
} catch (VOMSError e) {
assertNotNull("Got a null error message", e.getMessage());
assertThat(e.getMessage(),
CoreMatchers
.containsString("Invalid VOMSES line: incomplete information"));
}
}
@Test
public void minimumInfo() {
String line = "\t\"a\" \"voms.cern.ch\" \t \"15000\" \"DN=Illo\" \"alice\" ";
VOMSESLineParser p = new VOMSESLineParser();
VOMSServerInfo i = p.parse(line);
assertThat(i.getAlias(), CoreMatchers.equalTo("a"));
assertThat(i.getURL().toString(),
CoreMatchers.equalTo("voms://voms.cern.ch:15000"));
assertThat(i.getVoName(), CoreMatchers.equalTo("alice"));
assertThat(i.getVOMSServerDN(), CoreMatchers.equalTo("DN=Illo"));
}
@Test
public void whitespaceHandling() {
String line = "\t\"a\" \"voms.cern.ch\" \t \"15000\" \"DN=Illo\" \"alice\" \"24\"";
VOMSESLineParser p = new VOMSESLineParser();
VOMSServerInfo i = p.parse(line);
assertThat(i.getAlias(), CoreMatchers.equalTo("a"));
assertThat(i.getURL().toString(),
CoreMatchers.equalTo("voms://voms.cern.ch:15000"));
assertThat(i.getVoName(), CoreMatchers.equalTo("alice"));
assertThat(i.getVOMSServerDN(), CoreMatchers.equalTo("DN=Illo"));
}
@Test
public void tooManyFields() {
String line = "\t\"a\" \"voms.cern.ch\" \t \"15000\" \"DN=Illo\" \"alice\" \"24\" \"Too much\"";
try {
VOMSESLineParser p = new VOMSESLineParser();
p.parse(line);
fail("No error raised.");
} catch (VOMSError e) {
assertNotNull("Got a null error message", e.getMessage());
assertThat(e.getMessage(),
CoreMatchers.containsString("Invalid VOMSES line: too many fields!"));
}
}
@Test
public void invalidPort() {
String line = "\t\"a\" \"voms.cern.ch\" \t \"ciccio\" \"DN=Illo\" \"alice\"";
try {
VOMSESLineParser p = new VOMSESLineParser();
p.parse(line);
fail("No error raised.");
} catch (VOMSError e) {
assertNotNull("Got a null error message", e.getMessage());
assertThat(e.getMessage(),
CoreMatchers
.containsString("Invalid VOMSES line: invalid port number."));
}
}
@Test
public void portOutOfRange1() {
String line = "\t\"a\" \"voms.cern.ch\" \t \"-1\" \"DN=Illo\" \"alice\"";
try {
VOMSESLineParser p = new VOMSESLineParser();
p.parse(line);
fail("No error raised.");
} catch (VOMSError e) {
assertNotNull("Got a null error message", e.getMessage());
assertThat(e.getMessage(),
CoreMatchers
.containsString("Invalid VOMSES line: invalid port number: -1"));
}
}
@Test
public void portOutOfRange2() {
String line = "\t\"a\" \"voms.cern.ch\" \t \"65536\" \"DN=Illo\" \"alice\"";
try {
VOMSESLineParser p = new VOMSESLineParser();
p.parse(line);
fail("No error raised.");
} catch (VOMSError e) {
assertNotNull("Got a null error message", e.getMessage());
assertThat(e.getMessage(),
CoreMatchers
.containsString("Invalid VOMSES line: invalid port number: 65536"));
}
}
@Test
public void tooMultiCall() {
String line0 = "\"a\" \"voms.cern.ch\" \"15000\" \"DN=Illo\" \"alice\"";
String line1 = "\"b\" \"voms.cern.ch\" \"15001\" \"DN=IllY\" \"bolice\"";
VOMSESLineParser p = new VOMSESLineParser();
VOMSServerInfo i0 = p.parse(line0);
VOMSServerInfo i1 = p.parse(line1);
assertThat(i0.getAlias(), CoreMatchers.equalTo("a"));
assertThat(i0.getURL().toString(),
CoreMatchers.equalTo("voms://voms.cern.ch:15000"));
assertThat(i0.getVoName(), CoreMatchers.equalTo("alice"));
assertThat(i1.getAlias(), CoreMatchers.equalTo("b"));
assertThat(i1.getURL().toString(),
CoreMatchers.equalTo("voms://voms.cern.ch:15001"));
assertThat(i1.getVoName(), CoreMatchers.equalTo("bolice"));
}
}