...
Code Block |
---|
language | java |
---|
title | Custom Mock Example |
---|
|
private static class TestIntentCompilerError implements IntentCompiler<Intent> {
@Override
public List<Intent> compile(Intent intent, List<Intent> installable,
Set<LinkResourceAllocations> resources) {
throw new IntentCompilationException("Compilation always fails");
}
}
/**
* Tests for proper behavior of installation of an intent that triggers
* a compilation error.
*/
@Test
public void errorIntentCompile() {
final TestIntentCompilerError errorCompiler = new TestIntentCompilerError();
final IntentManager intentManager = new IntentManager();
final IntentExtensionService extensionService = intentManager;
final IntentService intentService = intentManager;
extensionService.registerCompiler(MyIntent.class, errorCompiler);
MyIntent intent = new MyIntent();
// Invoke the error compiler
intentService.submit(myIntent);
} |
Hamcrest
Hamcrest is a powerful framework for defining matchers for data values in tests. ONOS uses version 1.3 of Hamcrest. Contributors are encouraged to learn about and use the Hamcrest framework, particularly when working with arrays and collections. Hamcrest also gives you the ability to write your own matchers, which will make your tests easier to read and easier to extend by other developers.
Here is an example of a custom Hamcrest matcher, that matches a Criterion type in a TrafficSelector object:
Code Block |
---|
language | java |
---|
title | Hamcrest Matcher for Criterion Type |
---|
|
/**
* Hamcrest matcher to check that a selector contains a
* Criterion with the specified type.
*/
public static final class CriterionExistsMatcher
extends TypeSafeMatcher<TrafficSelector> {
private final Criterion.Type type;
/**
* Constructs a matcher for the given criterion type.
*
* @param typeValue criterion type to match
*/
public CriterionExistsMatcher(Criterion.Type typeValue) {
type = typeValue;
}
@Override
public boolean matchesSafely(TrafficSelector selector) {
final Set<Criterion> criteria = selector.criteria();
return notNullValue().matches(criteria) &&
hasSize(1).matches(criteria) &&
notNullValue().matches(selector.getCriterion(type));
}
@Override
public void describeTo(Description description) {
description.appendText("a criterion with type \" ").
appendText(type.toString()).
appendText("\"");
}
}
/**
* Creates a criterion type matcher. Returns a matcher
* for a criterion with the given type.
*
* @param type type of Criterion to match
* @return Matcher object
*/
@Factory
public static Matcher<TrafficSelector> hasCriterionWithType(Criterion.Type type) {
return new CriterionExistsMatcher(type);
}
/**
* Tests the builder functions that add specific criteria.
*/
@Test
public void testCriteriaCreation() {
TrafficSelector selector;
selector = DefaultTrafficSelector.builder()
.matchInport(PortNumber.portNumber(11)).build();
assertThat(selector, hasCriterionWithType(Type.IN_PORT));
} |
Add library for Unit Test
If you are using a library for Unit Test other than the above, please add the library to the build path. You can modify the lib/deps.json file where we keep track of external libraries and then run “onos-lib-gen” tool to update the lib/BUCK file.
Code Block |
---|
language | bash |
---|
title | Modify the lib/deps.json file |
---|
|
vi lib/deps.json |
Code Block |
---|
|
{
"libraries": {
・・・
,
"TEST": [
"[new library name]",
"junit",
"easymock",
"hamcrest-all",
"hamcrest-optional",
"guava-testlib",
"//utils/junit:onlab-junit"
],
・・・
},
"artifacts": {
・・・
"jsch":"mvn:com.jcraft:jsch:0.1.53",
"[new library name]":"mvn:[new library path]:[new library version]",
"junit":"mvn:junit:junit:4.12",
"junit-dep":"mvn:junit:junit:4.10",
・・・
}
} |
Code Block |
---|
language | bash |
---|
title | Update the lib/BUCK file |
---|
|
tools/build/onos-lib-gen |
...
Home : Contributing to the ONOS Codebase
...