package org.cloudname.service;
import org.cloudname.core.CloudnamePath;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertThat;
public class InstanceCoordinateTest {
@Test
public void testCreation() {
final String[] path = new String[] { "region", "tag", "service", "instance" };
final InstanceCoordinate coordinate = new InstanceCoordinate(new CloudnamePath(path));
final String canonicalString = coordinate.toCanonicalString();
assertThat(canonicalString, is("instance.service.tag.region"));
final InstanceCoordinate fromCanonical = InstanceCoordinate.parse(canonicalString);
assertThat(fromCanonical.toCanonicalString(), is(canonicalString));
assertThat(fromCanonical.getRegion(), is(coordinate.getRegion()));
assertThat(fromCanonical.getTag(), is(coordinate.getTag()));
assertThat(fromCanonical.getService(), is(coordinate.getService()));
assertThat(fromCanonical.getInstance(), is(coordinate.getInstance()));
final String jsonString = coordinate.toJsonString();
final InstanceCoordinate fromJson = InstanceCoordinate.fromJson(jsonString);
assertThat(fromJson.getRegion(), is(coordinate.getRegion()));
assertThat(fromJson.getTag(), is(coordinate.getTag()));
assertThat(fromJson.getService(), is(coordinate.getService()));
assertThat(fromJson.getInstance(), is(coordinate.getInstance()));
assertThat(fromJson.toCanonicalString(), is(coordinate.toCanonicalString()));
}
@Test
public void testPathConversion() {
final CloudnamePath path = new CloudnamePath(
new String[] {"test", "local", "service", "instance" });
final InstanceCoordinate coordinate = new InstanceCoordinate(path);
final CloudnamePath cnPath = coordinate.toCloudnamePath();
assertThat(cnPath.length(), is(path.length()));
assertThat(cnPath, is(equalTo(path)));
}
/**
* Ensure toString() has a sensible representation ('ish)
*/
@Test
public void toStringMethod() {
final CloudnamePath pathA = new CloudnamePath(
new String[] {"test", "local", "service", "instance" });
final CloudnamePath pathB = new CloudnamePath(
new String[] {"test", "local", "service", "instance" });
final CloudnamePath pathC = new CloudnamePath(
new String[] {"test", "local", "service", "x" });
final InstanceCoordinate a = new InstanceCoordinate(pathA);
final InstanceCoordinate b = new InstanceCoordinate(pathB);
final InstanceCoordinate c = new InstanceCoordinate(pathC);
assertThat(a.toString(), is(a.toString()));
assertThat(a.toString(), is(not(c.toString())));
assertThat(a.toCanonicalString(), is(b.toCanonicalString()));
}
@Test
public void invalidStringConversion() {
assertThat(InstanceCoordinate.parse("foo:bar.baz"), is(nullValue()));
assertThat(InstanceCoordinate.parse(null), is(nullValue()));
assertThat(InstanceCoordinate.parse("foo.bar.baz"), is(nullValue()));
assertThat(InstanceCoordinate.parse(""), is(nullValue()));
}
@Test (expected = IllegalArgumentException.class)
public void invalidNames2() {
assertThat(InstanceCoordinate.parse("æ.ø.å.a"), is(nullValue()));
}
@Test (expected = IllegalArgumentException.class)
public void nullPathInConstructor() {
new InstanceCoordinate(null);
}
@Test (expected = IllegalArgumentException.class)
public void invalidPathInConstructor() {
new InstanceCoordinate(new CloudnamePath(new String[] { "foo" }));
}
}