blob: cf17478910d63cad3f8908e18786f18f6b5cbb92 [file] [log] [blame]
/*
* Copyright 2015-present Open Networking Laboratory
*
* 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.onosproject.codec.impl;
import java.util.Map;
import org.hamcrest.Description;
import org.hamcrest.TypeSafeDiagnosingMatcher;
import org.onosproject.net.driver.Driver;
import com.fasterxml.jackson.databind.JsonNode;
/**
* Hamcrest matcher for drivers.
*/
public final class DriverJsonMatcher extends TypeSafeDiagnosingMatcher<JsonNode> {
private final Driver driver;
private DriverJsonMatcher(Driver driver) {
this.driver = driver;
}
@Override
public boolean matchesSafely(JsonNode jsonDriver, Description description) {
// check id
String jsonDriverName = jsonDriver.get("name").asText();
String driverName = driver.name();
if (!jsonDriverName.equals(driverName)) {
description.appendText("name was " + jsonDriverName);
return false;
}
// check parent
String jsonParent = jsonDriver.get("parent").asText();
String parent = driver.parent().name();
if (!jsonParent.equals(parent)) {
description.appendText("parent was " + jsonParent);
return false;
}
// check manufacturer
String jsonManufacturer = jsonDriver.get("manufacturer").asText();
String manufacturer = driver.manufacturer();
if (!jsonManufacturer.equals(manufacturer)) {
description.appendText("manufacturer was " + jsonManufacturer);
return false;
}
// check HW version
String jsonHWVersion = jsonDriver.get("hwVersion").asText();
String hwVersion = driver.hwVersion();
if (!jsonHWVersion.equals(hwVersion)) {
description.appendText("HW version was " + jsonHWVersion);
return false;
}
// check SW version
String jsonSWVersion = jsonDriver.get("swVersion").asText();
String swVersion = driver.swVersion();
if (!jsonSWVersion.equals(swVersion)) {
description.appendText("SW version was " + jsonSWVersion);
return false;
}
// Check properties
JsonNode jsonProperties = jsonDriver.get("properties");
if (driver.properties().size() != jsonProperties.size()) {
description.appendText("properties map size was was " + jsonProperties.size());
return false;
}
for (Map.Entry<String, String> entry : driver.properties().entrySet()) {
boolean propertyFound = false;
for (int propertyIndex = 0; propertyIndex < jsonProperties.size(); propertyIndex++) {
String jsonName = jsonProperties.get(propertyIndex).get("name").asText();
String jsonValue = jsonProperties.get(propertyIndex).get("value").asText();
if (!jsonName.equals(entry.getKey()) ||
!jsonValue.equals(entry.getValue())) {
propertyFound = true;
break;
}
}
if (!propertyFound) {
description.appendText("property not found " + entry.getKey());
return false;
}
}
return true;
}
@Override
public void describeTo(Description description) {
description.appendText(driver.toString());
}
/**
* Factory to allocate a driver matcher.
*
* @param driver driver object we are looking for
* @return matcher
*/
public static DriverJsonMatcher matchesDriver(Driver driver) {
return new DriverJsonMatcher(driver);
}
}