jiangrui
Committed by Gerrit Code Review

[ONOS2822]: add implementation of router api DefaultRouter and UT DefaultRouteTest

Change-Id: Ia13b56c5bb24c359b3a3ce6164cc9c84e52b5143
/*
* Copyright 2015 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.vtnrsc;
import static com.google.common.base.MoreObjects.toStringHelper;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.List;
import java.util.Objects;
/**
* Default implementation of router interface.
*/
public final class DefaultRouter implements Router {
private final RouterId id;
private final String name;
private final boolean adminStateUp;
private final Status status;
private final boolean distributed;
private final RouterGateway externalGatewayInfo;
private final VirtualPortId gatewayPortId;
private final TenantId tenantId;
private final List<String> routes;
/**
* Creates router object.
*
* @param id router identifier
* @param routerName the name of router
* @param adminStateUp the status of admin state
* @param status the status of router
* @param distributed the status of router distributed
* @param externalGatewayInfo the gateway info of router
* @param gatewayPortId the port identifier of router gateway
* @param tenantId the tenant identifier
* @param routes the routes configure
*/
public DefaultRouter(RouterId id, String routerName, boolean adminStateUp,
Status status, boolean distributed,
RouterGateway externalGatewayInfo,
VirtualPortId gatewayPortId, TenantId tenantId,
List<String> routes) {
this.id = checkNotNull(id, "id cannot be null");
this.name = routerName;
this.adminStateUp = checkNotNull(adminStateUp, "adminStateUp cannot be null");
this.status = checkNotNull(status, "status cannot be null");
this.distributed = checkNotNull(distributed, "distributed cannot be null");
this.externalGatewayInfo = externalGatewayInfo;
this.gatewayPortId = gatewayPortId;
this.tenantId = checkNotNull(tenantId, "tenantId cannot be null");
this.routes = routes;
}
@Override
public RouterId id() {
return id;
}
@Override
public String name() {
return name;
}
@Override
public boolean adminStateUp() {
return adminStateUp;
}
@Override
public Status status() {
return status;
}
@Override
public boolean distributed() {
return distributed;
}
@Override
public RouterGateway externalGatewayInfo() {
return externalGatewayInfo;
}
@Override
public VirtualPortId gatewayPortid() {
return gatewayPortId;
}
@Override
public TenantId tenantId() {
return tenantId;
}
@Override
public List<String> routes() {
return routes;
}
@Override
public int hashCode() {
return Objects.hash(id, name, adminStateUp, status, distributed,
externalGatewayInfo, gatewayPortId, routes);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof DefaultRouter) {
final DefaultRouter that = (DefaultRouter) obj;
return Objects.equals(this.id, that.id)
&& Objects.equals(this.name, that.name)
&& Objects.equals(this.adminStateUp, that.adminStateUp)
&& Objects.equals(this.status, that.status)
&& Objects.equals(this.distributed, that.distributed)
&& Objects.equals(this.externalGatewayInfo,
that.externalGatewayInfo)
&& Objects.equals(this.gatewayPortId, that.gatewayPortId)
&& Objects.equals(this.routes, that.routes);
}
return false;
}
@Override
public String toString() {
return toStringHelper(this).add("id", id).add("routerName", name)
.add("adminStateUp", adminStateUp).add("status", status)
.add("distributed", distributed)
.add("externalGatewayInfo", externalGatewayInfo)
.add("gatewayPortid", gatewayPortId).add("routes", routes).toString();
}
}
/*
* Copyright 2015 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.vtnrsc.router;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
import java.util.Collections;
import org.junit.Test;
import org.onosproject.vtnrsc.DefaultRouter;
import org.onosproject.vtnrsc.Router;
import org.onosproject.vtnrsc.RouterGateway;
import org.onosproject.vtnrsc.RouterId;
import org.onosproject.vtnrsc.TenantId;
import org.onosproject.vtnrsc.TenantNetworkId;
import org.onosproject.vtnrsc.VirtualPortId;
import com.google.common.testing.EqualsTester;
/**
* Unit tests for DefaultRouter class.
*/
public class DefaultRouterTest {
private String tenantIdStr = "123";
private String virtualPortId = "1212";
private String routeIdStr1 = "1";
private String routeIdStr2 = "2";
private String routerName = "router";
private String tenantNetworkId = "1234567";
/**
* Checks that the DefaultRouter class is immutable.
*/
@Test
public void testImmutability() {
assertThatClassIsImmutable(DefaultRouter.class);
}
/**
* Checks the operation of equals().
*/
@Test
public void testEquals() {
final TenantId tenantId = TenantId.tenantId(tenantIdStr);
final VirtualPortId portId = VirtualPortId.portId(virtualPortId);
final RouterId routerId1 = RouterId.valueOf(routeIdStr1);
final RouterId routerId2 = RouterId.valueOf(routeIdStr2);
final TenantNetworkId networkId = TenantNetworkId
.networkId(tenantNetworkId);
final RouterGateway routerGateway = RouterGateway.routerGateway(
networkId,
true,
Collections
.emptySet());
Router r1 = new DefaultRouter(routerId1, routerName, false,
Router.Status.ACTIVE, false,
routerGateway, portId, tenantId, null);
Router r2 = new DefaultRouter(routerId1, routerName, false,
Router.Status.ACTIVE, false,
routerGateway, portId, tenantId, null);
Router r3 = new DefaultRouter(routerId2, routerName, false,
Router.Status.ACTIVE, false,
routerGateway, portId, tenantId, null);
new EqualsTester().addEqualityGroup(r1, r2).addEqualityGroup(r3)
.testEquals();
}
/**
* Checks the construction of a DefaultRouter object.
*/
@Test
public void testConstruction() {
final TenantId tenantId = TenantId.tenantId(tenantIdStr);
final VirtualPortId portId = VirtualPortId.portId(virtualPortId);
final RouterId routerId = RouterId.valueOf(routeIdStr1);
final TenantNetworkId networkId = TenantNetworkId
.networkId(tenantNetworkId);
final RouterGateway routerGateway = RouterGateway.routerGateway(
networkId,
true,
Collections
.emptySet());
Router r1 = new DefaultRouter(routerId, routerName, false,
Router.Status.ACTIVE, false,
routerGateway, portId, tenantId, null);
assertThat(routerId, is(notNullValue()));
assertThat(routerId, is(r1.id()));
assertThat(tenantId, is(notNullValue()));
assertThat(tenantId, is(r1.tenantId()));
assertThat(routerGateway, is(notNullValue()));
assertThat(routerGateway, is(r1.externalGatewayInfo()));
}
}