package io.pcp.parfait.dxm;
import static io.pcp.parfait.dxm.StringParsingIdentifierSourceSetTest.FIXED_FALLBACK;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
import java.util.Collections;
import java.util.Set;
import org.junit.Test;
public class FileParsingIdentifierSourceSetTest {
private static final String METRIC_NAME = "cheese.price";
private static final int METRIC_ID = 123;
private static final String DOMAIN_NAME = "cheese";
private static final int DOMAIN_ID = 456;
private static final String WHITESPACE = " ";
private static final String INSTANCE_NAME = "gouda";
private static final int INSTANCE_ID = 789;
private static final String METRIC_FILE = METRIC_NAME + WHITESPACE + METRIC_ID;
private static final String DOMAIN_LINE = DOMAIN_NAME + WHITESPACE + DOMAIN_ID;
private static final String INSTANCE_LINE = WHITESPACE + INSTANCE_NAME + WHITESPACE
+ INSTANCE_ID;
private static final String INSTANCE_FILE = DOMAIN_LINE + "\n" + INSTANCE_LINE;
private static final Set<Integer> NO_IDS = Collections.<Integer> emptySet();
@Test
public void nullFileShouldUseDefaultMetricSource() {
assertEquals(FIXED_FALLBACK, buildFileSet(null, null).metricSource().calculateId(
METRIC_NAME, NO_IDS));
}
@Test
public void nullFileShouldUseDefaultInstanceSource() {
assertEquals(FIXED_FALLBACK, buildFileSet(null, null).instanceDomainSource().calculateId(
INSTANCE_NAME, NO_IDS));
}
@Test
public void metricValuesShouldBeParsedFromFile() {
assertEquals(METRIC_ID, buildFileSet(null, tempFile(METRIC_FILE)).metricSource()
.calculateId(METRIC_NAME, NO_IDS));
}
@Test
public void instanceDomainValuesShouldBeParsedFromFile() {
assertEquals(DOMAIN_ID, buildFileSet(tempFile(INSTANCE_FILE), null).instanceDomainSource()
.calculateId(DOMAIN_NAME, NO_IDS));
}
@Test
public void instanceValuesShouldBeParsedFromFile() {
assertEquals(INSTANCE_ID, buildFileSet(tempFile(INSTANCE_FILE), null).instanceSource(
DOMAIN_NAME).calculateId(INSTANCE_NAME, NO_IDS));
}
@Test
public void metricValuesShouldBeParsedFromStream() {
assertEquals(METRIC_ID, buildStreamSet(null, tempStream(METRIC_FILE)).metricSource()
.calculateId(METRIC_NAME, NO_IDS));
}
@Test
public void instanceDomainValuesShouldBeParsedFromStream() {
assertEquals(DOMAIN_ID, buildStreamSet(tempStream(INSTANCE_FILE), null)
.instanceDomainSource().calculateId(DOMAIN_NAME, NO_IDS));
}
@Test
public void instanceValuesShouldBeParsedFromStream() {
assertEquals(INSTANCE_ID, buildStreamSet(tempStream(INSTANCE_FILE), null).instanceSource(
DOMAIN_NAME).calculateId(INSTANCE_NAME, NO_IDS));
}
@Test
public void metricValuesShouldBeParsedFromReader() {
assertEquals(METRIC_ID, buildReaderSet(null, tempReader(METRIC_FILE)).metricSource()
.calculateId(METRIC_NAME, NO_IDS));
}
@Test
public void instanceDomainValuesShouldBeParsedFromReader() {
assertEquals(DOMAIN_ID, buildReaderSet(tempReader(INSTANCE_FILE), null)
.instanceDomainSource().calculateId(DOMAIN_NAME, NO_IDS));
}
@Test
public void instanceValuesShouldBeParsedFromReader() {
assertEquals(INSTANCE_ID, buildReaderSet(tempReader(INSTANCE_FILE), null).instanceSource(
DOMAIN_NAME).calculateId(INSTANCE_NAME, NO_IDS));
}
private File tempFile(String contents) {
try {
File output = File.createTempFile("parfait-fileparsing", "test");
output.deleteOnExit();
Writer outWriter = new FileWriter(output);
outWriter.write(contents);
outWriter.close();
return output;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private InputStream tempStream(String contents) {
return new ByteArrayInputStream(contents.getBytes());
}
private Reader tempReader(String contents) {
return new StringReader(contents);
}
private IdentifierSourceSet buildFileSet(File instances, File metrics) {
return new FileParsingIdentifierSourceSet(instances, metrics,
StringParsingIdentifierSourceSetTest.FALLBACK_SOURCES);
}
private IdentifierSourceSet buildStreamSet(InputStream instances, InputStream metrics) {
return new FileParsingIdentifierSourceSet(instances, metrics,
StringParsingIdentifierSourceSetTest.FALLBACK_SOURCES);
}
private IdentifierSourceSet buildReaderSet(Reader instances, Reader metrics) {
return new FileParsingIdentifierSourceSet(instances, metrics,
StringParsingIdentifierSourceSetTest.FALLBACK_SOURCES);
}
}