blob: 0bcfa0ad367f04c5f06b6cde64278025c3085148 [file] [log] [blame]
/*
* Copyright 2021-present Open Networking Foundation
*
* 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.kubevirtnetworking.codec;
import com.fasterxml.jackson.databind.JsonNode;
import org.hamcrest.Description;
import org.hamcrest.TypeSafeDiagnosingMatcher;
import org.onosproject.kubevirtnetworking.api.KubevirtFloatingIp;
/**
* Hamcrest matcher for kubevirt router interface.
*/
public final class KubevirtFloatingIpJsonMatcher extends TypeSafeDiagnosingMatcher<JsonNode> {
private final KubevirtFloatingIp floatingIp;
private static final String ID = "id";
private static final String ROUTER_NAME = "routerName";
private static final String POD_NAME = "podName";
private static final String FLOATING_IP = "floatingIp";
private static final String FIXED_IP = "fixedIp";
private KubevirtFloatingIpJsonMatcher(KubevirtFloatingIp floatingIp) {
this.floatingIp = floatingIp;
}
@Override
protected boolean matchesSafely(JsonNode jsonNode, Description description) {
// check ID
String jsonId = jsonNode.get(ID).asText();
String id = floatingIp.id();
if (!jsonId.equals(id)) {
description.appendText("ID was " + jsonId);
return false;
}
// check router name
String jsonRouterName = jsonNode.get(ROUTER_NAME).asText();
String routerName = floatingIp.routerName();
if (!jsonRouterName.equals(routerName)) {
description.appendText("Router name was " + jsonRouterName);
return false;
}
// check floating IP
String jsonFip = jsonNode.get(FLOATING_IP).asText();
String fip = floatingIp.floatingIp().toString();
if (!jsonFip.equals(fip)) {
description.appendText("Floating IP was " + jsonFip);
return false;
}
// check POD name
JsonNode jsonPodName = jsonNode.get(POD_NAME);
if (jsonPodName != null) {
if (!floatingIp.podName().equals(jsonPodName.asText())) {
description.appendText("POD name was " + jsonPodName);
return false;
}
}
// check fixed IP
JsonNode jsonFixedIp = jsonNode.get(FIXED_IP);
if (jsonFixedIp != null) {
if (!floatingIp.fixedIp().toString().equals(jsonFixedIp.asText())) {
description.appendText("Fixed IP was " + jsonFixedIp);
return false;
}
}
return true;
}
@Override
public void describeTo(Description description) {
description.appendText(floatingIp.toString());
}
/**
* Factory to allocate a kubevirt floating IP matcher.
*
* @param fip kubevirt floating IP object we are looking for
* @return matcher
*/
public static KubevirtFloatingIpJsonMatcher matchesKubevirtFloatingIp(KubevirtFloatingIp fip) {
return new KubevirtFloatingIpJsonMatcher(fip);
}
}